Reputation: 62364
I need to determine whether the PHP file is being loaded via cron or command line within the code. How can I do this?
Upvotes: 9
Views: 6232
Reputation: 449415
The most reliable and exhaustive way to check where your script is run known to me is
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.
Upvotes: 6
Reputation: 43619
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']
Upvotes: 6
Reputation: 38308
You can check the PHP_SAPI
constant to check if the CLI interpreter is being used:
$is_cli= PHP_SAPI == 'cli';
Upvotes: 2
Reputation: 137282
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;
Upvotes: 16