cron 作业中的参数
Arguments in cron jobs
我在共享服务器上。将参数传递给 crob 作业时,如下所示:
10 * * * * /usr/bin/php /home/website/cron/my_script.php country_id=10
这与 php 脚本一起工作以获取 country_id 的值:
$country_id = $_GET['country_id'];
这不起作用,country_id 为空:
$country_id = $argv[1]
我的理解是第一个选项不应该起作用,第二个选项应该起作用,但恰恰相反。
谁能告诉我为什么?
(1) 对于您的情况, $argv[1] 是 country_id=10
,而不是 10
。请确保您也有一个 semi-colon 来结束这一行。
(2) 假设您已经在使用 parse_str(解析 argv 数据的一种相当标准的做法),那么 $_GET["xxx"] 可以通过命令行从参数中获取值,这是正常的。在此处查看官方文档
https://www.php.net/manual/en/features.commandline.php
所以对于下面的代码 (test1.php):
<?php
parse_str(implode('&', array_slice($argv, 1)), $_GET);
echo $argv[1];
echo ",";
echo $_GET['a'];
?>
如果执行命令行:
php test1.php a=1
会显示
a=1,1
HTTP和CLI是完全不同的环境。
如果您想调整您的脚本,使其在任一环境中都无需更改即可运行,您确实可以从 country_id=10
获取数据,但您需要自己解析它,因为它不是 PHP 预计。您可以使用 parse_str(),但您需要确保您实际上遵循与实际 URL:
中相同的编码规则
if (isset($argv[1])) {
parse_str($argv[1], $_GET);
}
var_dump($argv, $_GET);
如果您想编写一个表现得更传统的 command-line 脚本,您可以使用 getopt() 并像这样调用它:
/usr/bin/php /home/website/cron/my_script.php --country_id=10
/usr/bin/php /home/website/cron/my_script.php --country_id 10
$params = getopt('', ['country_id:']);
var_dump($params);
我在共享服务器上。将参数传递给 crob 作业时,如下所示:
10 * * * * /usr/bin/php /home/website/cron/my_script.php country_id=10
这与 php 脚本一起工作以获取 country_id 的值:
$country_id = $_GET['country_id'];
这不起作用,country_id 为空:
$country_id = $argv[1]
我的理解是第一个选项不应该起作用,第二个选项应该起作用,但恰恰相反。
谁能告诉我为什么?
(1) 对于您的情况, $argv[1] 是 country_id=10
,而不是 10
。请确保您也有一个 semi-colon 来结束这一行。
(2) 假设您已经在使用 parse_str(解析 argv 数据的一种相当标准的做法),那么 $_GET["xxx"] 可以通过命令行从参数中获取值,这是正常的。在此处查看官方文档
https://www.php.net/manual/en/features.commandline.php
所以对于下面的代码 (test1.php):
<?php
parse_str(implode('&', array_slice($argv, 1)), $_GET);
echo $argv[1];
echo ",";
echo $_GET['a'];
?>
如果执行命令行:
php test1.php a=1
会显示
a=1,1
HTTP和CLI是完全不同的环境。
如果您想调整您的脚本,使其在任一环境中都无需更改即可运行,您确实可以从 country_id=10
获取数据,但您需要自己解析它,因为它不是 PHP 预计。您可以使用 parse_str(),但您需要确保您实际上遵循与实际 URL:
if (isset($argv[1])) {
parse_str($argv[1], $_GET);
}
var_dump($argv, $_GET);
如果您想编写一个表现得更传统的 command-line 脚本,您可以使用 getopt() 并像这样调用它:
/usr/bin/php /home/website/cron/my_script.php --country_id=10
/usr/bin/php /home/website/cron/my_script.php --country_id 10
$params = getopt('', ['country_id:']);
var_dump($params);