PHP move_uploaded_file - $_FILE['error'] = 0 aber dennoch Fehler...

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich zerbreche mir seit gestern abend den Kopf über folgendes Problem.

Als Entwicklungsumgebung setze ich XAMPP auf einem Windows-Rechner ein.
Nun möchte ich über ein Formular eine Datei auf den Server (in diesem Fall in das Web-Verzeichnis) hochladen. Dies mache ich üblicherweise mit move_uploaded_file().
PHP:
$fileName   = strtolower($_FILES['PIC']['name']);
$tmpName    = $_FILES['PIC']['tmp_name'];

$upload = move_uploaded_file($tmpName, __PIC_PATH__.$fileName);

Als Ergebnis erhalte ich jedoch folgende Fehlermeldung:
Code:
Warning: move_uploaded_file(/img/closebox.png) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\xampp\htdocs\123\content\content.pics.inc on line 46

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\php3145.tmp' to '/img/closebox.png' in C:\xampp\htdocs\123\content\content.pics.inc on line 46

Dateirechte bzw. Ordnerrechte wurde gesetzt bzw. entfernt um darauf Zugriff zu haben. Es befinden sich also keine Schreibschutzrechte auf dem Ordner...

Auf Grund dieser Fehler lasse ich mir nun die Variable $_FILE ausgeben...
Code:
    [PIC] => Array
        (
            [name] => closebox.png
            [type] => image/png
            [tmp_name] => C:\xampp\tmp\php37AC.tmp
            [error] => 0
            [size] => 1910
        )

Keine Fehler. Die Variable max_post_size und so weiter in der php.ini stehen standartmäßig auf 128M.

Mittlerweile habe ich keine Idee mehr, wo der Fehler liegen könnte. Wer von euch, hat einen besseren Durchblick und gibt mir den entscheidenen Hinweis?


MFG
Papenburger
 
Zuletzt bearbeitet:
So wie ich das sehe, versuchst du die Dateien in eine Bild Datei zu speichern und nicht in einem Ordner.

Genau das sagt die Fehlermeldung:

Warning: move_uploaded_file(/img/closebox.png) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\xampp\htdocs\123\content\content.pics.inc on line 46

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\php3145.tmp' to '/img/closebox.png' in C:\xampp\htdocs\123\content\content.pics.inc on line 46
 
So wie ich das sehe, versuchst du die Dateien in eine Bild Datei zu speichern und nicht in einem Ordner.

Selbst wenn ich die Datei bzw. dann den Pfad angebe, wo du den Fehler vermutest, erhalte ich folgende Fehlermeldung:
Code:
Warning: move_uploaded_file(/img/) [function.move-uploaded-file]: failed to open stream: Invalid argument in C:\xampp\htdocs\123\content\content.pics.inc on line 46

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\php130D.tmp' to '/img/' in C:\xampp\htdocs\123\content\content.pics.inc on line 46

Ich weiß nicht, in wie weit du dich mit PHP auskennst, aber ich muss doch beim Upload eine Datei die hochgeladen wurde und den Pfad mit dem Dateinamen angeben wo er das ganze ablegen soll.

Im PHP-Manual habe ich dazu auch nichts gefunden. Die Funktionsaufrufe sehen genauso aus wie bei mir auch...
 
Ist __PIC_PATH__ richtig gesetzt? Sprich: Gibt's im Hauptverzeichnis ein /img-Verzeichnis mit den entsprechenden Schreibrechten?
 
Ist __PIC_PATH__ richtig gesetzt? Sprich: Gibt's im Hauptverzeichnis ein /img-Verzeichnis mit den entsprechenden Schreibrechten?

Ja, wenn ich mir das alles ausgeben lasse ist der Pfad richtig, die Rechte sind okay usw. Deswegen kann ich mir die Fehlermeldung auch nicht erklären...
 
ist der zeilhost gleich dem sender ?
wenn es ein Unix/Linux Zielhost ist, ist deine angabe nicht relative.
im "/" darf man nichts schreiben. der fehler würde vom nciht möglichen erstellen von img her rühren...

Nur ne Vermutung

Nachtrag:
Der Hinweis mit relativ sollte den "." als Lösung erwirken, was Pappenburger aber scheinbar nicht verstanden hat ! :(
 
Zuletzt bearbeitet:
ist der zeilhost gleich dem sender ?
wenn es ein Unix/Linux Zielhost ist, ist deine angabe nicht relative.
im "/" darf man nichts schreiben. der fehler würde vom nciht möglichen erstellen von img her rühren...

Nur ne Vermutung
Zielhost = Sender, steht aber auch im ersten Post. Ich habe auf einem Windows-Rechner XAMPP installiert....


Sooo...
Es liegt also nun eindeutig am /img/-Verzeichnis...
Ohne die Angabe dieses Verzeichnisses funktioniert der upload, mit Angabe leider nicht.
 
Zuletzt bearbeitet:
Ich weiß nicht wie streng das nun auf Windows-Systemen ist. Aber eventuell musst du mit einem Backslash ("\") arbeiten? Denn das ist ja auf Windows das Symbol um Pfade anzugeben.
 
Du schreibst, dass du auf einen Windows-System testest. Da gibt es das Verzeichnis /img nicht. Benutze entweder einen relativen Pfad zum ausführenden Script (z.B. 'img' ohne führenden /) oder einen korrekten absoluten Pfad. Der muss dann aber auch mit einem Laufwerksbuchstaben anfangen (z.B. "C:/bla/img").

Und du solltest wegen Kompatibilität mit anderen Betriebssystemen keine Backslash verwenden.

Edit:
Wenn du dir den absoluten Pfad nicht selber zusammen bauen willst - und auch für Kompatibilität mit anderen Servern - kannst du die PHP-Variable $_SERVER['DOCUMENT_ROOT'] benutzen, sofern sich das Verzeichnis innerhalb deines Webroots befindet.
 
Leute ihr müsst lesen, was ich geschrieben habe...

Ich teste zwar auf einem Win-System aber das ist mein normales Betriebssystem, also kein Server. Ich nutze XAMPP hierfür, das stand aber auch im ersten Post !
 
Es ist ja auch egal ob deine Testumgebung ein richtiger Webserver ist oder nur für den lokalen Gebrauch ist.. Windows als Betriebssystem ist Windows...

Aber da scheint es nicht zu laufen und das liegt - wie du bemerkt hast - an der Angabe von dem Ordner (wenn der entfernt wird läuft es ja).
Also tippe ich persönlich darauf, dass Windows gerne Backslashes will.. da bin ich mir aber nicht sicher.
Wie 'wahnsinn' schrieb gibt es zusätzlich unter Windows keinen Ordner der mit einem Slash beginnt. Unter Linux wärst du dann direkt in der obersten Ordnerhirachie, unter Windows bist du aber im nirgendwo.
thrown-out hat dann auch schon eine Lösung dagegen geschrieben. Einfach ein "." vor dem ersten Slash und unter Windows, sowie Linux weiß das Betriebssystem nun, dass du im aktuellen Ordner bist, in dem das PHP-Script ausgeführt wird.

Hast du die Ansätze denn alle mal getestet? Was kommt dabei raus? Tut nichts von alledem?
 
Ich teste zwar auf einem Win-System aber das ist mein normales Betriebssystem, also kein Server. Ich nutze XAMPP hierfür, das stand aber auch im ersten Post !

Als Entwicklungsumgebung setze ich XAMPP auf einem Windows-Rechner ein.
Nun möchte ich über ein Formular eine Datei auf den Server (in diesem Fall in das Web-Verzeichnis) hochladen. ...

Moment mal ... jetzt bitte ganz langsam, ich versteh's nicht mehr. Was läuft jetzt wie wo? Du schreibst doch selber von einem Server.

Was meinst du dann mit Server, wenn nicht deine lokale Entwicklungsumgebung mit XAMPP? Und wenn du mit Server nicht deinen Windows-XAMPP meinst, was spielt dann der Windows-Rechner in der ganzen Geschichte für eine Rolle?
 
Zuletzt bearbeitet:
Moment mal ... jetzt bitte ganz langsam, ich versteh's nicht mehr. Was läuft jetzt wie wo? Du schreibst doch selber von einem Server.

Was meinst du dann mit Server, wenn nicht deine lokale Entwicklungsumgebung mit XAMPP? Und wenn du mit Server nicht deinen Windows-XAMPP meinst, was spielt dann der Windows-Rechner in der ganzen Geschichte für eine Rolle?

Der Windows-Rechner spielte eigentlich keine Rolle. Auf dem Windows läuft nur XAMPP worauf ich dann entwickel... ;-)
 
Der Windows-Rechner spielte eigentlich keine Rolle. Auf dem Windows läuft nur XAMPP worauf ich dann entwickel... ;-)

Und es funktioniert unter XAMPP nicht? Genau dann spielt es nämlich eine Rolle, dass es ein Windows-Rechner ist.
Außer du spielst es auf deinen Webserver (auf welchem Linux o.ä. eingesetzt wird) und da läuft es auch nicht..
 
Und es funktioniert unter XAMPP nicht? Genau dann spielt es nämlich eine Rolle, dass es ein Windows-Rechner ist.
Außer du spielst es auf deinen Webserver (auf welchem Linux o.ä. eingesetzt wird) und da läuft es auch nicht..

Es funktioniert doch nun........
Warum hier weiter diskutieren. Ich halte mich nun von diesem Thread hier fern...
 
Es funktioniert doch nun........

Dann wäre es nett wenn du auch schreibst, wie du das Problem gelöst hast.
Oder einfach das /img/-Verzeichnis weggelassen wie du hier sagtest:

Es liegt also nun eindeutig am /img/-Verzeichnis...
Ohne die Angabe dieses Verzeichnisses funktioniert der upload, mit Angabe leider nicht.

Warum hier weiter diskutieren. Ich halte mich nun von diesem Thread hier fern...

Das Abschließen deines Problems geht auch in einem netteren Ton finde ich. Ich versuche nur zu helfen.
 
Zuletzt bearbeitet: