当通过Cron访问PHP脚本时,一些$ _SERVER参数丢失

我有一个脚本,我需要通过cronPHP运行。 脚本的原始作者使得许多$_SERVER参数的用户(例如REQUEST_URI )。

但是,通过命令行或通过CRON运行PHP时,似乎某些variables不存在。 例如,没有请求的URI,所以REQUEST_URI参数不可用是有意义的。

除了完全重写脚本以避免使用通用的特殊$_SERVER参数之外,还有什么办法可以解决吗?

当你不知道脚本的时候,我会推荐你​​的CRON中的wget通过浏览器来触发脚本。

挖掘到wget http://localhost/yourScript.php (-O和-o可能是有趣的或不是仍然接收错误消息&co)当你需要“更多”,如使用cookie的login,你可能会检查curl

当使用hack'n'slay作为@pQd提到的,你不能编辑3rdParty脚本,你应该看看你的cli.php.ini中的“auto_prepend_file”,并考虑使用php -c启动作业

通过尝试和错误[分析错误打印脚本]或源分析尝试找出哪些参数是预期的,并在脚本的开始处添加:$ _SERVER ['someName'] =''; $ _ SERVER ['otherName' ] ='';

这是非常依赖脚本 – 如果它期望一些实际值呢? 如果例如引用者被检查?

因为显然,serverfault希望鼓励新用户写答案,而不仅仅是简单的评论,我会+1 Tabakhase的答案,并在这里增加我的渐进改进。

如果您不想将脚本公开到Web上,即使使用.htaccess保护,也可以编写一个简短的bash脚本来实现您的目标。 就像是:

 #!/bin/bash file=$(< /dev/urandom tr -dc _A-Zaz-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,这有其自己的含义。

当然你可以使用任何你喜欢的方法来生成$文件,并且可以通过编辑传递给wget的选项来pipe理输出/头文件/ etc(甚至是cookies)。