【问题标题】:running php script on windows via bat file returns error on require_once ($_SERVER['Document_Root']);通过 bat 文件在 windows 上运行 php 脚本在 require_once ($_SERVER['Document_Root']) 上返回错误;
【发布时间】:2011-09-08 14:25:12
【问题描述】:

在 Windows XP 系统上,我有 test.bat

C:\Path\to\php.exe -f "C:\Path\to\test.php"

我也有 test.php

require_once ($_SERVER ['DOCUMENT_ROOT'] . '/Inc/Class/Connect_DB.php');

...更多代码。

当我在“CMD 模式”上执行 test.bat 时,它会返回致命错误,指出无法找到 require_once 文件。

相同的文件在浏览器上运行良好。似乎无法识别 bat 文件中的 $_SERVER 变量。 (我打算稍后通过 schtasks.exe 运行 test.bat 文件)

为什么这里读不到$_SERVER变量?

【问题讨论】:

  • 如果您在批处理文件中运行 PHP,而不是提供网页,而是作为命令行的东西$_SERVER['DOCUMENT_ROO'] 是什么意思?它所指的服务器在哪里?

标签: php batch-file scheduled-tasks


【解决方案1】:

转储 $_SERVER 并检查是否设置了文档根目录。在我的安装中 $_SERVER 可从 cli 获得,但 DOCUMENT_ROOT 键设置为空字符串。即->“”。

您最好使用以下行中的内容来获取路径:

<?php echo dirname(__FILE__);?>
  //you can put this in variable, 
   $base_dir = dirname(__FILE__);
   //append another path ..
   $lib_dir = $base_dir . "/lib/";
   // Notice require does not need parentheses! ;)
   require_once $lib_dir . "db_connect.php";

有很多方法可以做到这一点,但这应该会给你一个想法。

编码愉快!

【讨论】:

  • 谢谢,但是如何定义文档根目录的绝对路径?
  • 你不需要 $_SERVER['DOCUMENT_ROOT'] ,你可以把它放在某个变量中:即: $base_root = "/path/to/my/document_root/";或者使用我上面给你的代码。在 php.net 上查找 dirname() 和 FILE 并查看它的作用,它们很容易知道。如果您需要帮助,请回复我。
  • 由于我在文件中使用了太多的 $_SERVER['DOCUMENT_ROOT'] 和许多包含,我只是将 $_SERVER['DOCUMENT_ROOT'] 改写为“C:Xampp/to/app/”。 (有时我出于测试目的在浏览器上执行文件。所以我真的很想按原样使用变量。)但是,谢谢你,祝你有美好的一天!
【解决方案2】:

从 CLI 调用时,documentroot 为空

使用“__DIR__”:http://php.net/manual/en/language.constants.predefined.php

【讨论】:

  • DIR 仅适用于 php 5.3
猜你喜欢
  • 2011-01-07
  • 2014-01-07
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2011-02-13
相关资源
最近更新 更多