Upload-Erweiterung (CMS)
Das Upload unseres CMS funktionert noch nicht mit dem neuen Ordnersystem. Das wird sich heute ändern. Außerdem wird nach diesem Artikel, wenn die Datei ein Bild ist, ein Formular für das Hinzufügen (der noch nicht existierenden) Mediathek.
Fangen wir mal mit dem FileServer an(/system/classes/fileserver.php). Dieser bekommt nun die Methode Upload. Sie lädt natürlich eine Datei hoch:
function upload($base,$file){ $tempname = $_FILES['file']['tmp_name']; $name = $_FILES['file']['name']; return copy($tempname, "../content/uploads/".$base."/".$name); }
Damit wir nachher beim Upload auch wissen, in welchem Verzeichnis die Datei liegen soll, muss in der Datei /admin/includes/files.php noch ein hidden-Feld mit dem Verzeichnis übergeben werden:
<h1>Dateien</h1> <form enctype="multipart/form-data" action="/admin/index.php?page=upload" method="post"> <input type=hidden name="dir" value="<?PHP echo $_GET['dir']; ?>" /> Datei: <input type="file" name="file"> <input type="submit" value="Datei hochladen"> ...
In der Datei /admin/includes/upload.php wird nun die Methode vom FileServer aufgerufen. Anhand der Endung erkennen wir, ob es sich um ein Bild handelt und blenden das Formular für die Mediathek ein:
<h1>Upload</h1> <?php if(FileServer::upload($_POST['dir'],$_FILES['file'])) { $name = $_FILES['file']['name']; echo "Die Datei ".$name." wurde erfolgreich hochgeladen!"; $path_info = pathinfo("../content/uploads/".$base."/".$name); if(strtolower($path_info['extension'] == 'jpg') or strtolower($path_info['extension'] == 'jpeg') or strtolower($path_info['extension'] == 'gif') or strtolower($path_info['extension'] == 'png') or strtolower($path_info['extension'] == 'bmp')){ ?> <h2>Bild in Mediathek einfügen</h2> <form action="/admin/index.php?page=addImage" method="POST"> <input type="hidden" name="path" value="<?PHP echo "/content/uploads/".$base."/".$name; ?>" /> <table> <tr> <td>Name:</td> <td><input name="name" /></td> </tr> <tr> <td>Beschreibung:</td> <td><input name="description" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Einfügen" /> </tr> </table> </form> <img src="<?PHP echo "../content/uploads/".$base."/".$name; ?>" style="max-width:300px" /> <?PHP } } else { echo "Der Upload ist leider fehlgeschlagen."; } ?>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Kay schrieb am 03.12.2009:
Servus mal wieder, zwei Fehler sind mir hier aufgefallen: 1. Fehler: if(FileServer::upload($_POST['dir'],$_FILES['file'])) sollte wohl heißen if(FileServer::upload($_POST['dir'],$_FILES)) denn in der Funktion hast du das function upload($base,$file) stehen, was nicht funktionieren wurde, wenn du nicht auch dort etwas eingebaut hättest, was man so nicht erwartet (nach den Übergabe-Parametern). Und zwar $tempname = $_FILES['file']['tmp_name']; sollte wohl $tempname = $file['file']['tmp_name']; heißen, denn das $_FILE übergibst du ja an die Methode. Ansonsten könnte man sich das übergeben ersparen. ;) 2. Fehler $path_info = pathinfo("../content/uploads/".$base."/".$name); hier nutzt du $base obwohl das in der Datei nirgendwo deklariert ist. Was natürlich spätestens hier <img src="" style="max-width:300px" /> Probleme macht. Gruss Kay
Stefan Wienströer schrieb am 03.12.2009:
Danke für die Hinweise, werd mal morgen nen neuen Bugfix-Artikel schreiben.
Hannes schrieb am 22.06.2010:
Hi, ich hab auch einen Bug gefunden: du hast ein paar Klammer-fehler gemacht: if(strtolower($path_info['extension']) == 'jpg' or strtolower($path_info['extension']) == 'jpeg' or strtolower($path_info['extension']) == 'gif' or strtolower($path_info['extension']) == 'png' or strtolower($path_info['extension']) == 'bmp'){ so müsste es richtig sein. Vorher wurde das Ergebnis des Vergleichs bsp: $path_info['extension'] == 'jpg') ich kleinbuchstaben ungeändert, nicht die extension selbst. MfG Hannes
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project