3

如何仅从 cron 运行 php 脚本,或者是否可以检查请求是否来自 cron?

编辑

我正在尝试使用参数调用 php 文件。但它们都不起作用:

php -q /home/domain/public_html/cronjob.php?i=a
php -q /home/domain/public_html/cronjob.php par1
php -q /home/domain/public_html/cronjob.php par1=a
php -q /home/domain/public_html/cronjob.php par1='a'

我不能使用 $_GET、$_SESSION 或 $argv。如何使用参数调用文件?

4

4 回答 4

9

如果您之所以问这个是因为您需要检查脚本是否不是从 Web 请求中调用的,那么您可以使用该php_sapi_name函数来查看调用方法 - 如果它是一个 cron 作业,则该函数应该返回cli指示命令行称呼。但是,它不能帮助区分 cron 作业和常规命令行调用。

如果您还需要区分 cron 作业和脚本的命令行调用,您可以检查运行脚本的用户并查看它是否与应该运行 cron 作业的用户相同。例如,这可以在 *nix 系统上使用posix_getuidorposix_getlogin函数来完成。

最后,如果您担心有人以 cron 作业所有者的身份登录并从命令行运行脚本,您应该为 cron 作业使用没有 shell 的单独用户。

于 2013-05-22T22:29:55.520 回答
1

好的,我找到了解决方案。如果你想用 GET 参数调用 php 文件,你应该这样调用文件:

php -q /home/domain/public_html/cronjob.php name=value

您可以使用 $_GET 在 php 文件中获取此数据:

$_GET['name']

或 argv:

$argv[1]

如果您只想将参数传递给 argb :

php -q /home/domain/public_html/cronjob.php value

我在网站上找到的其他例子不起作用,但这些例子很好用..

于 2013-05-23T02:05:09.903 回答
1

如何将一些身份验证密钥传递给仅存储在 cron_script 和接收器脚本中的脚本。通话时检查 authkey 是否通过接收器脚本中的 $_GET['auth_key'] 传输。

喜欢:http ://www.example.com/receiver_script.php?auth_key= "WhatEverYouWant"

于 2013-05-22T22:35:20.373 回答
1

您可以将一个参数传递给您的脚本,说明它是在 cron 作业中调用的。看看问题:cron-jobs-calling-a-php-script-with-variables

于 2013-05-22T22:21:33.413 回答