$_SERVER gibt nichts zurück

Suppi

Aktives Mitglied
Hallo

Seit einiger Zeit sind Variablen wie z.B. $_SERVER['SERVER_NAME'] oder $_SERVER['REMOTE_ADDR'] leer, wenn das Script über einen Cron aufgerufen wird. Das selbe Script funktioniert jedoch wenn es über den Browser aufgerufen wird. Das habe ich per Zufall herausgefunden, da die include-Pfade plötzlich nicht mehr gingen (musste diese von relativ auf absolut ändern).

Kann sich das jemand erklären?
 
Die Werte der Server-Variable holt sich PHP vom Webserver. Wenn Du das Script aber gar nicht über einen Webserver aufrufst, kennt PHP Deinen Webserver auch nicht und kann also auch nichts in die Server-Variable schreiben.
 
@Marc, das Script scheint ja an sich zu laufen, nur eben ohne Server_Name und Remote-Addr in der SERVER-Variable.

@Suppi, das Script liegt zwar auf einem Webserver, wird aber wenn Du cron benutzt nicht *vom* Webserver ausgeführt.

Du hast da technisch zwei komplett unterschiedliche PHPs. Das eine PHP wird benutzt, wenn Du eine Seite mit http://* lädst. Das andere PHP wird benutzt, wenn Du per Shell-Script (bzw. per cron) ein PHP-Script ausführst. Das zweite PHP heißt "php-CLI" (für Command Line Interface). Die beiden SERVER-Variablen-Werte gibt es beim Aufruf über die Shell einfach nicht. (Wer soll den die aufrufende IP sein (Remote-Addr), wenn gar keine IP aufruft? Und welcher Server soll das Script aufrufen (Server_Name), wenn gar kein Server benutzt wird?

Eventuell hat sich bei Dir oder beim Hoster die Art des Cron-Aufrufs geändert. Vielleicht wurde bis vor kurzem anstatt eines Shell-Aufrufs einfach per cron eine Webseite abgerufen. Dann hättest Du die Variablen verfügbar.
 
Merci für Eure Antworten. Scheint wirklich so zu sein dass der Hoster was geändert hat.... finde es aber etwas unprofessionell, dass die Kunde nicht informiert werden, die Scripte tagelang nicht mehr funktionieren bis man das bemerkt.

Nun, den Support habe ich natürlich auch angefragt. Aber ehrlich gesagt ist das aus meiner Sicht kein Support... die Antworten bestehen meist nicht aus mehr als einem Satz, wenn überhaupt. Nachfragen ist da immer notwendig und Lösungen meist auch keine in Sicht. Darum lass ich's dann auch meist, entweder lebe ich damit oder versuche im Internet eine Lösung zu finden.

Anyway, nachdem der Support in der 2. Mail an mich gefragt hat, was ich geändert habe, haben sie mir gesagt, ich soll einen Web Request verwenden: /usr/bin/wgetclone -O /dev/null <URL>

So... dachte ich könnte das auch als Cron eingeben, (anstatt wie bisher "php <URL>"). Geht leider nicht, es kommt immer eine Fehlermeldung vonwegen Missing URL. Natürlich hab ich das <URL> durch die URL des Script ersetzt
tongue.gif
und auf verschiedene Varianten versucht (mit/ohne Anführungszeichen). Vielleicht weiss jemand wie man das richtig verwendet?
 
www.cronjob.de
oder ... wenn du ihn sehr oft brauchst ....
.... ruf einfach ein Anderes Script auf ...

das Andere Script
CODE
file_get_contents( 'http://.....dasAlteScript.php' );


dann krigst du deine "Umgebungsvariablen"

Ich retzle warum da ein $Path verloren geht ....
... verstahe es nicht, denke an einen Designfehler

QUOTE (Suppi @ Di 14.04.2009, 12:26)Merci für Eure Antworten. Scheint wirklich so zu sein dass der Hoster was geändert hat.... finde es aber etwas unprofessionell, dass die Kunde nicht informiert werden, die Scripte tagelang nicht mehr funktionieren bis man das bemerkt.

..Designfehler

z.B. damals, als $GLOBALS in den Distributionen "abgestellt" wurde ....
... ich hatte da gerade einen Hosterwechsel ....
... hatte $GLOBALS wegen bequemlichkeit ....
einfach mal eine FORM umstellen von POST2GET ... und es geht trotzdem noch ... dann ging nichts mehr .... der Hoster braucht sich darum nicht zu kümmern, ist ganz alleine Schuld des Webmasters


Gruß
Andy 800XE Zmuda
 
Zurück
Oben