$ _SERVER ['DOCUMENT_ROOT']在通过cron运行的php脚本中不起作用

php*_*ian 26 php cron

我使用$ _SERVER ['DOCUMENT_ROOT']."/ lib/sft_required.php"; 在PHP脚本中包含'sft_required'文件.当我使用浏览器运行此文件时,它工作正常但是当我将其作为cron作业运行时,它不起作用.当我们通过cron运行脚本时,似乎不包含该文件.

Gab*_*mon 66

你可以自己填充$ _SERVER ['DOCUMENT_ROOT']

$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
Run Code Online (Sandbox Code Playgroud)

如果cron文件在文档根目录中

$_SERVER['DOCUMENT_ROOT'] = dirname(dirname(__FILE__));
Run Code Online (Sandbox Code Playgroud)

如果cron文件是文档根目录上的一个目录

  • 这个答案应该被标记为已接受,因为它为OP的问题提供了实际的解决方案...... (3认同)
  • 在 PHP7 中 `dirname(dirname(__FILE__))` 可以重写为 `dirname(__FILE__, 2)` (2认同)

Que*_*tin 25

假设您直接通过cron运行脚本(而不是通过cronjob触发的HTTP请求访问的Web服务器(例如通过运行wget的cron)),那么当然它不起作用.

没有服务器,所以$_SERVER没有设置.

  • 实际上`$ _SERVER`超全局已设置但它包含不同的值. (10认同)
  • "当然"?为什么服务器'忘记'`DOCUMENT_ROOT`是什么?这不是那么明显(事实上,几年后我仍然不明白为什么DOC_ROOT是空白的(`REMOTE_ADDR`等更明显) (2认同)
  • @Martijn — 服务器不会忘记任何事情。PHP 不是由 Web 服务器运行,而是由 cron 运行。 (2认同)

Ign*_*ams 7

$_SERVER使用CLI解释器运行PHP脚本时,不能指望包含任何正常值.将路径放在环境变量中,或者将其作为命令行参数传递给脚本.