2009-12-06 4 views

Antwort

15

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; 
+0

+1 Großer Vorschlag, der noch einfach ist. – David

+1

Arbeitete für mich, obwohl ich in meinem Fall '$ _SERVER ['argv'] [1]' :) verwenden musste – bbeckford

6

Die zuverlässigste und erschöpfende Weise, wo Ihr Skript zu überprüfen, ist mir laufen bekannt ist

php_sapi_name()

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.

+0

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

2

können Sie überprüfen die PHP_SAPI konstant zu prüfen, ob das CLI-Interpreter verwendet wird:

$is_cli= PHP_SAPI == 'cli';

+0

Obwohl irrelevant hier, gibt es sehr wenig Grund, jemals den Operator '==' zu verwenden. – Nathaniel

6

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']

+0

+1 Großer Vorschlag, der minimale Änderungen erfordert! – David

+1

@David Können Sie uns die Veränderungen erklären, die Ihnen in den Sinn kommen? – matte