通过 Cron 访问 PHP 脚本时缺少一些 $_SERVER 参数

通过 Cron 访问 PHP 脚本时缺少一些 $_SERVER 参数

我有一个脚本需要通过 cron 使用 PHP 运行。该脚本的原作者对某些$_SERVER参数做了大量使用(例如REQUEST_URI)。

但是,通过命令行或 CRON 运行 PHP 时,某些变量似乎不存在。例如,没有请求 uri,因此该REQUEST_URI参数不可用是有道理的。

除了完全重写脚本以避免使用$_SERVER不普遍使用的特殊参数之外,还有其他方法可以解决这个问题吗?

答案1

当您不太了解脚本时,我建议wget您在 CRON 中通过 Web 服务器触发该脚本,就像浏览器那样。

深入研究wget http://localhost/yourScript.php(-O 和 -o 可能很有趣,但对于仍然接收错误消息等来说可能不是)当你需要“更多”时,比如使用 cookie 登录,你可以检查curl

当你像@pQd 提到的那样使用 hack´n´slay 时不能编辑第三方脚本你应该看看你的cli.php.ini中的“auto_prepend_file”,并考虑使用php -c

答案2

通过反复试验 [分析脚本打印的错误] 或源分析尝试找出所需的参数,并在脚本开头添加:$_SERVER['someName'] = '';$_SERVER['otherName'] = '';

它很大程度上依赖于脚本 —— 如果它期望那里有一些实际值怎么办?例如,如果检查了 referrer 怎么办?

答案3

因为 serverfault 显然希望鼓励新用户写答案而不是仅仅发表简单的评论,所以我将 +1 Tabakhase 的答案并在此添加我的渐进式改进。

如果您不想将脚本暴露给网络,即使有 .htaccess 保护,您也可以编写一个简短的 bash 脚本来实现您的目标。例如:

#!/bin/bash

file=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
cp $script /var/www/host/$file.php
wget --output-document=output.txt http://server/path/to/$file.php
rm /var/www/host/$file.php

当然,您需要摆弄权限以确保运行 cron 作业的人可以将文件写入您的 /var/www,这有其自身的含义。

当然,您可以使用任何您喜欢的方法生成 $file,并且可以通过编辑传递给 wget 的选项来管理输出 /headers/等等(甚至是 cookies!)。

相关内容