Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

include geht in cron nicht

Hallo zusammen,

ich habe 2 Linux-Server (SUSE), auf beiden läuft php. Auf beiden laufen die exakt gleichen Skripte. In diesen Skripten benutze ich sehr oft die include()-Funktion. Aufrufe per http gehen auf beiden bestens. Nur wenn ich ein php-Skript per cron oder ssh aufrufe z.B .

Code:                   In Zwischenablage kopieren (nur IE)
1">

geht das auf Server A aus jedem Verzeichnis aus. Auf Server B motzt er bei den includes, die entsprechenden files seien nicht da. Ich habe die Rechte geprüft, beide Server laufen nicht im SafeMode.

Hat jemand eine Idee / Tipp für mich?

Danke im Voraus!
Stefan
Hier gehts zum Orginal Eintrag "include geht in cron nicht" im Forum

Antworten

richtige pfadangabe?


2.

Japp, relativ zum Ort des aufgerufenen Skriptes (es geht ja auf Server A und die Verzeichnisse sind exakt identisch).


3.

Entweder sind die Pfade falsch oder die Rechte. Eine andere Möglichkeit gibt es nicht.


4.

Ja *verzweifel* das glaub ich gerne, aber der Pfad stimmt und es ist überall die 777 drauf...


5.

Vor allem was mich ja wundert: wenn ich in das Verzeichnis springe, wo das Skript liegt, findet es von dort aus alle includes prima, nur von außerhalb nicht... (selbst mit $_SERVER["DOCUMENT_ROOT"]).


6.

Relative Pfade sind bei cron jobs sehr ungünstig, weil php als start pfad nicht den des aufgerufenen Scriptes benutzt sondern den aus dem es aufgerufen wurde, daher wird das include einfach nur fehschlagen.

Verwende absolute pfade, mittels __FILE__ läst sich das sehr elegant lösen.


7.

Hm, k werde ich machen. Wundersam ist jedoch noch immer, dass das auf dem einen Server geht. Gibt es vllt. irgendeine Möglichkeit einzstellen, aus welchem Verzeichnis heraus crons ausgeführt werden? Es sind nämlich alle .phps die als cron laufen sollen in einem Verzeichnis...

Danke aber soweit auf jeden Fall mal :)


8.

du kannst natürlich auch das entsprechende verzeichnis in den include_path von php mit aufnehmen,
dann sollte das auch funzen


9.

Jetzt wirds für mich total unverständlich: noch mal zur Verdeutlichung: Ich habe ein file, nennen wir es mycron.php. Das liegt in

/srv/www/htdocs/Beta/Services

und greift auf ein weiteres php-file, nennen wir es myinclude.php zu, das in

/srv/www/htdocs/Beta/Includes

liegt. Mycron.php sieht also vereinfacht so aus:

Code:                   In Zwischenablage kopieren (nur IE)
2">

Der Befehl für den Cronjob lautet

php -q /srv/www/htdocs/Beta/Services/mycron.php

Jetzt kommt das Verrückte, das ich mir nicht erklären kann: auf
Server A funktiert das prima, auf Server B sagt er include nicht gefunden.

Jetzt mache ich das: ich ändere das include von absoluten auf relativen Pfad, also

Code:                   In Zwischenablage kopieren (nur IE)
3">

Das geht nun auf Server A aber nicht auf B. Kann sich das irgendjemand erklären???


10.

Sorry, ich meinte im letzten Post

Das geht nun auf Server B aber nicht auf A. Kann sich das irgendjemand erklären???


11.

Ok, da auf Server A beide Variationen funktionieren hat der Natürlich keine Probleme irgendwelche Includes zu finden ob relativ oder absolut.
Liegt also höchstwahrscheinlich an die Includes das die Includete Datei (/myinclude.php) selbst includet.

setze doch einfach mal eine der 2 Zielen in deine myinclude.php (ganz am anfang)
Code:                   In Zwischenablage kopieren (nur IE)
4">

Somit wird das Verzeichnis indem myinclude.php sich befindet zum include_path von php hinzugefügt,
aber auch nur solange das script läuft. Somit sollten auch relative includes von myinclude.php ausgehen
gefunden werden.


Hier gehts zum Orginal Eintrag "include geht in cron nicht" im Forum
 
phpforum.de | Impressum