upload-problem auf xampp4win

Alles, was PHP betrifft, kann hier besprochen werden.

upload-problem auf xampp4win

Postby mikune » 29. October 2008 16:41

ich will einen selbstgebauten Datei-Upload testen.

die dateien kommen nicht an, Pfad etc. stimmt.

ich erhalte folgende Fehlermeldung:

Warning: move_uploaded_file(http://localhost/_zsp/projekte_bilder/1634-coelan3.jpg) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections. in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 63

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\php63.tmp' to 'http://localhost/_zsp/projekte_bilder/1634-coelan3.jpg' in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 63

Liegt das an den Schreibrechten im Zielverzeichnis? Wie kann ich die "schreibfreundlich" setzen auf xammp/windows?

chmod tut nicht und im explorer > eigenschaften lässt er das entfernen von schreibgeschützt nicht zu...

oder liege ich da völlig falsch???
mikune
 
Posts: 7
Joined: 29. October 2008 16:19

Postby glitzi85 » 29. October 2008 17:07

Nein, du versuchst ganz einfach eine lokale Datei auf eine http-Ressource zu verschieben, da normalerweise http aber keine Schreibrechte zur Verfügung stellt kann das nicht funktionieren.

Poste doch mal dein Script.

Hier die Details:

Code: Select all
Unable to move 'C:\xampp\tmp\php63.tmp' to 'http://localhost/_zsp/projekte_bilder/1634-coelan3.jpg

Er versucht die Datei C:\xampp\tmp\php63.tmp nach http://localhost/_zsp/projekte_bilder/1634-coelan3.jpg zu verschieben.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby mikune » 29. October 2008 17:19

glitzi85 wrote:Er versucht die Datei C:\xampp\tmp\php63.tmp nach http://localhost/_zsp/projekte_bilder/1634-coelan3.jpg zu verschieben.

mfg glitzi


hi glitzi,

genau das soll er auch tun:

Code: Select all

Formular:
.....

Bild: <input type="file" name="_bild_01">
<input type="submit" value="Abschicken">

script:
..........

   $link1="http://";
   $link1.=$_SERVER["HTTP_HOST"];
   $link1.="/_zsp/projekte_bilder/";
   $file=urlencode($_FILES['_bild_01']['name']);
   $file= str_replace("+", "%20",$file);
   $link1.=$file;   
   
   move_uploaded_file($_FILES['_bild_01']['tmp_name'], $link1);
   



glitzi85 wrote:du versuchst ganz einfach eine lokale Datei auf eine http-Ressource zu verschieben, da normalerweise http aber keine Schreibrechte zur Verfügung stellt kann das nicht funktionieren.


was heisst das? Tue ich das???
ist keine absicht...
mikune
 
Posts: 7
Joined: 29. October 2008 16:19

Postby glitzi85 » 29. October 2008 17:33

Naja, versuch das doch mal im Explorer.

Öffne einen Windows-Explorer und versuche irgendeine Datei nach http://localhost zu verschieben. Wie soll denn das gehen? Beim Umgang mit Dateien musst du im Dateisystem arbeiten.

Code: Select all
$link1 = "C:/xampp/htdocs/_zsp/projekte_bilder/".$_FILES['_bild_01']['name'];


Und versuch dir einen einheitlichen Programmierstil anzugewöhnen. Also entweder immer vor und nach dem Zuweisungs / Vergleichsoperator eine Leerzeichen oder eben keins. Aber nicht gemischt. Das macht das Lesen des Codes unübersichtlich.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby mikune » 29. October 2008 20:24

ok, danke.

werde ich versuchen. aber spätestens wenn ichs dann online stelle muss es ja wohl so auch über http gehen.
und da dachte ich, dass der lokale webserver/apache sich wie ein "echter" webserver ansteuern lässt, kann ja z.b. auch per ftp auf ihn zugreifen(?)

oder muss ich einen relativen pfad (vom tmp-verzeichnis zu meinem zielordner) angeben? lokal wüsste ich den ja, aber muss ich den fürs online-stellen dann beim provider erfragen(?)
mikune
 
Posts: 7
Joined: 29. October 2008 16:19

Postby glitzi85 » 29. October 2008 21:21

Hallo,

PHP läuft lokal auf dem Webserver, das ist egal ob das jetzt das PHP von XAMPP ist oder das vom Provider. Du hast in jedem Fall zugriff auf das Dateisystem. Über http kannst du keine Schreibzugriffe vornehmen.

Den kompletten Pfad von der temporären Datei wird dir ja im $_FILES-Array schon mitgeteilt, das ist also kein Problem. Die Zieldatei kannst du entweder relativ zum aktuellen Verzeichnis setzen:

Code: Select all
$target = '../../upload/'.$_FILES['bild01']['name'];


../../ bedeutet, es wird zwei Ebenen zurück gegangen im Dateisystem. Beispiel:

Script:
Code: Select all
/xampp/htdocs/projektxyz/admin/upload/script.php

Ziel:
Code: Select all
../../upload/filename.jpg (relativ)

wird zu diesem absoluten Ziel:
Code: Select all
/xampp/htdocs/projektxyz/upload/filename.jpg


Zweite Möglichkeit ist absolut ansprechen:

Code: Select all
$target = '/xampp/htdocs/projektxyz/upload/'.$_FILES['bild01']['name'];


Beide Varianten funktionieren sowohl unter Windows, als auch unter Linux. Bei der absoluten Angabe musst du natürlich beim Provider anfragen wie der absolute Pfad lautet oder die PHP-Variable $_SERVER['DOCUMENT_ROOT'] verwenden. Das würde dann so aussehen:

Code: Select all
$target = $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES['bild01']['name'];


Bei Variante 2 mit fest einprogrammierten Pfad musst du die Angabe natürlich für jeden Server anpassen, die anderen zwei sind ziemlich universell. Was du verwendest bleibt dir überlassen, ich persönlich bevorzuge die relative Variante. Dabei ist aber zu beachten, dass das Script dann nicht einfach in ein anderes Verzeichnis (besser gesagt in eine andere Ebene des Dateisystems) verschoben werden kann.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby Nobbie » 29. October 2008 21:23

>aber muss ich den fürs online-stellen dann beim provider erfragen(?)

Genau!

Wobei in aller Regel diese Information schon aus dem Inhalt von $_SERVER['DOCUMENT_ROOT'] abgeleitet werden kann.
Nobbie
 
Posts: 8772
Joined: 09. March 2008 13:04

Postby mikune » 30. October 2008 09:03

Super!

Danke für die ausführlichen Tipps!!
mikune
 
Posts: 7
Joined: 29. October 2008 16:19

Postby mikune » 30. October 2008 10:31

Trotzdem tuts nicht:

Code: Select all
//so nicht:
$target = $_SERVER['DOCUMENT_ROOT']."/_zsp/projekte_bilder/".$FILES['_bild_01']['name'];

//so auch nicht (ist ja auch dasselbe):
$target = "C:/xampp/htdocs/_zsp/projekte_bilder/ ".$FILES['_bild_01']['name'];

move_uploaded_file($_FILES['_bild_01']['tmp_name'], $target);




Fehlermeldung:

Warning: move_uploaded_file(C:/xampp/htdocs/_zsp/projekte_bilder/) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 67

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\php27.tmp' to 'C:/xampp/htdocs/_zsp/projekte_bilder/' in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 67


hat das was mit den slashes zu tun? Die Fehlermeldung verwendet ja "\"
bei " in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 67"
Aber ich kann die anweisung nicht mit \ schreiben, da das dann das hintere anführungszeichen "auflöst":

Code: Select all
   //so ja wohl nicht....
   $target = "C:\xampp\htdocs\_zsp\projekte_bilder\".$FILES['_bild_01']['name'];

   move_uploaded_file($_FILES['_bild_01']['tmp_name'], $target);




:?:
mikune
 
Posts: 7
Joined: 29. October 2008 16:19

Postby Wiedmann » 30. October 2008 11:15

Code: Select all
Warning: move_uploaded_file(C:/xampp/htdocs/_zsp/projekte_bilder/) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 67

Trotzdem tuts nicht:

Weil PHP nur Dateien und keine Verzeichnisse verschieben kann.

Wie schon oft geschrieben... Wenn Ihr Scripte entwanzt, schreibt als erste Anweisung "error_reporting(E_ALL);" in das Script und korrigiert erst Mal alle Fehler die dort Angzeigt werden.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby mikune » 30. October 2008 12:28

Das verstehe ich nicht? wo verschiebe ich verzeichnisse??

Code: Select all

   $target = "/xampp/htdocs/_zsp/projekte_bilder/".$FILES['_bild_01']['name'];
   

   move_uploaded_file($_FILES['_bild_01']['tmp_name'], $target);




m.E: ist die Syyntax des Skriptes ok -oder???

Habe auch alle absoluten und relativen Pfad-varianten probiert, ergebniss ist das gleiche.
mikune
 
Posts: 7
Joined: 29. October 2008 16:19

Postby Wiedmann » 30. October 2008 12:47

wo verschiebe ich verzeichnisse??

mikune wrote:Warning: move_uploaded_file(C:/xampp/htdocs/_zsp/projekte_bilder/) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\xampp\htdocs\_zsp\admin\projekte_bearbeiten.php on line 67

"C:/xampp/htdocs/_zsp/projekte_bilder/" ist ein Verzeichnis und keine Datei.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Nobbie » 30. October 2008 14:15

> $target = "/xampp/htdocs/_zsp/projekte_bilder/".$FILES['_bild_01']['name'];

Blindheit im Dienst....

Wenn Du mit vernünftigem Errorlevel (E_ALL) arbeiten würdest, hätte Dir PHP den obigen Fehler um die Ohren gehauen. Es heißt nicht $FILES sondern $_FILES.

Alles andere sind Folgefehler.
Nobbie
 
Posts: 8772
Joined: 09. March 2008 13:04

Postby mikune » 30. October 2008 15:07

Asche auf mein Haupt.

Danke...
mikune
 
Posts: 7
Joined: 29. October 2008 16:19


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests