[PHP] fopen funktioniert nicht

yoshi

Well-known member
ID: 131198
L
25 Juli 2006
561
23
Hallo,
ich habe 2 Ordner: eins und zwei
Im Ordner eins liegt ein Script, welches eine Datei im Ordner zwei öffnen soll.
PHP:
$import= fopen("../zwei/import.php","r");
Leider funktioniert das nicht. Es kommt der Fehler:
Warning: fopen(../zwei/import.php) [function.fopen]: failed to open stream: Invalid argument in e:\htdocs\null\eins\script.php on line 123
Woran liegt das?
Yoshi
 
Und so:

PHP:
$import= fopen("/zwei/import.php","r");

Das dürfte aber nur gehen wenn deine Ordner eins/zwei im Root Ordner liegen... Wenn nicht musst du nach dem ersten / noch den Pfad anpassen.
 
@ cb1992 dürfte so auch nicht klappen veruschs mal so :

PHP:
$import= fopen("./../zwei/import.php","r");

mfg marvin
 
Zuletzt bearbeitet:
Du darfst auch ruhig mal deine Ordnerstruktur hier reinschreiben.. ;)

Beispiel:

E:\htdocs\

# projekt\
- blubb

# null\
- eins
-> unterordner
--> unter dem unterordner
- zwei

# ordner\
- blubb
 
Ordnerstruktur:
e:
--> \htdocs
-------> \null
----------> \eins
---------------> \script.php
----------> \zwei
---------------> \import.php

@Nils: Wenn ich den kompletten Pfad, also https://localhost/null/zwei/import.php angebe, funktioniert es ja. Aber das Script soll ja flexibel sein.

@powergrafik: So funktioniert es auch nicht.
 
Das ist ein Windowssystem, da gibt es keinen CHMOD :roll:

Ungeachtet dessen, dass es auch ein Unix System sein könnte:
Schau auf deinem PC doch mal mit einem FTP Proggi nach, ich weiß zwar nicht wieso, aber da kann man auch CHmod eintragen.

Zumindest wurde das _anzgezeigt_ als ich im Xampp htdocs Ordner war.


Außerdem, viele Webserver laufen auf Unix und dauerhaft soll das Script wahrscheinlich _nicht_ auf einem Windoof System bleiben, sondern auf einen Unix Server kommen (... es wäre zumindest vernünftig :mrgreen: ).


LG Nils
 
Ähm kurze Info (hat mit dem eigentlichen Thema nicht viel zu tun).
Bei solchen Funktionen (zum Auslesen von i-was) würde ich immer eine @ (at)vor die Funktion setzten, das untersrückt Fehlermeldungen, die beim Ausfall sehr hilfreich sein können (sonst wird Inhalt ausgegeben, u.a. auch ab und zu mal Passwörter ;)
 
Ungeachtet dessen, dass es auch ein Unix System sein könnte:[...]
Seit wann gibt es unter Unix Pfade wie e:\ ?!
Das es mal auf einem Unix System laufen wird, bestreitet keiner, aber bei seinen Testläufen mit Windows geht es deswegen nicht.

Bei solchen Funktionen (zum Auslesen von i-was) würde ich immer eine @ (at)vor die Funktion setzten, das untersrückt Fehlermeldungen, die beim Ausfall sehr hilfreich sein können (sonst wird Inhalt ausgegeben, u.a. auch ab und zu mal Passwörter ;)
Zum debuggen sollte man es aber nciht davor haben ;)
 
Zum Auslesen sind doch gar keine besonderen CHMOD Werte nötig. Reicht da nicht 644?

@strolch00: Wie meinst du das? Form mir dann mal das hier um, so wie du es meinst:
PHP:
$import= fopen("../zwei/import.php","r");
 
PHP:
$import= fopen("..".DIRECTORY_SEPARATOR."zwei".DIRECTORY_SEPARATOR."import.php","r");
Allerdings muss ich sagen, dass ich bei meinem Windows-Server problemlos ein fopen() sowohl mit /, also auch mit \ machen kann :think:

Invalid argument ? :think:
Welche PHP-Version nutzst du ? Sieht mir sehr nach einem Bug aus, weil ich kein Szenario kenne, was diese Fehlermeldung bei fopen() erzeugt, wenn die Parameter offensichtlich korrekt sind 8O
Funktioniert es denn, wenn du eine andere Datei öffnen willst ?

Google hat das gefunden:
https://www.phpforum.de/archiv_56115_Invalid@argument@bei@fopen_anzeigen.html

Ein ähnlicher Fall, wo demjenigen, dem es passiert ist, auch erstmal nicht geglaubt wurde, dass das die ganze Fehlermeldung ist. Was die Lösung des Problems war, ist aber dort nicht ersichtlich :-?
 
Auf der Seite von theHacker wurde das Problem ja mit trim() gelöst. Es wurden also unnötig Leerzeilen oder so mitgesendet.
Bei dir ist es eigentlich nicht der Fall aber versuch einfach mal das:

PHP:
$file = trim("../zwei/import.php");
$import= fopen($file,"r");

Dürfte eigentlich das gleiche sein, aber man kann es ja mal versuchen wenn es bei wem anderen so geklappt hat..
 
Zuletzt bearbeitet:
Ich habe PHP 5.0.4
Ich habe erfolgreich mit den Versionen 4.4.2 und 5.1.6 getestet.
Wenns nicht zu viele Umstände macht, solltest du es mal mit einer anderen PHP-Version probieren :think:

@cb1992:
Wenn es wirklich nur darin liegen sollte, einen leerzeichenlosen String zu trim()en, dann ist es definitiv ein Bug :ugly:
 
@cb1992:
Wenn es wirklich nur darin liegen sollte, einen leerzeichenlosen String zu trim()en, dann ist es definitiv ein Bug :ugly:

Jop :ugly: Man kann es ja einfach mal versuchen, xD
Bei deinem Link hatte der ja auch angeblich einen Leerzeichenlosen String und hat den getrim()t
 
Zuletzt bearbeitet: