传递crontab一个变量并从PHP中读取它?

时间:2012-04-22 00:44:12

标签: php cron

我创建了一个crontab规则:

* * * * * php /my/directory/file.php

我想从此crontab传递一个要在file.php中使用的变量。

这样做的最佳方法是什么?

4 个答案:

答案 0 :(得分:11)

请记住,从shell运行PHP与在Web服务器环境中运行它完全不同。如果您之前没有完成命令行编程,可能会遇到一些意外。

也就是说,将信息传递给命令的常用方法是将其放在命令行上。如果你这样做:

 php /my/directory/file.php "some value" "some other value"

然后在您的脚本中,$argv[1]将设置为"some value"$argv[2]将设置为"some other value"。 ($argv[0]将设置为"/my/directory/file.php")。

答案 1 :(得分:7)

从命令行执行PHP脚本时,您可以访问$argc中的变量计数和数组$argv中的实际值。一个简单的例子。

考虑 test.php

<?php
printf("%d arguments given:\n", $argc);
print_r($argv);

使用php test.php a b c

执行此操作
4 arguments given:
Array
(
    [0] => test.php
    [1] => a
    [2] => b
    [3] => c
)

答案 2 :(得分:1)

我可以添加$argv个答案,对于更复杂的命令行参数处理,您可能希望使用getopt()http://www.php.net/manual/en/function.getopt.php

答案 3 :(得分:0)

上述两种方法都不适合我。我在我的主机托管服务器上运行了cron。使用类似cPanel的接口创建cron任务。命令行调用PHP传递脚本名称和几个参数。

这就是cron命令行的样子:

php7.2 /server/path/to/my/script/my-script.php "test.tst" "folder=0"

以上$argv的答案都没有适用于我的案例。

在您获得CLI参数的访问权限之前,没有人告诉您必须将$argv声明为全局。官方PHP手册中既没有提到这一点。

好吧,可能必须为运行服务器的脚本声明$argv全局ony。也许在本地环境中,在CLI $argv中运行脚本不需要声明为全局。当我测试它时,我在这里发布。

但对于我的情况来说,工作配置是:

global $argv;
echo "argv0: $argv[0]\n\r"; // echoes: argv0: /server/path/to/my/script/my-script.php
echo "argv1: $argv[1]\n\r"; // echoes: argv1: test.tst
echo "argv2: $argv[2]\n\r"; // echoes: argv2: folder=0

我使用$_SERVER['argv']超全局数组获得了相同的结果。 人们可以像这样使用它:

 $myargv = $_SERVER['argv'];
 echo $myargv[1]; // echoes: test.tst

希望能帮助某人。