【问题标题】:Equivalent of running $_SERVER['DOCUMENT_ROOT'] when running php in terminal相当于在终端运行 php 时运行 $_SERVER['DOCUMENT_ROOT']
【发布时间】:2011-02-13 16:35:07
【问题描述】:

我想知道当我这样调用 PHP 时,是否有一些变量会返回 $_SERVER['DOCUMENT_ROOT'] 的返回值:./somescript

如果不是,人们如何绕过这个案例?我希望能够在 Web 浏览器和终端中调用相同的脚本(模板编译器)。

谢谢! 马特·穆勒

【问题讨论】:

  • DOCUMENT_ROOT 是 Web 服务器设置的环境变量。
  • 是的。这就是它没有设置的原因。

标签: php terminal root


【解决方案1】:

我不推荐使用getcwd() 命令,因为你无法确定cwd 指向的位置,除非你之前创建了chdir(这意味着你已经知道你在哪个目录) .工作目录可以在 php config 中定义,并且在 apache 和 CLI 之间有所不同,并且一些 php 框架在启动时会更改它。

使用dirname(__FILE__),无论您是在 apache 还是 cli 上下文中,它都可以正常工作(此外,它还可以在 windows 和 unix 上工作),如果您需要在项目文件中移动,您可以使用相对路径。

【讨论】:

  • dirname(FILE) 不是 DOCUMENT_ROOT 的同义词。去图
  • 没有写它,但假设从前端控制器脚本运行你应该得到文档根目录,并从项目中的其他地方运行你可以使用相对路径解析到文档根目录而不创建硬依赖关于服务器配置
【解决方案2】:

我认为你应该使用getcwd 函数来获取当前目录(或者如果你的脚本是最上面的,则只使用dirname(__FILE__))。然后你只需要确保从你的 DOCUMENT_ROOT 运行脚本。像这样的:

cd /var/www/
php ./scripts/top.php

【讨论】:

  • 嗯。我以前试过这个,我很确定它不起作用,因为 cwd 并不总是相同的。看来这可能是我唯一的选择。谢谢!
  • 您只需要确保在运行脚本之前已将cd 放入所需的目录即可。
  • 问题是如何确定需要的目录
  • 显然你需要这样做才能找到一个脚本。
  • 这是您试图回答的问题。如何确定。不是如何设置。有时我不明白如何接受答案
【解决方案3】:

硬编码文档根目录。
硬编码总是一种解决方案

【讨论】:

  • 不幸的是,这不是一个真正的选择,因为我正在寻找分发代码。
  • @Matt omg 分发。然后制作一个安装脚本,它将为您确定一个文档根目录并对其进行硬编码。你也可以使用相对路径
  • 只需添加:*需要一些配置。
  • 哈。我宁愿尝试比使用它的人少一点懒惰。不过还是谢谢。
  • 这确实不是一个好的解决方案,如果您不得不移动脚本或切换到另一个服务器怎么办。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2013-08-12
  • 2017-03-10
  • 2011-12-13
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
相关资源
最近更新 更多