如何仅从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。我如何使用参数调用文件?
答案 0 :(得分:7)
如果你问这个是因为你需要检查脚本是否是从web请求中调用 ,你可以使用php_sapi_name
函数来查看调用方法 - 如果它是一个cron作业,该函数应返回cli
,表示命令行调用。但是,它不能帮助区分cron作业和常规命令行调用。
如果您还需要区分cron作业和脚本的命令行调用,则可以检查运行脚本的用户,看看它是否应该运行cron作业。例如,可以在具有posix_getuid
或posix_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
我在网站上找到的其他示例不起作用,但这些效果很好..