Einfaches Upload Script Zurück zur Übersicht
Über den Autor
Willkommen und Hallo zu meinem ersten Tutorial.
Wir legen uns eine Datei mit den Konfigurationen an. Nun schreiben wir uns dort den Seitentitel hinein, den Ort, an dem wir später die Daten haben wollen, und die maximale Größe der Dateien. Ich habe hier außerdem für die zulässigen Dateien den MIME Type gewählt, jedoch kann man auch Dateiendungen nehmen. Man sollte auf jeden Fall nicht alles zulassen, denn es könnte ja sonst auch jemand PHP Dateien hochladen und UNSERE PHP Programme auslesen oder gar löschen.
config.inc.php
<?php //////////////////////////////////////////////////////////////////////// # # ######################################################################## # # ################## Spacequadrat File Uploader v 0.1 #################### # # ######################################################################## # # ################# (c) 2010 by Spacequadrat.de | XMMX ################### # # ######################################################################## # # //////////////////////////////////////////////////////////////////////// $Titel = 'XMMX Uploader v 0.1'; //Titel der Seite $ZielOrt = 'uploads/'; // Der Ordner in den die Datei gespeichert weden soll $MaxGroesse = '1509949'; // Maximale Größe der Datei, bitte ohne Komma und in Bytes //Bilder $DateiTypen[] = 'drawing/x-dwf'; $DateiTypen[] = 'image/cis-cod'; $DateiTypen[] = 'image/cmu-raster'; $DateiTypen[] = 'image/fif'; $DateiTypen[] = 'image/gif'; $DateiTypen[] = 'image/ief'; $DateiTypen[] = 'image/jpeg'; $DateiTypen[] = 'image/png'; $DateiTypen[] = 'image/tiff'; $DateiTypen[] = 'image/vasa'; $DateiTypen[] = 'image/vnd.wap.wbmp'; $DateiTypen[] = 'image/x-freehand'; $DateiTypen[] = 'image/x-icon'; $DateiTypen[] = 'image/x-portable-anymap'; $DateiTypen[] = 'image/x-portable-bitmap'; $DateiTypen[] = 'image/x-portable-graymap'; $DateiTypen[] = 'image/x-portable-pixmap'; $DateiTypen[] = 'image/x-rgb'; $DateiTypen[] = 'image/x-windowdump'; $DateiTypen[] = 'image/x-xbitmap'; $DateiTypen[] = 'image/x-xpixmap'; //Video $DateiTypen[] = 'video/mpeg'; $DateiTypen[] = 'video/quicktime'; $DateiTypen[] = 'video/vnd.vivo'; $DateiTypen[] = 'video/x-msvideo'; $DateiTypen[] = 'video/x-sgi-movie'; //Programme $DateiTypen[] = 'application/acad'; $DateiTypen[] = 'application/applefile'; $DateiTypen[] = 'application/astound'; $DateiTypen[] = 'application/dsptype'; $DateiTypen[] = 'application/dxf'; $DateiTypen[] = 'application/futuresplash'; $DateiTypen[] = 'application/gzip'; $DateiTypen[] = 'application/listenup'; $DateiTypen[] = 'application/mac-binhex40'; $DateiTypen[] = 'application/mbedlet'; $DateiTypen[] = 'application/mif'; $DateiTypen[] = 'application/msexcel'; $DateiTypen[] = 'application/mshelp'; $DateiTypen[] = 'application/mspowerpoint'; $DateiTypen[] = 'application/msword'; $DateiTypen[] = 'application/octet-stream'; $DateiTypen[] = 'application/oda'; $DateiTypen[] = 'application/pdf'; $DateiTypen[] = 'application/postscript'; $DateiTypen[] = 'application/rtc'; $DateiTypen[] = 'application/rtf'; $DateiTypen[] = 'application/studiom'; $DateiTypen[] = 'application/toolbook'; $DateiTypen[] = 'application/vnd.oasis.opendocument.text'; $DateiTypen[] = 'application/vnd.wap.wmlc'; $DateiTypen[] = 'application/vnd.wap.wmlscriptc'; $DateiTypen[] = 'application/vocaltec-media-desc'; $DateiTypen[] = 'application/vocaltec-media-file'; $DateiTypen[] = 'application/xhtml+xml'; $DateiTypen[] = 'application/xml'; $DateiTypen[] = 'application/x-bcpio'; $DateiTypen[] = 'application/x-compress'; $DateiTypen[] = 'application/x-cpio'; $DateiTypen[] = 'application/x-csh'; $DateiTypen[] = 'application/x-director'; $DateiTypen[] = 'application/x-dvi'; $DateiTypen[] = 'application/x-envoy'; $DateiTypen[] = 'application/x-gtar'; $DateiTypen[] = 'application/x-hdf'; $DateiTypen[] = 'application/x-httpd-php'; $DateiTypen[] = 'application/x-javascript'; $DateiTypen[] = 'application/x-latex'; $DateiTypen[] = 'application/x-macbinary'; $DateiTypen[] = 'application/x-mif'; $DateiTypen[] = 'application/x-netcdf'; $DateiTypen[] = 'application/x-nschat'; $DateiTypen[] = 'application/x-sh'; $DateiTypen[] = 'application/x-shar'; $DateiTypen[] = 'application/x-shockwave-flash'; $DateiTypen[] = 'application/x-sprite'; $DateiTypen[] = 'application/x-stuffit'; $DateiTypen[] = 'application/x-supercard'; $DateiTypen[] = 'application/x-sv4cpio'; $DateiTypen[] = 'application/x-sv4crc'; $DateiTypen[] = 'application/x-tar'; $DateiTypen[] = 'application/x-tcl'; $DateiTypen[] = 'application/x-tex'; $DateiTypen[] = 'application/x-texinfo'; $DateiTypen[] = 'application/x-troff'; $DateiTypen[] = 'application/x-troff-man'; $DateiTypen[] = 'application/x-troff-me'; $DateiTypen[] = 'application/x-troff-ms'; $DateiTypen[] = 'application/x-ustar'; $DateiTypen[] = 'application/x-wais-source'; $DateiTypen[] = 'application/x-www-form-urlencoded'; $DateiTypen[] = 'application/zip'; //Audio $DateiTypen[] = 'audio/basic'; $DateiTypen[] = 'audio/echospeech'; $DateiTypen[] = 'audio/tsplayer'; $DateiTypen[] = 'audio/voxware'; $DateiTypen[] = 'audio/x-aiff'; $DateiTypen[] = 'audio/x-dspeeh'; $DateiTypen[] = 'audio/x-midi'; $DateiTypen[] = 'audio/x-mpeg'; $DateiTypen[] = 'audio/x-pn-realaudio'; $DateiTypen[] = 'audio/x-pn-realaudio-plugin'; $DateiTypen[] = 'audio/x-qt-stream'; $DateiTypen[] = 'audio/x-wav'; //Message $DateiTypen[] = 'message/external-body'; $DateiTypen[] = 'message/http'; $DateiTypen[] = 'message/news'; $DateiTypen[] = 'message/partial'; $DateiTypen[] = 'message/rfc822'; $DateiTypen[] = 'model/vrml'; //Multipart $DateiTypen[] = 'multipart/alternative'; $DateiTypen[] = 'multipart/byteranges'; $DateiTypen[] = 'multipart/digest'; $DateiTypen[] = 'multipart/encrypted'; $DateiTypen[] = 'multipart/form-data'; $DateiTypen[] = 'multipart/mixed'; $DateiTypen[] = 'multipart/parallel'; $DateiTypen[] = 'multipart/related'; $DateiTypen[] = 'multipart/report'; $DateiTypen[] = 'multipart/signed'; $DateiTypen[] = 'multipart/voice-message'; //Text $DateiTypen[] = 'text/comma-separated-values'; $DateiTypen[] = 'text/css'; $DateiTypen[] = 'text/html'; $DateiTypen[] = 'text/javascript'; $DateiTypen[] = 'text/plain'; $DateiTypen[] = 'text/richtext'; $DateiTypen[] = 'text/rtf'; $DateiTypen[] = 'text/tab-separated-values'; $DateiTypen[] = 'text/vnd.wap.wml'; $DateiTypen[] = 'text/vnd.wap.wmlscript'; $DateiTypen[] = 'text/xml'; $DateiTypen[] = 'text/xml-external-parsed-entity'; $DateiTypen[] = 'text/x-setext'; $DateiTypen[] = 'text/x-sgml'; $DateiTypen[] = 'text/x-speech'; //Workbook $DateiTypen[] = 'workbook/formulaone'; //X-World $DateiTypen[] = 'x-world/x-3dmf'; $DateiTypen[] = 'x-world/x-vrml'; ?>
Ok, und nun zum eigentlichen Programm.
Oben binden wir unsere config-Datei ein, danach bauen wir uns einen noch normalen Header, außer dass der Titel aus der Konfig kommt, muss man aber natürlich nicht machen. Das Formular ist normal, jedoch muss unbedingt enctype mit angegeben werden, denn sonst werden die gesendeten Daten nicht richtig verarbeitet. Die maximal Größe geben wir an, damit schon vor dem Senden geprüft wird, ob die Datei nicht zu groß ist, das nimmt dem Server natürlich Arbeit ab.
Im PHP Teil wird erst noch einmal die Größe gecheckt und dann der Dateityp. Sollte dieses Beides ok sein, wird die Datei gepeichert. Sollte dabei noch ein Fehler auftreten, wird natürlich dir entsprechende Fehlermeldung ausgegeben.
index.php
<?php require_once("config.inc.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title><?php echo $Titel; ?></title> </head> <body> <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $MaxGroesse ; ?>" /> Zieldatei:<br /> <input name="Datei" type="file"><br /> <input name="submit" type="submit" value="Datei absenden"> </form> <?php } else { if($_FILES['Datei']['size'] >= $MaxGroesse){ echo 'Die Datei ist zu groß.'; echo 'Die Datei ist von einem falschen Typ.'; } else { if(move_uploaded_file($_FILES['Datei']['tmp_name'], $ZielOrt.$_FILES['Datei']['name'])){ echo 'Der Upload war erfolgreich.'; } else { echo 'Leider gab es einen Fehler auf dem Server. Bitte versuchen Sie es später erneut.'; } } }?> </body> </html>
Wo die gespeicherten Datein sind, sollte ja denke ich klar, sonst müsst ihr euch den move_upload_file Befehl noch einmal genauer ansehen.
Dieses Script überschreibt schon vorhandene Dateien gleichen Namens. Das ist aber mit ein wenig Aufwand ganz einfach zu ändern.
Wenn man es nach Dateiendungen machen will, sollte man mit einem explode Arbeiten, an der Stelle, mit in_array.
Da der Code manchmal durch das System zerstört wird, könnt ihr es auch Hier herunterladen.