Datei-Upload-Formular mit PHP verarbeiten

Mike Rofon

Erfahrenes Mitglied
Ich hab n Formular, welches mit PHP ausgewertet wird (Eintrag der Eingaben in eine MySQL-Tabelle).
Jetzt soll da ein Datei-Upload dazukommen. In SelfHTML 8 bietet man einen Weg, einen Datei-Upload mit Perl zu verarbeiten.
Wie verarbeitet man ein Datei-Upload-Formular mit PHP? Unter anderem interessiert mich da auch wie man die Upload-Datei in ein bestimmtes Verzeichnis auf dem Webspace schickt.

Danke im Voraus für jeden konstruktiven Tip :)
 
Servus!
Mach ein Formular, wo du bilder etc hochladen kannst und danach könnte das ganze so mit einer if-anweisung ausschauen:
PHP:
<?
if ($_REQUEST['Submit'])
{
$target_path = "uploads/"; \\Daten werden in dieses Verzeichnis hochgeladen (das musst du aber vorher anlegen)

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "Bild ". basename( $_FILES['uploadedfile']['name']). " wurde erfolgreich hochgeladen!";
} 

else{
    echo "Fehler! Bitte versuchen Sie es ein bisschen später noch einmal!";
}
}
?>

Viel Spass!

Michael
 
Alles Wissenswerte steht im Kapitel über die Steuerung von Dateiuploads.

Ich hab das mal probiert was da an Beispielen steht ... bekomme aber folgendes zu lesen:

Warning: move_uploaded_file() [function.move-uploaded-file]: SAFE MODE Restriction in effect. The script whose uid is 47702 is not allowed to access / owned by uid 0 in /home/www/htdocs/xxxxx.de/yyyyyyy/upload2.php on line 9

und das obwohl da noch steht:

Anmerkung: Wenn Safe Mode aktiviert ist, überprüft PHP, ob die Dateien/Verzeichnisse die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.
Anmerkung: move_uploaded_file() ist von den normalen Safe Mode UID-Einschränkungen nicht betroffen. Dies ist nicht unsicher, da move_uploaded_file() nur mit via PHP hochgeladenen Dateien arbeitet.
 
du musst in dem verzeichnis wo das uploadscript liegt einen ordner namens uploads erstellen, ansonsten musst du im php-code den pfad ändern...ich glaub das ist das problem ;-)
 
Also ich mach das mal ausführlicher ....
Im Kapitel 38 von PHP.net steht das so:
PHP:
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
und die Auswertung so
PHP:
<?php 
// In PHP kleiner als 4.1.0 sollten Sie $HTTP_POST_FILES anstatt $_FILES verwenden.
// In PHP kleiner als 4.0.3 verwenden Sie copy() und is_uploaded_file() anstatt von
// move_uploaded_file()

$uploaddir = '/var/www/uploads/';

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
   print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
   print_r($_FILES);
} else {
   print "Possible file upload attack!  Here's some debugging info:\n";
   print_r($_FILES);
}

?>

Was in $uploaddir steht gibt es wirklich. Allerdings nicht
$uploaddir = '/var/www/uploads/';
sondern
$uploaddir = '/yyyyyyy/';
um genau zu sagen... dasselbe Verzeichnis wie in der Fehlermeldung
Code:
Warning: move_uploaded_file() [function.move-uploaded-file]: SAFE MODE Restriction in effect. The script whose uid is 47702 is not allowed to access / owned by uid 0 in /home/www/htdocs/xxxxx.de/yyyyyyy/upload2.php
Ich teste das nicht lokal sondern auf meinem Webspace.
 
hmmmmmmmm .. also so langsam verlier ich den Überblick.... was hab ich denn jetzt geändert damit die Fehlermeldung von eben nicht mehr kommt, aber der Upload trotzdem nicht funktioniert?

Also ok, ich poste hier mal die Codes rein....

upload1.php
PHP:
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta name="author" content="Burkhard Riedel">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">


<form enctype="multipart/form-data" action="upload2.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
Send this file: <input name="newsbild" type="file">
<input type="submit" value="Send File">
</form>

</body>
</html>

upload2.php
PHP:
<?php

$uploaddir = '/radioefr/';

print "<pre>";
if (move_uploaded_file($_FILES['newsbild']['tmp_name'], $uploaddir . $_FILES['newsbild']['name'])) {
   print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
   print_r($_FILES);
} else {
   print "Possible file upload attack!  Here's some debugging info:\n";
   print_r($_FILES);
}

?>

Das Resultat ist:
Code:
Possible file upload attack!  Here's some debugging info:
Array
(
    [userfile] => Array
        (
            [name] => lazard.jpg
            [type] => image/pjpeg
            [tmp_name] => /home/www/htdocs/starlight-media.de/tmp/phpcxnMYe
            [error] => 0
            [size] => 2445
        )

)

und bevor ich nich weiß was ich hier falsch mach änder ich auch nix mehr dran :)
Mit einfach probieren komm ich scheinbar nicht weiter ....
 
Zurück