Ich muss feststellen, ob die PHP-Datei über Cron oder Befehlszeile innerhalb des Codes geladen wird. Wie kann ich das machen?Wie ermittelt man, ob eine PHP-Datei über cron/command line geladen wird
Antwort
Wenn Sie Kontrolle über den Cron oder den Befehl haben, haben Sie erwogen, ein Befehlszeilenargument zu übergeben und es mit $_SERVER['argv'][0]
zu lesen?
* * * * * /usr/bin/php /path/to/script --cron
Im Skript:
<?php
if(isset($_SERVER['argv'][0]) and $_SERVER['argv'][0] == '--cron')
$I_AM_CRON = true;
else
$I_AM_CRON = false;
Die zuverlässigste und erschöpfende Weise, wo Ihr Skript zu überprüfen, ist mir laufen bekannt ist
Weder diese noch eine der Andere aufgelistete Methoden, die hier aufgelistet sind, unterscheiden jedoch zwischen dem "normalen" CLI-Modus und einem Cron-Aufruf. gahooas Kommandozeilenargument-Idee ist wahrscheinlich die beste und zuverlässigste Lösung.
Ich bin nicht sicher, ob sich etwas in den letzten Jahren geändert hat, aber auf meinem System (CentOS 6.6 , PHP 5.4.38, läuft Litespeed), gibt es eine Unterscheidung. 'php_sapi_name()' gibt 'cli' zurück, wenn es über die Kommandozeile ausgeführt wird. Es gibt 'cgi-fcgi' zurück, wenn es über cron ausgeführt wird. – rinogo
können Sie überprüfen die PHP_SAPI
konstant zu prüfen, ob das CLI-Interpreter verwendet wird:
$is_cli= PHP_SAPI == 'cli';
Obwohl irrelevant hier, gibt es sehr wenig Grund, jemals den Operator '==' zu verwenden. – Nathaniel
Dies ist eine einfache Art und Weise. Bestimmte Elemente des Arrays $_SERVER
werden nur gesetzt, wenn sie von HTTP aus aufgerufen werden. So können Sie:
if(!isset($_SERVER['REQUEST_METHOD'])){
// from cron or command line
}else{
// from HTTP
}
Andere schließen: $_SERVER['HTTP_HOST']
Loaded in das, was? In welcher Umgebung? – wallyk
Duplizieren: http://stackoverflow.com/questions/1848803/execute-php-via-cron-no-input-file-specified –