PHP和Cron job
PHP和Cron作业出现的原因是需要在Cron作业中调用PHP脚本,并在脚本中检测参数。为了解决这个问题,可以在Cron作业的PHP调用中添加一个参数,并在脚本中对其进行测试,而不是依赖于$SERVER超级全局变量。
解决方法如下所示:
1. 在Cron作业的PHP调用中添加一个参数。例如:0 1 0 0 0 php myscript.php from_cron
2. 在PHP脚本中,使用foreach循环遍历$argv数组,获取传递的参数。例如:
foreach($argv as $value) { echo "$value\n"; }
通过这种方法,可以在Cron作业中调用PHP脚本并传递参数,并在脚本中通过遍历$argv数组来获取参数值。相比于依赖$SERVER超级全局变量,这种方法更加安全可靠。
PHP and Cron job的问题出现的原因是因为在命令行(包括但不限于cron)和CGI或mod_php中,使用php_sapi_name()函数返回的值是不同的。
解决这个问题可以使用以下方法:
1. 首先,我们可以通过使用php_sapi_name()函数来检查当前的运行环境。该函数返回一个表示PHP运行环境的字符串。在命令行中运行时,返回的值应该与CGI或mod_php中的值不同。
$sapi_type = php_sapi_name(); if ($sapi_type === 'cli') { // 在命令行中执行的代码 } elseif ($sapi_type === 'cgi' || $sapi_type === 'apache2handler') { // 在CGI或mod_php中执行的代码 }
2. 另一种方法是使用$_SERVER['REMOTE_ADDR']变量来判断当前是否在命令行中运行。在命令行中运行时,这个变量的值将为空。因此,我们可以使用以下代码来检查:
if (empty($_SERVER['REMOTE_ADDR'])) { // 在命令行中执行的代码 } else { // 在CGI或mod_php中执行的代码 }
通过以上两种方法,我们可以根据运行环境的不同来执行不同的代码,从而解决PHP和Cron job的问题。