2014-11-01 15 views
0

我知道如何解決這個與暴力預防(我認爲),但我想知道是否有人遇到過這個問題和/或想出一些好主意追查真正的根本原因。我在Windows XPphp 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'))))); 

回答

0

我不知道這個正確的程序,至於是否應該刪除或標記一些其他的方式,讓人們不要在這上面花更多的時間......

但具體的問題,我描述了它似乎已經在xdebug(php_xdebug-2.2.5-5.4-vc9.dll do從http://xdebug.org/download.php)和Netbeans 7.4決定在顯示由get_include_path()返回的字符串時將\xa字符序列轉換爲換行字符。事實上,它只發生在「有時」,因爲調試器中的重複會話在代碼中的相同位置顯示的方式不同。

我繼續前進,更改了代碼以強制include路徑使用正斜槓來排除該鯡魚。但是我仍然看到完全相同的問題,在代碼中完全相同的地方,調用include_once()時,有效的php文件的有效文件名存在,並且在追加到include_path中的第一個目錄後可以簡單地殺死我腳本沒有記錄或報告任何錯誤或警告。我會發佈一個不同的問題,詳細介紹如果現在我不追逐紅鯡魚仍然難以處理。我對php 5.4.31感覺不好