仅从Cron运行php脚本或检查来自cron的请求?

时间:2013-05-22 22:13:15

标签: php security cron

如何仅从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 个答案:

答案 0 :(得分:7)

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

如果您还需要区分cron作业和脚本的命令行调用,则可以检查运行脚本的用户,看看它是否应该运行cron作业。例如,可以在具有posix_getuidposix_getlogin功能的* nix系统上完成。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

赞:http://www.example.com/receiver_script.php?auth_key=“WhatEverYouWant”

答案 3 :(得分: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

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