我在調試一個微軟IIS特有的問題,特別是IIS10,但是不知道其他版本的IIS是否也有這個問題。我有一個 WordPress 插件的問題,當我在 Apache 服務器上運行它時,或者在我的 Local by Flywheel 測試環境中的任何 Apache/Linux/nginx Web 服務器上運行它時,它可以正常工作。問題涉及到符號鏈接文件夾的 PHP 內置常量 __FILE__。我創建了指向我的插件開發文件夾的符號鏈接,如下所示:Website is here: c:\inetpub\my-web-siteThe 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\pluginsmklink /J my-plugin c:\users\me\onedrive\plugins\my-pluginWeb 服務器將插件文件夾視為: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)我錯過了什么嗎?
1 回答

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
這是PHP的預期行為,并已記錄在案。路徑/文件名的魔術常量始終解析路徑,以便將符號鏈接替換為其目標路徑。
該 SO 問題中的建議是使用$_SERVER["SCRIPT_FILENAME"]
. 雖然如果您正在測試的文件已通過另一個目錄中的另一個 PHP 文件包含,這可能不起作用。還有其他一些建議,但最終解決方案可能歸結為將目錄安裝到路徑(就像你做一個驅動器一樣)。
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消