只从Cron运行php脚本,还是检查cron是否有请求?

fsi0uk1n  于 2023-10-15  发布在  PHP
关注(0)|答案(5)|浏览(116)

我如何才能只从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。如何调用带参数的文件?

iovurdzv

iovurdzv1#

如果你问这个问题是因为你需要检查脚本是否从web请求中被调用,你可以使用php_sapi_name函数来查看调用的方法-如果它是一个cron作业,该函数应该返回cli,表示命令行调用。但是,它并不能帮助区分cron作业和常规命令行调用。
如果您还需要区分cron作业和脚本的命令行调用,您可以检查运行脚本的用户,看看应该运行cron作业的用户是否相同。例如,在 *nix系统上,可以使用posix_getuidposix_getlogin函数来完成。
最后,如果你担心有人以cron作业所有者的身份登录并从命令行运行脚本,你应该使用一个没有shell的单独用户来执行cron作业。

62lalag4

62lalag42#

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

qgzx9mmu

qgzx9mmu3#

给你的脚本传递一些只存储在cron_script和receiver脚本中的auth密钥怎么样?在调用时检查authkey是否通过接收方脚本中的$_GET ['auth_key']传输。
喜欢:http://www.example.com/receiver_script.php?auth_key=“WhatEverYouWant”

ijxebb2r

ijxebb2r4#

好吧,我找到解决办法了。如果你想用GET参数调用php文件,你应该这样调用file:

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

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

xfyts7mz

xfyts7mz5#

您可以将客户端IP地址与服务器IP地址进行比较,也可以在CronJob地址中使用令牌,如下所示:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

$token = 'YOUR_UNQUIE_TOKEN';
if($ip == $_SERVER['SERVER_ADDR'] && (isset($_GET['token']) && $_GET['token'] === $token)){
    // ---- your-cronJob-code----
}

相关问题