【问题标题】:How to enable the Virtual Directory Support php?如何启用虚拟目录支持 php?
【发布时间】:2023-03-21 20:06:01
【问题描述】:

我看到“虚拟目录支持”在 phpinfo.php 中被禁用,我该如何启用它?

【问题讨论】:

标签: php virtual-directory


【解决方案1】:

简而言之:你不能轻易做到。而且你不应该。

更长的故事:PHP 应该提供一个无共享的环境。在这种情况下,这意味着如果两个脚本并行运行,它们不应相互干扰。在大多数情况下,这不是问题,因为不同的脚本使用不同的进程。 (带有 mod_prefork、FastCGI、fpm 等的 Apache 模块)

但在某些情况下,人们在线程环境中使用 PHP 作为模块。 (Microsoft IIS 模块、Apache mod_mpm 模块等)如果是这种情况,PHP 不能依赖操作系统来分离上下文,而是必须自己做。

一个相关区域是当前工作目录。您提到的选项与此有关,并且名称具有误导性:它不是“虚拟目录支持”而是“虚拟当前工作目录支持”。它是文件系统操作的抽象。

因此,当在不同的线程和代码(如include "./foo.php";)中有两个 PHP 请求时,您希望它与请求的主脚本相关,而不是环境的全局状态。 VCWD 支持做到了这一点。因为它只与线程环境相关,所以启用/禁用与 PHP 是否构建线程安全的设置绑定,这是在编译时完成的。除非您需要,否则此功能已关闭。

作为用户,您不应该关心它 - 它与使用流或 PHP 脚本中的东西的能力无关。

【讨论】:

  • 总是喜欢它,因为答案不仅仅是“针对您所要求的内容的基本说明”,而是对如何何时以及为什么进行的详细解释。这就是我喜欢 Stackoverflow 的原因
  • @Cacoon 但是,如果这个问题根本没有得到回答,那就是个问题了。好的建议不是答案。
  • 嗯,我没有从字面上看这个问题,更多的是“这是什么意思”字面问题的答案是“通过使用线程 SAPI 进行编译,最终启用它”并不是真的有帮助(其他一些答案建议--enable-maintainer-zts 虽然它启用了VCWD,但它主要做一些不同的事情并间接启用VCWD)第一段是对字面问题的正确答案。 “你不能轻易”其他一些组件会在需要时“”
【解决方案2】:

使用--enable-maintainer-zts 编译应该可以。
但请确保您知道它的作用,here is an explanation

【讨论】:

  • 并不是说此编译标志对其他单线程 SAPI 强制执行线程状态。这会使事情变得更慢,更重的内存并最终暴露错误。间接地,它还启用了 VCWD 支持。这应该只供 PHP 维护人员用来查找 PHP 错误。 PHP 用户应该使用他们的环境默认设置(线程安全仅在使用 MS IIS SAPI 或 apache mpm_worker 时,而不是 fpm、cli、fastcgi、apache mpm prefork ......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
相关资源
最近更新 更多