IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP: Upload per HTTP



PHP: Upload per HTTP

Um nicht jedes mal einen FTP-Client zu benutzen, wenn Sie z.B. ein neues Urlaubsfoto auf Ihren Webspace laden wollen gibt es in PHP auch die Möglichkeit, einen File Upload per HTTP (also über ein Browserfenster) zu realisieren.


Autor: ()
Datum: 29-10-2004, 13:55:52
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 94599x
Rating: 8.33 (6x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

Vorweg sei gesagt, dass nicht jeder PHP Webspace Anbieter das Hochladen von Dateien unterstützt. Die zugelassene Größe der Dateien ist auch providerabhängig, liegt aber standardmäßig bei 2 Megabyte. Wenn Sie prüfen wollen, welche Einstellungen Ihr Webhoster benutzt, starten Sie einfach folgendes PHP Script:

Datei test.php

<?php

echo "Uploads zugelassen: " . get_cfg_var("file_uploads") . "<br>";
echo
"Max. Upload Größe (Dateigröße der hochzuladenen Datei): " . get_cfg_var("upload_max_filesize") . "<br>";
echo
"Max. Script Speicher (Speicher den ein Script benutzen darf): " . get_cfg_var("memory_limit") . "<br>";
echo
"Max. \"post\" Daten (Menge an Daten die per \"post\" übermittelt werden): " . get_cfg_var("post_max_size") . "<br>";
echo
"Max. Laufzeit (Zeit des Ausführens eines Scripts): " . get_cfg_var("max_execution_time") . " Sek";

?>

Letzteres kann man jedoch mit dem Befehl "set_time_limit(0);" übergehen.

HTML Formular

Die Grundlage eines HTTP Uploads stellt immer ein HTML Formular dar. Dieses besitzt ein paar Besonderheiten. Enctype muss auf "multipart/form-data" stehen und die Methode muss immer "post" heißen. Als Action wird die PHP Datei angegeben, die die Datei überprüft und kopiert. Weiter geht es mit einem input Formularobjekt. Hier muss als type immer "file" eingestellt sein. Genug der Theorie - Der Source Code sagt mehr aus:

Datei upload-form.html:
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload">
<input type="file" name="file"><input type="submit" name="submit" value="Upload">
</form>

In der PHP Datei soll nun überprüft werden, ob die Datei vorhanden ist, nicht zu groß ist und eine gültige Endung besitzt. Also legen wir anfangs 2 Variabeln fest: $max_byte_size bestimmt die maximale Größe der Datei und $allowed_types die erlaubten Endungen im Format "(jpg|bmp|zip)". Das Format muss so angegeben werden, da es nachher die Verwendung des Regular Expression erleichtert. Ob eine Datei hochgeladen, oder das Formular nur abgeschickt wurde teilt uns die Funktion "is_uploaded_file" mit.

Bevor wir weitermachen möchte ich noch einige Kleinigkeiten über die in PHP geschehende Variabelzuordung der hochgeladenen Datei sagen. Der Name des Input Tags mit dem Type "file" stellt die Grundlage dar. In diesem Fall ist der Name ebenfalls "file" aber sie wird nicht etwa mit $_POST["file"] angesprochen sondern mit $_FILES["file"]. $_FILES["file"] wiederum ist ein assoziatives Array mit den Keys:
- "name" (Name auf dem Client System)
- "type" (MIME Type der Datei)
- "size" (Größe in Byte)
- "tmp_file" (Name auf dem Server)

Um die temporäre Datei auf dem Server letztendlich an ihren Bestimmungsort zu kopieren kann der Befehl "copy" oder "move_uploaded_file" verwendet werden.
Abschließend der komplette Source des Upload Scripts.

Datei upload.php:

<?php

// Variabeln festlegen
$max_byte_size = 2097152;
$allowed_types = "(jpg|jpeg|gif|bmp|png)";

// Formular wurde abgeschickt
if($_POST["submit"] == "Upload") {

// Wurde wirklich eine Datei hochgeladen?
if(is_uploaded_file($_FILES["file"]["tmp_name"])) {

// Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen)
if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"])) {

// Datei auch nicht zu groß
if($_FILES["file"]["size"] <= $max_byte_size) {

// Alles OK -> Datei kopieren
if(copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) {

echo
"Datei erfolgreich hochgeladen!<br>";
echo
"Name: " . $_FILES["file"]["name"] . "<br>";
echo
"Größe: " . $_FILES["file"]["size"] . " Byte<br>";
echo
"MIME-Type: " . $_FILES["file"]["type"] . "<br>";
echo
"Link: <a href=\"" . $_FILES["file"]["name"] . "\">" . $_FILES["file"]["name"] . "</a>";

}
else {

echo
"Datei konnte nicht hochgeladen werden.";

}

}
else {

echo
"Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen.";

}

}
else {

echo
"Die Datei besitzt keine ungültige Endung.";

}

}
else {

echo
"Keine Datei zum Hochladen angegeben.";

}

}
else {

echo
"Bitte benutzen Sie das Upload Formular.";

}

?>


ifuxx
Rookie
Beitrag vom:
27-01-2008, 14:03:24

Tolles Script.

Wie kann ich andere Ordner anlegen?

-----------------------------------------------------


Cruelty
Rookie
Beitrag vom:
13-05-2007, 04:12:44

OMG

Dieses Script ist löchriger als ein schweizer Käse. Ich habe ein sehr ähnliches geschrieben, das checkt ob die Datei vorhanden ist, und wo vor allem die Upload-Dir ausgewählt werden kann. Ferner generiert es automatisch anhand einer Variable ein Verzeichniss, wonach man in Verbindung mit einem Login-System z.B. Bilder unter dem Usernamen speichern kann.

Alles in allem war das ein guter Versuch ein funktionierendes Script bereitzustellen, Dominik, aber es wäre cool, wenn du auf die Lücken im Script hinweisen würdest. So müsste die Newbies nicht immer fragen. ;)

Wenn Interesse an meinem Script besteht, setz ich es hier rein, wenn ich kann?! ansonsten findest ihr es auf meiner Homepage, thomasschmetkamp.de

Sollte Interesse an einem Upload-Script bestehen, das die Files in eine Datenbank schreibt, ist das auch kein Problem. Immer her mit euren Wünschen.

-----------------------------------------------------
... No Comment ...


Loser
Rookie
Beitrag vom:
07-05-2007, 16:33:40

Frage

Kann man den Upload "blockieren", wenn eine Datei mit dem selben Namen schon existiert?

Ansonsten super script!

-----------------------------------------------------


pascal
Rookie
Beitrag vom:
16-12-2006, 18:12:39

Verzeichnisse

Ist es möglich dieses Script so zu verändern, dass man auswählen kann in welches verzeichniss die Bilder gespeichert werden?

Ich stelle mir das so vor, dass man beim upload zwischen verschiedenen Kategorien auswählen kann, und dann die Bilder dort hin gespeichert werden.

Besten Dank für die Antwort

Pascal

-----------------------------------------------------


fluffy17
Rookie
Beitrag vom:
18-11-2006, 16:15:03

Bei der Ausführung kommt der Fehler "Internal Server Error"

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


--------------------------------------------------------------------------------

Apache/2.0.54 (Fedora) Server at grapen-stieten.de Port 80


Ich bekomme immer diesen Fehler obwohl ich alle rechte vergeben habe zur ausführung? Das selbste erscheind auch bei der test.php was kann ich da machen?
mfg
Fluffy17

-----------------------------------------------------


Damian
Rookie
Beitrag vom:
25-10-2006, 03:15:48

Gute skript

Joa coole skript, aber Sie sollten erwähnen, dass der ordner die zugriffsrechte 777 haben sollten. Weil einige wissen es ja nicht. ^_^.

-----------------------------------------------------


renrew
Rookie
Beitrag vom:
12-05-2005, 20:49:46

Super, aber wie zeige ich das Bild an?

Quellcode und Erklärungen wirklich super. Die Grafiken sind hochgeladen, was jetzt noch auf meiner Wunschliste steht, ist ein Script, das die Grafiken in ein array oder eine Datenbank schreibt und ich mir auf der html-Seite die Aufkistung ansehen kann ;-)

Gruesse

renrew

-----------------------------------------------------



Senior Member
Beitrag vom:
01-05-2005, 19:15:33

Um einen Upload durchzuführen, muss die Datei auf den Webserver kopiert werden... Wenn das Verzeichnis dann nicht die erforderlichen Schreibrechte besitzt, funktioniert es nicht. Denke mal das der Fehler dort liegt ;)

-----------------------------------------------------


Pureblodo
Rookie
Beitrag vom:
01-05-2005, 10:30:20

probleme

ich bekomme bei der benutzung ihres scriptes immer folgende meldung, wenn ich alle kriterien erfülle:


Warning: copy(pure.jpg): failed to open stream: Permission denied in /html/Memi/upload.php on line 27
Datei konnte nicht hochgeladen werden.

ich habe auch die datei versucht, welche mir beschreibt, ob und was ich hochladen darf (vom Provider aus gesehen), und das result besagt, dass ich 1 file mit max 8MB hochladen darf, das sollte also nicht das problem sein. Welcher Grund könnte da nun vorliegen?

MfG


-----------------------------------------------------



Senior Member
Beitrag vom:
10-02-2005, 17:28:59

Kann gut sein, welche Seite war das denn? Vielleicht wurde der Artikel auch einfach von hier kopiert...

-----------------------------------------------------



Rookie
Beitrag vom:
09-02-2005, 20:32:56

hm....

... Also mir kommt vor als ob ich dieses Tutorial schon einmal auf einer anderen Seite gesehen habe..... vielleicht hast du es ja auch da gepostet... egal ^^

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04497
Artikel:00815
Glossar:04117
News:13566
Userbeiträge:16551
Queueeinträge:06221
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1109
Comments: 0