我知道如何解決這個與暴力預防(我認爲),但我想知道是否有人遇到過這個問題和/或想出一些好主意追查真正的根本原因。我在Windows XP
與php 5.4.31
。我已經把我的include_path使得具有xdebug
我可以看到的get_include_path()
的結果是:PHP include_path在Windows上獲得'稍後'處理 -escape'
C:/xampp1826/htdocs/OSH2/application/../library;C:\xampp1826\htdocs\OSH2\library;.;C:\xampp1826\php\PEAR
這是一個使用Zend
類自動加載一個ZF1
應用程序,而這正是include_path()
收益爲各種事情被成功自動加載。然後「突然」,在試圖自動加載一個相對於include_path
計算出文件名的特定類別之前,我可以看到get_include_path()
返回該字符串,每個\ xa序列轉換爲換行(ascii decimal 10)
,導致自動加載器的include_once
失敗。
我已經完成了對set_include_path()
(包括我使用的所有php
庫)的額外調用的詳盡搜索,並且只有一對。我已經在它們上面放置了斷點,並在每個斷點之後顯示get_include_path()
的結果。這樣做,我一直無法找到php
代碼,實際上使改變!我想我可能錯過了一個地方,在一些睡眠之後我會再次檢查所有的東西,但就目前而言,它看起來像是php
中的一個錯誤。事實上,一旦正確的字符在include_path
字符串中,我甚至無法想象如何php
代碼可以輕鬆/意外地執行轉義處理。雖然我現在不能輕鬆切換回去,但我沒有使用php 5.3.1
這個問題,因爲我99%肯定是完全相同的源代碼。 php 5.4
有沒有可能解釋這種變化?
有沒有其他人看到過這樣的事情,如果是的話,你是如何找出根本原因的?
由於在Windows上的PHP是非常樂於接受向前路徑名,而不是反斜槓反斜槓,我的強力阻止力的策略很簡單,就是確保沒有反斜槓曾經進入包括路徑,用代碼線沿線的:
define('APPLICATION_PATH', str_replace('\\', '/', realpath(str_replace('\\', '/', realpath(dirname(__FILE__) . '/../application')))));