I need to determine whether the PHP file is being loaded via cron or command line within the code. How can I do this?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
If you have control over the cron or command, have you considered passing a command-line argument, and reading it with $_SERVER['argv'][0]
?
* * * * * /usr/bin/php /path/to/script --cron
In the script:
<?php
if(isset($_SERVER['argv'][0]) and $_SERVER['argv'][0] == '--cron')
$I_AM_CRON = true;
else
$I_AM_CRON = false;
回答2:
This is one simple way. Certain elements of the $_SERVER
array are only set if called from HTTP. Thus you can:
if(!isset($_SERVER['REQUEST_METHOD'])){
// from cron or command line
}else{
// from HTTP
}
Others include: $_SERVER['HTTP_HOST']
回答3:
The most reliable and exhaustive way to check where your script is run known to me is
php_sapi_name()
Neither this nor any of the other listed methods listed here, however, will give you a distinction between "normal" CLI mode, and a cron call. gahooa's command line argument idea is probably the best and most reliable solution.
回答4:
You can check the PHP_SAPI
constant to check if the CLI interpreter is being used:
$is_cli= PHP_SAPI == 'cli';