IIS上的PHP __FILE__为使用MKLINK创建的符号链接文件夹返回错误的路径

问题描述 投票:0回答:1

我正在调试Microsoft IIS特有的问题,特别是IIS10,但我不知道其他版本的IIS是否也存在此问题。我的WordPress插件有问题,当我在Apache服务器上或任何Apache / Linux / nginx Web服务器上的Local by Flywheel测试环境中运行该插件时,该插件可以正常工作。

问题涉及到PHP内置常量__FILE__到符号链接的文件夹。

我创建了指向我的插件开发文件夹的符号链接,如下所示:

Website is here:        c:\inetpub\my-web-site
The plugin lives here:  c:\users\me\onedrive\plugins\my-plugin

我在文件夹中创建了符号链接:

c:\inetpub\my-web-site\wp-content\plugins

在命令行上使用以下命令。

c:
cd \inetpub\my-web-site\wp-content\plugins
mklink /J my-plugin c:\users\me\onedrive\plugins\my-plugin

Web服务器将插件文件夹视为:

c:\inetpub\my-web-site\wp-content\plugins\my-plugin

这是简单的部分。

在PHP中,从WordPress网站内部,PHP常量__FILE__(仅IIS)返回错误的路径。具体来说,调用PHP常量__FILE__返回错误的路径。

添加此代码:

$path = __FILE__;

到此文件:

c:\inetpub\my-web-site\wp-content\plugins\my-plugin\my-plugin.php

两个$ path都将返回:

c:\users\me\onedrive\plugins\my-plugin\my-plugin.php

我希望__FILE__返回:

c:\inetpub\my-web-site\wp-content\plugins\my-plugin\my-plugin.php

换句话说,在IIS10上,PHP常量__FILE__返回到操作系统所看到的符号链接文件夹的物理(目标)路径,而不是返回到Web服务器所看到的文件的物理路径。

就目前而言,这完全违背了在IIS中使用符号链接文件夹的目的。

我的问题:有人知道1)是否可以解决这个问题? 2)是否有不涉及使用WP_CONTENT_DIR的工作?和3)我缺少什么吗?

php wordpress iis symlink
1个回答
0
投票

这是PHP的expected behavior,已记录在案。路径/文件名的魔术常数始终解析路径,以便将符号链接替换为其目标路径。

© www.soinside.com 2019 - 2024. All rights reserved.