Cron.php undefinierter Index 'SCRIPT_FILENAME'

7

Zusammenfassung

Ich erhalte diesen Fehler:

Cron.php undefinierter Index 'SCRIPT_FILENAME'

Warum befindet sich der folgende Code im Magento-Kern cron.php?

// Only for urls
// Don't remove this
$_SERVER['SCRIPT_NAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_FILENAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_FILENAME']);

Mein Crontab hat also Folgendes (in cPanel - ja, ich hasse cPanel, aber ich habe keine Wahl ):

*/5 * * * * /bin/sh /home/user/public_html/cron.sh 2>&1

Beim Ausführen erhalte ich folgende Ausgabe:

Array
(
    [MAILTO] => ***
    [SHELL] => /usr/local/cpanel/bin/jailshell
    [USER] => ***
    [PATH] => /usr/bin:/bin
    [PWD] => /home/***
    [LANG] => en_US.UTF-8
    [HOME] => /home/***
    [SHLVL] => 2
    [LOGNAME] => ***
    [_] => /usr/bin/php
    [PHP_SELF] =>
    [REQUEST_TIME_FLOAT] => 1427981401.51
    [REQUEST_TIME] => 1427981401


    [argv] => Array
        (
            [0] => /home/***/public_html/cron.php
        )

    [argc] => 1
)
Asche
quelle

Antworten:

3

Wie mam08ixo angegeben hat, sind bestimmte _SERVEREigenschaften in der CLI verfügbar. Aufgrund einer abnormalen Konfiguration habe ich dies jedoch mithilfe php-clifolgender Probleme gelöst :

php-cli /home/***/public_html/cron.php > /dev/null &2>1
Asche
quelle
3

Das hat bei mir funktioniert:

php -f /home/USERNAME/www/cron.php >/dev/null 2>&1

Und ich musste cron.php modifizieren, einfach benutzen

$isShellDisabled = true;

anstatt

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

Referenz: http://support.xtento.com/wiki/Setting_up_the_Magento_cronjob

Ich habe immer wieder einen undefinierten Index in mein Fehlerprotokoll aufgenommen, aber es hat funktioniert. Um es jedoch besser zu machen, habe ich die Variablen in cron.php initialisiert, um die Fehler zu entfernen. Wie so:

$_SERVER['SCRIPT_NAME'] = '';
$_SERVER['SCRIPT_FILENAME'] = '';
Zurd
quelle
2

Wie kommt es, dass Sie "letztendlich" denken, dass die $_SERVER Informationen zur Ausführungsumgebung (!) Nicht verfügbar sind, wenn Sie Skripte über die CLI ausführen ?

Die PHP-Sprachreferenz enthält einige Hinweise und Kommentare, die sie tatsächlich enthält. Auch auf jeder Maschine in meiner Sphäre $_SERVERist gut besiedelt. Wenn Sie also eine undefinierte Indexbenachrichtigung erhalten, liegt dies höchstwahrscheinlich an einigen Besonderheiten Ihrer Umgebung und nicht an einem allgemeinen Fehler cron.php.

Achten Sie besonders auf die variables_orderEinstellung.

Anhang: Vielleicht möchten Sie betrachten , $_SERVERwie Informationen von der Diensteinheit erworben . Möge es Shell, mod_php, fastcgi oder was auch immer sein. Aus diesem Grund hängen die Inhalte (Schlüssel) der Variablen von der aktuellen Umgebung ab. Fazit ist, $_SERVERwird NICHT nur gefüllt, wenn über Webserver bereitgestellt.

mam08ixo
quelle
Ich benutze: /usr/bin/php -d display_errors=1 -f cron.phpund die Fehler treten auf. Außerdem habe ich einen Test mit print_r($_SERVER)innerhalb der cron.phpund die Indizes existieren nicht.
Asche
Basierend auf Ihrem Anhang ist das richtig - aber warum macht Magento immer noch Fehler mit undefinierten Indizes - es ist dumm.
Asche
2

Da dies ein Top-Ergebnis in Google ist, weil es SCRIPT_FILENAMEmit cron fehlt, werde ich mich einschalten.

Für mich wurden auf einem anderen Ecom (CS-Cart auf cPanel OpenVZ + FastCGI) die fehlenden Indizes von cron gelöst / gefunden, indem der Pfad zu php in cron anstelle von nur phpoder verwendet wurde php-cli. Führen Sie es which phpin der Shell aus oder verwenden Sie es dann im cPanel Cron Builder. Ich gehe davon aus, dass dies möglicherweise daran liegt, dass cPanel eine eigene interne Version von PHP verwendet, die möglicherweise mit einigen FastCGI-Rätseln übersät ist, obwohl ich mir immer noch nicht ganz sicher bin.

Beispiele:

php /home/account/public_html/script.php <- schlägt fehl

php-cli /home/account/public_html/script.php <- schlägt fehl

$(which php) /home/account/public_html/script.php <- Funktioniert in der CLI als dynamische Route, schlägt jedoch im cPanel Cron Builder fehl

/usr/local/bin/php /home/account/public_html/script.php <- Funktioniert in cPanel Cron Builder, obwohl es sich um eine statische Route zu PHP handelt, sodass dies auf Ihrem Server möglicherweise anders ist

Dhaupin
quelle
Ich erinnere mich, dass ich anfangs einige Probleme hatte, $(which php)als ich meine Antwort dokumentierte. Dies sollte jedoch für andere nützlich sein und ist im Allgemeinen das, was ich normalerweise selbst verwenden würde. Ich habe jedoch vergessen, ob es cPanel oder Plesk war, die mein Problem verursacht haben.
Asche
@ash Ja, ich höre dich davon which php, besonders mit dem CloudLinux / WHM Multi-PHP-Manager, der env in andere Versionen wirft. Apropos Zeug, das andere vielleicht brauchen, ich habe neulich mehr Probleme gehabt, als ich versucht habe, Vtiger dazu zu bringen, richtig zu validieren / zu laufen php-cli. Es wurde ein kleines Hilfsskript erstellt, das versucht, weitere Env-
Informationen
1

Es gibt möglicherweise zwei Lösungen für dieses spezielle / systemspezifische Problem, die mir bekannt sind:

In der Crontab: Fügen Sie die folgenden 2 Zeilen oben hinzu:

SCRIPT_NAME = "cron.php"

SCRIPT_FILENAME = "cron.php"

ODER

Wickeln Sie es in den CRON selbst ein:

* / 5 * * * * SCRIPT_NAME = cron.php; SCRIPT_FILENAME = cron.php; php ~ / public_html / cron.php> / dev / null 2> & 1

MACI
quelle
0

Das hat bei Godaddy Cpanel für mich funktioniert:

/usr/local/bin/php -q /home/USERNAME/public_html/path_to_cron.php >/dev/null 2>&1

Und ich musste modifizieren cron.php, einfach benutzen

$isShellDisabled = true;

anstatt

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

Vielen Dank an Zurd, dass du deine Antwort gepostet hast, die mir meine nach so viel Schmerz gebracht hat !!!

Rogen
quelle