Ich habe eine neue Version meines Content Management Systems veröffentlicht. Der große Versionssprung ist dadurch zu erklären, dass ich die interne Architektur vollständig überarbeitet habe, wodurch keine Kompatibilität mehr zur Version 2.6.1 besteht.
Ich habe den Funktionsumfang deutlich erweitert, unter anderem wurde PHPMailer integriert. Zudem gibt es mit dem PHP installer agent 1.0.0 eine eigene Installationsroutine, sodass die Installation jetzt deutlich komfortabler ist. Das CMS verfügt jetzt außerdem über ein komplexes Themesystem, das über JSON gesteuert werden kann. Eine Dokumentation zur Nutzung des Themesystems sowie zur Anpassung von Layouts folgt auf GitHub.
Zuletzt sei noch erwähnt, dass sich das Projekt von einem kleinen Skript zu einem vollwertigen CMS entwickelt hat, weshalb ich es von PHP user control in PHP universal core umbenannt habe. Der neue Name passt besser zu dem erweiterten Funktionsumfang, insbesondere da ich das Projekt weiterhin aktiv weiterentwickeln und optimieren werde.
2025 habe ich 44 Spiele durchgespielt. Außerdem habe ich mir 76 Filme und Serien angesehen.
Lieblingsspiele 2025
S.T.A.L.K.E.R. 2: Heart of Chornobyl [XBSX]
Blood: Refreshed Supply [XBSX]
CULTIC: Chapter Two [STEAM]
Selaco [STEAM]
RoboCop: Rogue City - Unfinished Business [XBSX]
DooM: The Dark Ages [XBSX]
Spiel des Jahres 2024
S.T.A.L.K.E.R. 2: Heart of Chornobyl [XBSX]
Lieblingsfilme und Lieblingsserien 2025
Herbstsonate
Persona
Licht im Winter
Das siebente Siegel
Von Angesicht zu Angesicht
Lieblingslieder 2025
Bury Tomorrow - To Dream, To Forget
Nirvana - Dumb
Nirvana - Lithium
PHPUC 2.6.1
von pathologicalplay am
Mein aktuelles Projekt ist ein CMS, das auf PHP und MySQL basiert. Ursprünglich sollte es lediglich eine überarbeitete Version meines Nutzerverwaltungsskripts werden, entwickelte sich im Laufe der Zeit jedoch zu einem recht umfangreichen CMS. Es ist prozedural, aber funktional prozedural aufgebaut. Ich arbeite bereits an einer neuen Version.
Ich habe einen kleinen Image uploader mit PHP umgesetzt, der über ein eigenes Fehlersystem verfügt und leicht an jede andere Dateiart angepasst werden kann.
//Zur Verwendung, die Dateien unter den aufgeführten Pfaden speichern.
//Dateiname: ImageUploader.php
//Name des Ordners: classes
//classes/ImageUploader.php
class ImageUploader {
private $errors = [];
private $image;
private $allowed_image_extensions = array("jpg", "jpeg", "png");
private $allowed_image_mime_types = array('image/jpeg', 'image/png');
private $maximum_image_size = 2 * 1024 * 1024;
function __construct($image) {
$this->image = $image['image'];
}
public function add_error($error) {
$this->errors[] = $error;
}
public function get_errors() {
return $this->errors;
}
public function has_errors() {
return ! empty($this->errors);
}
private function create_new_image_name() {
$image_name = $this->image['name'];
$new_image_name = uniqid();
$image_extension = pathinfo($image_name, PATHINFO_EXTENSION);
return $final_new_image_name = $new_image_name. "." . $image_extension;
}
private function validate_image() {
if (isset($this->image) && is_array($this->image)) {
if ($this->image['error'] === UPLOAD_ERR_OK) {
$image_size = $this->image['size'];
if ($image_size > $this->maximum_image_size) {
$this->add_error('Error uploading image, invalid image size.');
}
$image_name = $this->image['name'];
$image_extension = pathinfo($image_name, PATHINFO_EXTENSION);
if (! in_array(strtolower($image_extension), $this->allowed_image_extensions)) {
$this->add_error('Error uploading image, invalid image extension. Only JPG, JPEG or PNG allowed.');
}
$image_type = $this->image['type'];
if (! in_array($image_type, $this->allowed_image_mime_types)) {
$this->add_error('Error uploading image, invalid MIME Type.');
}
$file_image_size = getimagesize($this->image['tmp_name']);
if ($file_image_size !== false) {
$width = $file_image_size[0];
$height = $file_image_size[1];
if ($width > 250 and $height > 250 or $width < 250 and $height < 250) {
$this->add_error('The image must be 250X250PX.');
}
} else {
$this->add_error('The image must be 250X250PX.');
}
} elseif ($this->image['error'] === UPLOAD_ERR_NO_FILE) {
$this->add_error('Error uploading image, you need to enter a image.');
}
}
}
private function upload_image() {
$image_tmp_name = $this->image['tmp_name'];
$new_image_name = $this->create_new_image_name();
if ($new_image_name && move_uploaded_file ($image_tmp_name , 'images/'. $new_image_name)) {
return true;
} else {
return false;
}
}
public function upload() {
$this->validate_image();
if ($this->has_errors()) {
return false;
} else {
return $result = $this->upload_image();
}
}
}
//Dateiname: index.php
require_once 'classes/ImageUploader.php';
if (isset($_POST['upload_image'])) {
$image_uploader = new ImageUploader($_FILES);
$upload_result = $image_uploader->upload();
if ($upload_result === true) {
echo "The image has been successfully uploaded.";
}
if ($image_uploader->has_errors()) {
echo "<li>". "The upload was not successful.". "</li>";
foreach ($image_uploader->get_errors() as $error) {
echo "<li>". htmlentities($error). "</li>";
}
}
}
include 'templates/image_uploader_template.php';