php - PHP 中的脚本路径有未解析的符号链接(symbolic link)吗?

标签 php linux path symlink

假设我们有一个包含以下路径的 Web 目录:

framework/
    index.php
    ...
instance/
    index.php -> ../framework/index.php (symlink)
    ...

如果我们现在请求 (...)/instance/index.php PHP 将解析符号链接(symbolic link)并将 __FILE__ 设置为 (.. .)/framework/index.php

有没有办法解决这个问题,例如dirname(__FILE__) 将是 (...)/instance

编辑:既然已经指出,我实际上不确定 PHP 本身是否正在解析链接或其他内容。就我而言,我使用 nginx 作为网络服务器,使用 php-fpm 作为 FastCGI。

(背景是我希望有多个引用公共(public)代码库的 CMS 或框架实例。)

最佳答案

如果您可以接受文档中有关 的一般警告,那么您的情况的最佳近似是 dirname($_SERVER['SCRIPT_FILENAME']) 来获取“实例”目录>$_SERVER 变量:

There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here.

另外,PHP 手册 does not explicitly promise符号链接(symbolic link)将被保留,但情况似乎确实如此(当然除非您的服务器不这么认为)。另请参阅this answer .

(注意:这也适用于 CLI 模式。如果脚本是通过相对路径(到 CWD)启动的,PHP 将保持这种方式,因此您最终可能会得到“.”。)

但是,对于一般问题(获取任何脚本的目录并保留符号链接(symbolic link)),这不起作用。它仅适用于通过 HTTP 访问的脚本。由于您稍后包含的任何其他脚本都将具有相同的$_SERVER['SCRIPT_FILENAME'](当然),无论其位置如何,dirname($如果它们位于其他位置,_SERVER['SCRIPT_FILENAME']) 将产生错误的目录...

我认为 PHP 目前还没有解决方案(从 v7.2 开始)。

(你最初是正确的:无论你的服务器如何,PHP 都会对 __FILE__ 进行符号链接(symbolic link)解析。而且这个 would ever change 不太可能,因为它一直保持这种状态太长了(太多的代码依赖于它),即使我们想要解析路径的话有 realpath() ,而对于符号链接(symbolic link)的情况没有防弹的解决方案。)

关于php - PHP 中的脚本路径有未解析的符号链接(symbolic link)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446267/

相关文章:

algorithm - 最佳(近似)路径算法(距离+优先级)

python - 添加 numpy 时破坏了我的 python 构建

php - 使用 include-path 定义全局变量

php - 如果浏览器关闭自动注销

php - MySQL 使用 RegEx 更新/选择列

php - required_without 不使用多个字段

linux - RedHat 5 - pstack 和 gdb

php - 拉维尔 5 : How to validate datetime input from 4 input fields?

c++ - 我正在尝试安装 gameplay 游戏引擎,但遇到错误

linux - 自动登录到 X 后,Gnome 终端不再启动