2009-12-06 4 views

Répondre

15

Si vous avez le contrôle sur la commande cron ou, avez-vous envisagé de passer un argument de ligne de commande et de le lire avec $_SERVER['argv'][0]?

* * * * * /usr/bin/php /path/to/script --cron 

Dans le script:

<?php 
if(isset($_SERVER['argv'][0]) and $_SERVER['argv'][0] == '--cron') 
    $I_AM_CRON = true; 
else 
    $I_AM_CRON = false; 
+0

+1 Excellente suggestion encore simple. – David

+1

A travaillé pour moi, bien que dans mon cas, j'ai dû utiliser '$ _SERVER ['argv'] [1]' :) – bbeckford

6

La façon la plus fiable et exhaustive pour vérifier où est exécuté votre script me connu est

php_sapi_name()

Ni ceci ni aucun des D'autres méthodes listées ici, cependant, vous donneront une distinction entre le mode CLI "normal" et un appel cron. L'argument de la ligne de commande de gahooa est probablement la solution la meilleure et la plus fiable.

+0

Je ne sais pas si quelque chose a changé au cours des dernières années, mais sur mon système (CentOS 6.6 , PHP 5.4.38, exécutant Litespeed), il y a une distinction. 'php_sapi_name()' retourne 'cli' lorsqu'il est exécuté à partir de la ligne de commande. Il renvoie 'cgi-fcgi' lorsqu'il est exécuté via cron. – rinogo

2

Vous pouvez vérifier la constante PHP_SAPI pour vérifier si l'interpréteur CLI est utilisé:

$is_cli= PHP_SAPI == 'cli';

+0

Bien que non pertinent ici, il y a très peu de raison d'utiliser l'opérateur '=='. – Nathaniel

6

C'est une façon simple. Certains éléments du tableau $_SERVER ne sont définis que s'ils sont appelés à partir de HTTP. Ainsi, vous pouvez:

if(!isset($_SERVER['REQUEST_METHOD'])){ 
// from cron or command line 
}else{ 
// from HTTP 
} 

D'autres comprennent: $_SERVER['HTTP_HOST']

+0

+1 Excellente suggestion qui nécessite des changements minimes! – David

+1

@David Pouvez-vous nous dire les changements qui vous viennent à l'esprit? – matte

Questions connexes