Forum
Tipps
News
Menu-Icon

Upload Script mit PHP

Hallo Zusammen
Habe ein grosses Problem mit meinem Upload-Script...
Es ist keins von mir, sondern ein fertiges aus dem www.

Nun, zur Vorgeschichte:
Habe das Script in meine Seite eingefügt, den Pfad angepasst, den Ordner erstellt und auf CHMOD 777 gestellt. Soweit so gut.
Habe dann, ein File (schraubenzieher.jpg) hochladen können, und siehe da, es war in dem Ordner, in dem ich wollte.

Danach wollte ich ein weiteres File hochladen, ging nicht mehr...

Habe dann den schraubenzieher.jpg wieder gelöscht und wollte erneut diesen hochladen. Egal bei was für einem Typ File, es kommt immer folgende Fehlermeldung:

Zitat
Warning: move_uploaded_file(kundenverwaltung/test1111/schraubenzieher.jpg) [function.move-uploaded-file]: failed to open stream: Datei oder Verzeichnis nicht gefunden in /opt/lampp/htdocs/kundenverwaltung/includes/content/hardware_create.php on line 206

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpnEewes' to 'kundenverwaltung/test1111/schraubenzieher.jpg' in /opt/lampp/htdocs/kundenverwaltung/includes/content/hardware_create.php on line 206
Datei konnte nicht hochgeladen werden.

Der Code dazu sieht folgendermassen aus:
<?php## Upload Formular! ########################echo "<br><h5>Upload</h5><form method=\"post\" action=\"\" enctype=\"multipart/form-data\"  >    <table border=\"0\" cellpadding=\"0\" cellspacing=\"2\">        <tr >            <td>Datei:</td>            <td><input type=\"file\" name=\"file1\" size=\"16\"></td>        </tr>        <tr >            <td></td>            <td><input type=\"submit\" value=\"Upload\"></td>        </tr>        </table></form>";  // Wichtig ist hier beim <form ... das: enctype=\"multipart/form-data\"// Dem Dateiupload feld geben wir den namen file1 (wird später noch benötigt)## Upload Funktion! ########################if($_FILES[&#39;file1&#39;][&#39;tmp_name&#39;] != "") {    // Verzeichniss wo die Dateien hingeladen werden sollen:    // WICHTIG!! das Verzeichniss muss den chmod 777 besitzen!    $uploaddir = "kundenverwaltung/test1111/";    // Upload script:    if(move_uploaded_file($_FILES[&#39;file1&#39;][&#39;tmp_name&#39;], $uploaddir.$_FILES[&#39;file1&#39;][&#39;name&#39;])) { // hier wird die datei aus dem Temp. speicher vom Server in den von den von dir angegebenen Pfad verschoben (move..)        $dateiname = $_FILES[&#39;file1&#39;][&#39;name&#39;];  // hier wird nochmal der dateiname in eine Variable gespeichert.        $dateipfad = $uploaddir.$dateiname;  // hier das gesamte Pfad zur Datei!                echo "Datei wurde hochgeladen(".$dateipfad.")."; // Statusmeldung!    } else {        echo "Datei konnte nicht hochgeladen werden.";  // Statusmeldung!    };    };?>


Nun weiss ich nicht mehr weiter, und wäre sehr froh, wenn mir jemand helfen könnte.

Thx & gruss

Antworten zu Upload Script mit PHP:

Mahlzeit |

Welche PHP-Version läuft auf dem Server?

Es ist die Version PHP 5.0.4

Aber komisch ist ja, dass es das erste mal reibungslos ging... :(

Nun, du darfst mir auch volldepp sagen... :)

Ich dachte, das Script "arbeite" vom root htdocs aus. Dabei stimmt dies gar nicht. Es arbeitet von dem Ordner Kundenverwaltung aus.

Aber eine Frage habe ich doch noch. Bin bei google nicht fündig geworden. Git es eine Art Gegenstück von "move_uploaded_file"

Also so, dass ich das File auf dem Server löschen kann?


Thx für deinen aufwand!

Bin auch schon ins Grübeln gekommen ;D

Löschen is kein Problem, dass machst du mit unlink().

greez 8)
JoSsiF

Oke, danke!
Aber warum hat es hier noch ein int vor dem unlink?

int unlink ( string filename )


Quelle:
http://ch2.php.net/unlink

Das int gibt nur den Rückgabetyp an.
----

Vielleicht folgender Tipp zum Upload:

Wenn du für den Upload bzw. das Verschieben einen absoluten Zielpfad angibst, bist du solche Probleme los.
Um das möglichst komfortabel zu lösen, ohne bei einer Portierung auf einen anderen Server jedesmal sonstwo im Quelltext rumpfuschen zu müssen, könntest du dir eine separate Konfigurationsdatei anlegen, die du immer per include() einbindest. Dort legst du dann einmalig den Serverroot fest, und im Skript baust du dir dann deinen absoluten Pfad zusammen, also nach dem Schema

$server_root."/mein/ziel/ordner" .

greez 8)
JoSsiF

Habe doch noch eine kleine Frage bezüglich des Uploadscripts...
Wie kann ich es am schnellsten bewerkstelligen, dass nur *.html files als upload zugelassen werden?

Gibt es da einen Befehl im HTML-Formular, dass beim Explorer-Fenster wo man die Datei auswählen muss, nur *.html angezeigt werden?
Oder muss man dies irgendwie mit PHP überprüfen?

Mit dem unlink habe ich auch noch so meine Mühe..
Als Rückgabewert liefert er mir ständig, dass sei ein Verzeichnis, welches ich löschen könne. Schön, dass er mich darauf hinweist und es nicht einfach ausführt :)

Der Code:

<?phpif ($loeschen)     {      echo "<table><tr><td width=\"30px\"></td><td><h4>SIW-Konfigurationsdatei erfolgreich gel&ouml;scht</h4></td></tr></table>";	      mysql_query("UPDATE t_hardware SET siw_file = NULL WHERE computerID = &#39;$computerID&#39; ");	  	  $res3 = mysql_query("SELECT * FROM t_hardware WHERE computerID = &#39;$computerID&#39; ");	  	  $row3 = mysql_fetch_array($res3);	  	  $zu_loeschen = $row3[&#39;siw_file&#39;];	  	  echo $zu_loeschen;	  	  unlink("./siw_files/".$zu_loeschen);       }?>


Und die Ordnerstruktur sieht folgendermassen aus:

  - siw-files
    - inhalt


Thx a lot
« Letzte Änderung: 10.03.06, 16:26:52 von Stif-Meister »

Kannst du mit PHP machen.

1) $_FILES['userfile']['type'] gibt dir den Mime-Type zurück, sofern vom Browser übermittelt.

2) $_FILES['userfile']['name'] liefert dir ja den vollständigen Namen der Datei. Einfach nach deinen Wünschen zerpflücken und prüfen! ;)

greez 8)
JoSsiF

Dann würde das folgendermassen aussehen..?
Einfach um den ganzen Code nochmals eine if-schlaufe...?

<?php            if($_FILES[&#39;userfile&#39;][&#39;type&#39;] == "html )            {			if($_FILES[&#39;file1&#39;][&#39;tmp_name&#39;] != "")			 {		    // Verzeichniss wo die Dateien hingeladen werden sollen:		    // WICHTIG!! das Verzeichniss muss den chmod 777 besitzen!   			   $uploaddir = "siw_files/";		    // Upload script:			    if(move_uploaded_file($_FILES[&#39;file1&#39;][&#39;tmp_name&#39;], $uploaddir.$_FILES[&#39;file1&#39;][&#39;name&#39;]))				 { // hier wird die datei aus dem Temp. speicher vom Server in den von den von dir angegebenen Pfad verschoben (move..)			        $dateiname = $_FILES[&#39;file1&#39;][&#39;name&#39;];  // hier wird nochmal der dateiname in eine Variable gespeichert.			        $dateipfad = $uploaddir.$dateiname;  // hier das gesamte Pfad zur Datei!					 echo "<h4>Datei wurde hochgeladen(".$dateipfad.").</h4>"; // Statusmeldung!				     mysql_query("UPDATE t_hardware SET siw_file = &#39;".$dateiname."&#39; WHERE computerID = &#39;$computerID&#39; ");				 }				else				 {				  echo "<h6>Datei konnte nicht hochgeladen werden.</h6>";  // Statusmeldung!				 }       		   }               }?>



Weisst du per Zufall auch gerach noch was zu meinem Problem mit dem Unlink? :)

Danke

Du machst es einem nich einfach ;)

Schau mal: ich hatte dir was von Mime-Types geschrieben. Ist "HTML" ein Mime-Type? Nö!
Was macht man, wenn man die passenden Mime-Types nicht kennt? Richtig. Nachschlagen. Wo? Zum Beispiel bei SelfHTML. Und wenn man nicht weiß, wo? --> Google

Also bei HTML hast du 2 Möglichkeiten: entweder "text/html" (für *.htm, *.html und *.shtml ) oder "application/xhtml+xml" (für *.htm, *.html, *.shtml oder *.xhtml ).

So, Thema unlink(): ein Blick in die Doku zeigt (ich zitiere):

Zitat
unlink -- Löscht eine Datei

Von Verzeichnis steht da nichts. Aber: im Manual steht in der letzten Zeile (ich zitiere):

Zitat
Siehe auch rmdir() um Verzeichnisse zu löschen.

Allet klor? :D

greez 8)
JoSsiF

Oke, ich weiss. Bin heute etwas gestresst, da der Zeitdruck auf mir "hockt" :)
Das mitem mime-typ kriege ich jetzt sicher hin..
Aber wegen dem unlink.
Ist mir auch bewusst, dass das für Files und nicht Directories gilt. Ich will ja auch ein File löschen, aber als Fehlermeldung wird mir zurückgeliefert, dass ich drauf und dran sei, ein Directory zu löschen.
So wie ich allerdings das Directory (siw_files) und die Variabel des Dateinamens ($zu_loeschen) verknüpfe, erkennt der das immer noch als Directory :)

Aber trotzdem, 1000-dank!

Hast du dir mal den kompletten Löschpfad ausgeben lassen? Also den String, den du an unlink() übergibst?


« Javascript in einem html-dokument einfügenkostet es eigentlich was ne e-mail adresse einzurichten »
 

Fremdwörter? Erklärungen im Lexikon!
AppleScript
AppleScript ist eine Programmiersprache von Apple für Skripte und Programme auf Systemebene. Im Gegensatz zu den Unix-Shellscripts, die seit OS X ebenfalls mögl...

Javascript
JavaScript ist eine weit verbreitete Skriptsprache, die ursprünglich von Netscape für das DOM-Scripting für Webseiten entwickelt wurde. Sie hat sich seitde...

PostScript
PostScript ist eine Programmiersprache zur Beschreibung von grafischen Objekten und Schriftzeichen zur Übertragung vom Computer zum Drucker oder Laserbelichter. Gene...