PHP和Cron job

19 浏览
0 Comments

PHP和Cron job

可能是重复的问题:如何判断 PHP 脚本是通过命令行还是通过 HTTP 执行的标准方法是什么?\n我想知道在 PHP 中是否有一些用于 cron 作业的“条件”标签?我想实现以下功能:\n

如果(cron 作业正在执行此 PHP 文件){
    做一些事情
} elseif($_SERVER['REMOTE_ADDR'] = "blah.bl.ah.bl"){
    做一些事情
}

\n我可以这样做吗?

0
0 Comments

PHP脚本可以从cron中传递参数。例如:

01 04 1 1 1 /path/to/my/script.php "fromcron"

然后在script.php中可以使用以下代码判断是否来自cron:

if($argv[1]=="fromcron")

但是要注意可能会出现索引错误,所以在使用$argv[1]之前,请确保知道它在索引[1]处有一个元素。

问题的原因是需要从cron中传递参数到PHP脚本中,但可能出现索引错误。解决方法是在脚本中使用$argv来获取传递的参数,并在使用$argv[1]之前进行检查,确保其在索引[1]处有一个元素。

0
0 Comments

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超级全局变量,这种方法更加安全可靠。

0
0 Comments

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的问题。

0