fopen mit include_path

fopen mit include_path

am 23.08.2007 11:12:17 von Ricardo.Wickel

Guten Morgen NG,

ich habe ein Problem mit der Benutzung von fopen und vorher
eingestelltem include_path.

Auf dem Server ist die PHP Version 4.3.10 installiert.
der include_path steht vor dem fopen Aufruf auf:
..:/opt/lampp/lib/php:/opt/lampp/htdocs/dealer_search/new

In /opt/lampp/htdocs/dealer_search/new sind alle Programm-Dateien
untergebracht - ebenso ein Ordner namens 'cache' in welchem ich gerne
Dateien anlegen möchte. Der Zugriff dieses Ordners steht auf '777'

folgendes gibt allerdings einen Fehler bzw. bricht mit meiner Fehler-
Meldung ab:

$filename =3D 'cache/test.php';
$new_stream =3D fopen($filename, 'w', true);
if ($new_stream ===3D false) {
die('Stream konnte nicht geöffnet werden!');
} else {
fwrite($new_stream, ' fwrite($new_stream, '?>');
fclose($new_stream);
}

Vielen Dank schonmal für eure Hilfe.

Re: fopen mit include_path

am 23.08.2007 11:18:03 von bruening

Ricardo.Wickel@googlemail.com schrieb:
> ich habe ein Problem mit der Benutzung von fopen und vorher
> eingestelltem include_path.

include_path ist für require() und include(). Für fopen() solltest du
schon den absoluten Pfad benutzen.


Gruß,
Habbo

Re: fopen mit include_path

am 23.08.2007 11:30:39 von Ricardo.Wickel

On 23 Aug., 11:18, Jan Habbo Brüning wrote:
> Ricardo.Wic...@googlemail.com schrieb:
>
> > ich habe ein Problem mit der Benutzung von fopen und vorher
> > eingestelltem include_path.
>
> include_path ist für require() und include(). Für fopen() solltest du
> schon den absoluten Pfad benutzen.

Zitat von PHP.net > fopen:
Sie können den optionalen Parameter use_include_path auf '1' oder
TRUE setzten, wenn Sie die Datei auch im include_path suchen möchten.

Daraus lese ich, und wahrscheinlich auch jeder andere, das die fopen
Funktion dann den gesetzten include_path benutzt, wenn der dritte
Parameter true ist.

mfg,
Ricardo

Re: fopen mit include_path

am 23.08.2007 11:40:46 von bruening

Ricardo.Wickel@googlemail.com schrieb:
> On 23 Aug., 11:18, Jan Habbo Brüning wrote:
>> Ricardo.Wic...@googlemail.com schrieb:
>>
>>> ich habe ein Problem mit der Benutzung von fopen und vorher
>>> eingestelltem include_path.
>> include_path ist für require() und include(). Für fopen() solltest du
>> schon den absoluten Pfad benutzen.
>
> Zitat von PHP.net > fopen:
> Sie können den optionalen Parameter use_include_path auf '1' oder
> TRUE setzten, wenn Sie die Datei auch im include_path suchen möchten.

Tatsächlich. Das war mir unbekannt, mein Fehler!


Gruß,
Habbo

Re: fopen mit include_path

am 23.08.2007 11:48:44 von Ricardo.Wickel

On 23 Aug., 11:40, Jan Habbo Brüning wrote:
> Ricardo.Wic...@googlemail.com schrieb:
>
> > On 23 Aug., 11:18, Jan Habbo Brüning wrote:
> >> Ricardo.Wic...@googlemail.com schrieb:
>
> >>> ich habe ein Problem mit der Benutzung von fopen und vorher
> >>> eingestelltem include_path.
> >> include_path ist für require() und include(). Für fopen() solltest=
du
> >> schon den absoluten Pfad benutzen.
>
> > Zitat von PHP.net > fopen:
> > Sie können den optionalen Parameter use_include_path auf '1' oder
> > TRUE setzten, wenn Sie die Datei auch im include_path suchen möchten.
>
> Tatsächlich. Das war mir unbekannt, mein Fehler!

Kein Problem, das Problem ist allerdings das es einfach nicht
funktioniert oder die Funktion ist falsch dokumentiert.

Re: fopen mit include_path

am 23.08.2007 12:15:27 von Carsten Wiedmann

Ricardo.Wickel@googlemail.com schrieb:

> der include_path steht vor dem fopen Aufruf auf:
> .:/opt/lampp/lib/php:/opt/lampp/htdocs/dealer_search/new
>
> In /opt/lampp/htdocs/dealer_search/new sind alle Programm-Dateien
> untergebracht - ebenso ein Ordner namens 'cache' in welchem ich gerne
> Dateien anlegen möchte. Der Zugriff dieses Ordners steht auf '777'
>
> folgendes gibt allerdings einen Fehler bzw. bricht mit meiner Fehler-
> Meldung ab:
>
> $filename = 'cache/test.php';
> $new_stream = fopen($filename, 'w', true);

Ein Fehler der da genau wäre? (Natürlich interessieren hier nur
PHP-Meldungen, und nicht welche die du selbst generierst)

Ansonsten:
Welche Rechte hat die Datei
"/opt/lampp/htdocs/dealer_search/new/cache/test.php"?

Gruß
Carsten

Re: fopen mit include_path

am 23.08.2007 12:23:18 von Ricardo.Wickel

On 23 Aug., 12:15, "Carsten Wiedmann" wrote:
> Ricardo.Wic...@googlemail.com schrieb:
>
> > der include_path steht vor dem fopen Aufruf auf:
> > .:/opt/lampp/lib/php:/opt/lampp/htdocs/dealer_search/new
>
> > In /opt/lampp/htdocs/dealer_search/new sind alle Programm-Dateien
> > untergebracht - ebenso ein Ordner namens 'cache' in welchem ich gerne
> > Dateien anlegen möchte. Der Zugriff dieses Ordners steht auf '777'
>
> > folgendes gibt allerdings einen Fehler bzw. bricht mit meiner Fehler-
> > Meldung ab:
>
> > $filename =3D 'cache/test.php';
> > $new_stream =3D fopen($filename, 'w', true);
>
> Ein Fehler der da genau wäre? (Natürlich interessieren hier nur
> PHP-Meldungen, und nicht welche die du selbst generierst)
>
> Ansonsten:
> Welche Rechte hat die Datei
> "/opt/lampp/htdocs/dealer_search/new/cache/test.php"?

Warning: fopen(cache/test.php): failed to open stream: No such file or
directory in /opt/lampp/htdocs/dealer_search/new/index.php on line 5
Stream konnte nicht geöffnet werden!

Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
Ordner hat 777.

mfg,
Ricardo

Re: fopen mit include_path

am 23.08.2007 12:38:55 von blackpanther78

Ricardo.Wickel@googlemail.com schrieb:
> On 23 Aug., 11:40, Jan Habbo Brüning wrote:
>> Ricardo.Wic...@googlemail.com schrieb:
>>
>>> On 23 Aug., 11:18, Jan Habbo Brüning wrote:
>>>> Ricardo.Wic...@googlemail.com schrieb:
>>>>> ich habe ein Problem mit der Benutzung von fopen und vorher
>>>>> eingestelltem include_path.
>>>> include_path ist für require() und include(). Für fopen() solltest du
>>>> schon den absoluten Pfad benutzen.
>>> Zitat von PHP.net > fopen:
>>> Sie können den optionalen Parameter use_include_path auf '1' oder
>>> TRUE setzten, wenn Sie die Datei auch im include_path suchen möchten.
>> Tatsächlich. Das war mir unbekannt, mein Fehler!
>
> Kein Problem, das Problem ist allerdings das es einfach nicht
> funktioniert oder die Funktion ist falsch dokumentiert.
>

gibt es denn das Verzeichnis 'cache'?

Re: fopen mit include_path

am 23.08.2007 12:42:04 von Ricardo.Wickel

On 23 Aug., 12:38, blackpanther78 wrote:
> Ricardo.Wic...@googlemail.com schrieb:
>
>
>
> > On 23 Aug., 11:40, Jan Habbo Brüning wrote:
> >> Ricardo.Wic...@googlemail.com schrieb:
>
> >>> On 23 Aug., 11:18, Jan Habbo Brüning wrote:
> >>>> Ricardo.Wic...@googlemail.com schrieb:
> >>>>> ich habe ein Problem mit der Benutzung von fopen und vorher
> >>>>> eingestelltem include_path.
> >>>> include_path ist für require() und include(). Für fopen() sollte=
st du
> >>>> schon den absoluten Pfad benutzen.
> >>> Zitat von PHP.net > fopen:
> >>> Sie können den optionalen Parameter use_include_path auf '1' oder
> >>> TRUE setzten, wenn Sie die Datei auch im include_path suchen möchte=
n
> >> Tatsächlich. Das war mir unbekannt, mein Fehler!
>
> > Kein Problem, das Problem ist allerdings das es einfach nicht
> > funktioniert oder die Funktion ist falsch dokumentiert.
>
> gibt es denn das Verzeichnis 'cache'?

Jep ;) der genau Pfad des Verzeichnisses ist:
/opt/lampp/htdocs/dealer_search/new/cache/

Re: fopen mit include_path

am 23.08.2007 12:44:52 von Carsten Wiedmann

Ricardo.Wickel@googlemail.com schrieb:

> Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
> Ordner hat 777.

Dann kannst du den include_path Parameter nicht benutzen. PHP wüsste ja gar
nicht, in welchem Verzeichnis, dass schon alles im include_path aufgeführt
ist/sein könnte, es den von dir angegebenen Pfad anlegen soll. Aus dem Grund
kann man bei jeder Directive die "include_path" unterstützt, nur auf schon
vorhandene Dateien zugreifen.

(Könnte man aber auch eigentlich auch aus der Fehlermeldung rauslesen)

Gruß
Carsten

Re: fopen mit include_path

am 23.08.2007 12:49:01 von Ricardo.Wickel

On 23 Aug., 12:44, "Carsten Wiedmann" wrote:
> Ricardo.Wic...@googlemail.com schrieb:
>
> > Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
> > Ordner hat 777.
>
> Dann kannst du den include_path Parameter nicht benutzen. PHP wüsste ja=
gar
> nicht, in welchem Verzeichnis, dass schon alles im include_path aufgefü=
hrt
> ist/sein könnte, es den von dir angegebenen Pfad anlegen soll. Aus dem =
Grund
> kann man bei jeder Directive die "include_path" unterstützt, nur auf sc=
hon
> vorhandene Dateien zugreifen.
>
> (Könnte man aber auch eigentlich auch aus der Fehlermeldung rauslesen)

Zu dem Ergebnis kam ich auch schon, hoffte nur, das es vll doch
irgenwie geht.

Trotzdem danke.

Re: fopen mit include_path

am 23.08.2007 13:07:19 von Carsten Wiedmann

Ricardo.Wickel@googlemail.com schrieb:

> > > Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
> > > Ordner hat 777.
> >
> > Dann kannst du den include_path Parameter nicht benutzen.
>
> Zu dem Ergebnis kam ich auch schon, hoffte nur, das es vll doch
> irgenwie geht.

Und wieso muss es unbedingt der include_path Parameter sein? Sobald du den
weglässt, funktioniert doch dein Code...

Gruß
Carsten

Re: fopen mit include_path

am 23.08.2007 16:06:22 von Stefan Braumeister

Ricardo.Wickel@googlemail.com schrieb:
> On 23 Aug., 12:15, "Carsten Wiedmann" wrote:
>> Ricardo.Wic...@googlemail.com schrieb:
>>
>>> der include_path steht vor dem fopen Aufruf auf:
>>> .:/opt/lampp/lib/php:/opt/lampp/htdocs/dealer_search/new
>>> In /opt/lampp/htdocs/dealer_search/new sind alle Programm-Dateien
>>> untergebracht - ebenso ein Ordner namens 'cache' in welchem ich gerne
>>> Dateien anlegen möchte. Der Zugriff dieses Ordners steht auf '777'
>>> folgendes gibt allerdings einen Fehler bzw. bricht mit meiner Fehler-
>>> Meldung ab:
>>> $filename = 'cache/test.php';
>>> $new_stream = fopen($filename, 'w', true);
>> Ein Fehler der da genau wäre? (Natürlich interessieren hier nur
>> PHP-Meldungen, und nicht welche die du selbst generierst)
>>
>> Ansonsten:
>> Welche Rechte hat die Datei
>> "/opt/lampp/htdocs/dealer_search/new/cache/test.php"?
>
> Warning: fopen(cache/test.php): failed to open stream: No such file or
> directory in /opt/lampp/htdocs/dealer_search/new/index.php on line 5
> Stream konnte nicht geöffnet werden!
>
> Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
> Ordner hat 777.

Ich würde hier noch eine weitere Fehlermeldung erwarten, da ja
eigentlich ein Schreibversuch stattfinden sollte.

Was passiert, wenn du mal 777 auf /opt/lampp/lib/php setzt?

Gruß Stefan
>
> mfg,
> Ricardo
>

Re: fopen mit include_path

am 23.08.2007 22:56:39 von Ricardo Wickel

Carsten Wiedmann schrieb:
> Ricardo.Wickel@googlemail.com schrieb:
>
>> > > Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
>> > > Ordner hat 777.
>> >
>> > Dann kannst du den include_path Parameter nicht benutzen.
>>
>> Zu dem Ergebnis kam ich auch schon, hoffte nur, das es vll doch
>> irgenwie geht.
>
> Und wieso muss es unbedingt der include_path Parameter sein? Sobald du
> den weglässt, funktioniert doch dein Code...

Weil ich endlich von dem Mitschleppen einer Konstanten ala
XY_ROOT.'dir/' weg will, sondern einfach vorher den include_path
vernünftig setzen und fertig. Sieht übersichtlicher aus und ist viel
weniger Code.

Leider klappts ja nicht bei fopen ;) - schade^^, weil theoretisch könnte
er gucken, ob sich das eindeutig zuordnen lässt und dann eine neue Datei
erzeugen, d.h. den Ordner cache gibts nur in meinem include_path und
deswegen ist es eindeutig > Erzeugung neuer Dateien funktioniert.

Davon abgesehen, finde ich es notwendig, einen entsprechenden Text in
der offiziellen Doku zu hinterlegen. Schließlich geht nicht hervor, dass
die Datei bereits existieren muss, wenn man den include_path benutzen muss.


--

mfg,
Ricardo Wickel

--
http://doppeltgedacht.de/ | Weblog
http://wiky.de/ | Privat
http://ql-webdesign.de/ | Webdesign/ Programmierung

Re: fopen mit include_path

am 23.08.2007 23:10:41 von Michael Fesser

..oO(Ricardo Wickel)

>Carsten Wiedmann schrieb:
>>
>> Und wieso muss es unbedingt der include_path Parameter sein? Sobald du
>> den weglässt, funktioniert doch dein Code...
>
>Weil ich endlich von dem Mitschleppen einer Konstanten ala
>XY_ROOT.'dir/' weg will, sondern einfach vorher den include_path
>vernünftig setzen und fertig. Sieht übersichtlicher aus und ist viel
>weniger Code.

Aber weit weniger zuverlässig, wie Du selbst siehst. Ein absoluter Pfad
funktioniert immer und mit geeignet definierten Konstanten hält sich
auch der "Overhead" im Code in Grenzen.

>Leider klappts ja nicht bei fopen ;) - schade^^, weil theoretisch könnte
>er gucken, ob sich das eindeutig zuordnen lässt und dann eine neue Datei
>erzeugen, d.h. den Ordner cache gibts nur in meinem include_path und
>deswegen ist es eindeutig > Erzeugung neuer Dateien funktioniert.

Klar. Und was soll er bei Zweideutigkeit machen? Schlimmstenfalls führt
das dann dazu, daß das Script auf einer Maschine funktioniert, auf einer
anderen mit leicht anderem include_path nicht mehr. Solche Ratespielchen
führen früher oder später immer zu Problemen. Sag dem Interpreter genau
was Du machen willst (und - in diesem Fall - wo) und gut is.

Micha

Re: fopen mit include_path

am 23.08.2007 23:32:42 von Niels Braczek

Ricardo Wickel schrieb:

> Davon abgesehen, finde ich es notwendig, einen entsprechenden Text in=20
> der offiziellen Doku zu hinterlegen. Schließlich geht nicht hervor, d=
ass=20
> die Datei bereits existieren muss, wenn man den include_path benutzen m=
uss.

Mag sein, dass man das etwas deutlicher herausstellen könnte; es
erschließt sich aber bereits logisch. Es kann ja gar nicht anders gehen=


MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: fopen mit include_path

am 24.08.2007 00:10:11 von Carsten Wiedmann

Ricardo Wickel schrieb:

> Davon abgesehen, finde ich es notwendig, einen entsprechenden Text in der
> offiziellen Doku zu hinterlegen. Schließlich geht nicht hervor, dass die
> Datei bereits existieren muss, wenn man den include_path benutzen
> muss.

Oder daran, dass man das Manual gern in die Richtung auslegen möchte, dass
es zu den aktuellen eigenen Wünschen passt? ;-) Immerhin gibt's diesen
Parameter sonst auch nur noch für 5 weitere Funktionen mit nur lesenden
Zugriff, und keiner anderen Dateisystemfunktion die eine Datei anlegen kann.

(Da stören mich andere Sachen im Manual viel mehr, wie z.B., dass es keine
Auflistung gibt, bei welchen Funktionen der @-Operator nicht geht, bzw.
keine Erwähnung direkt bei den jeweiligen Funktionen... usw.)

Gruß
Carsten

Re: fopen mit include_path

am 24.08.2007 12:02:45 von Norbert Melzer

Am Thu, 23 Aug 2007 22:56:39 +0200 schrieb Ricardo Wickel:

> Carsten Wiedmann schrieb:
>> Ricardo.Wickel@googlemail.com schrieb:
>>
>>> > > Die Datei existiert ja noch nicht, sondern soll angelegt werden. Der
>>> > > Ordner hat 777.
>>> >
>>> > Dann kannst du den include_path Parameter nicht benutzen.
>>>
>>> Zu dem Ergebnis kam ich auch schon, hoffte nur, das es vll doch
>>> irgenwie geht.
>>
>> Und wieso muss es unbedingt der include_path Parameter sein? Sobald du
>> den weglässt, funktioniert doch dein Code...
>
> Weil ich endlich von dem Mitschleppen einer Konstanten ala
> XY_ROOT.'dir/' weg will, sondern einfach vorher den include_path
> vernünftig setzen und fertig. Sieht übersichtlicher aus und ist viel
> weniger Code.

Und unzuverlässig... Lass mal wie in meinem Fall den Include_Path mehrere
Verzeichnisse enthalten. Lege dann in dem einen ne Datei ab und lass in
irgend einem der vorhergehenden Pfade eine Datei mit dem Namen liegen, und
schon hast ein Problem.

Portabel ist die Lösung schlichtweg NICHT!

MfG
Norbert

Re: fopen mit include_path

am 24.08.2007 14:08:39 von Ulf Kadner

Stefan Braumeister wrote:

> Was passiert, wenn du mal 777 auf /opt/lampp/lib/php setzt?

Gib doch nicht solche Tips lieber Stefan. 777 ist böse(TM) und auch
absolut unangebracht.

Die Logik erklärt doch bereits eindeutig das sein Vorhaben in der Form
total sinnfrei ist. Absolute Pfad wurden schon genannt und sind auch der
beste Weg.

Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^

Re: fopen mit include_path

am 24.08.2007 23:13:44 von Stefan Braumeister

Ulf Kadner schrieb:
> Stefan Braumeister wrote:
>
>> Was passiert, wenn du mal 777 auf /opt/lampp/lib/php setzt?
>
> Gib doch nicht solche Tips lieber Stefan. 777 ist böse(TM) und auch
> absolut unangebracht.

Nö wäre auch nur ein Test gewesen um zu sehen wie sich PHP hier verhält.
>
> Die Logik erklärt doch bereits eindeutig das sein Vorhaben in der Form
> total sinnfrei ist. Absolute Pfad wurden schon genannt und sind auch der
> beste Weg.

Ja sehe ich genauso. Darüberhinaus sehe ich gar nicht den Bedarf immer
absolute Pfade zu nutzen, in den meisten Fällen reichen ja relative
Pfade, es sei denn man will z.B. externe Applikationen mit Parameter
aufrufen.

Gruß Stefan
>
> Ulf
>

Re: fopen mit include_path

am 25.08.2007 11:35:52 von Ulf Kadner

Stefan Braumeister wrote:
> Ulf Kadner schrieb:
>> Stefan Braumeister wrote:
>>> Was passiert, wenn du mal 777 auf /opt/lampp/lib/php setzt?
>> Gib doch nicht solche Tips lieber Stefan. 777 ist böse(TM) und auch
>> absolut unangebracht.
>
> Nö wäre auch nur ein Test gewesen um zu sehen wie sich PHP hier verhält.

Ob das der OP genauso verstanden hätte?

> Darüberhinaus sehe ich gar nicht den Bedarf immer
> absolute Pfade zu nutzen, in den meisten Fällen reichen ja relative
> Pfade, es sei denn man will z.B. externe Applikationen mit Parameter
> aufrufen.

Ich finde absolute Pfade sind zu bevorzugen. Liegt wohl daran das ich
fast noch nie in PHP relative genutzt habe. Die relativen resultieren
letzendlich auch in absoluten (spätestens beim OS) Also besser absolute,
damit kann ein Anfänger nicht soo viel falsch machen.

Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_) Mitglied der Freizeitvögel? ;-)
^^