1,filesize()函數返回錯誤的值。
使用curl將某個頁面下載到本地時,需要將下載到的臨時檔案tmpHtml.txt的內容讀取到一個緩衝區中。由於我使用fread()進行讀取,需要傳入要讀取的大小,所以先用filesize(‘./tmpHtml.txt')擷取臨時檔案大小。怪異的是,擷取到的臨時檔案大小不正確,下斷點調試,在filesize()調用後,手工去硬碟上尋找檔案,檔案大小與filesize()得到的結果不一樣。
在php.net上搜尋filesize,可以看到函數說明中有這麼一句:Note: 此函數的結果會被緩衝。參見 clearstatcache() 以獲得更多細節。
再去查閱clearstatcache(),果然找到了原因:
PHP將緩衝這些(提供了函數表供查詢)函數的返回資訊以提供更快的效能。然而在某些情況下,你可能想清除被緩衝的資訊。例如如果在一個指令碼中多次檢查同一個檔案,而該檔案在此指令碼執行期間有被刪除或修改的危險時,你需要清除檔案狀態緩衝。這種情況下,可以用 clearstatcache() 函數來清除被 PHP 緩衝的該檔案資訊。
2,在UTF-8編碼的PHP指令碼中,對GBK編碼的中文網頁內容做模式比對時,如何匹配中文。
在昨天的開發中,需要匹配包含GBK編碼字串‘蘋果'的內容,所以寫出如下代碼:
複製代碼 代碼如下:
$pat = '/<\/a>/';
$pat = iconv(‘UTF-8', ‘GB2312', $pat);
$ret = preg_match_all($pat, $contents, $matches);
可是死活匹配不上,於是嘗試先將內容轉換成UTF-8編碼,如下:
複製代碼 代碼如下:
$pat = '/<\/a>/';
$contenst = iconv(‘GB2312', ‘UTF-8', $contents);
$ret = preg_match_all($pat, $contents, $matches);
於是就能匹配上了。但是想不通啊,懷疑這裡面有詐。
但悲劇的是,今天又用了第一種方法,又匹配中了。看來問題出在別的地方。
啊!老夫是豬,問題2是由問題1引起的!filesize()擷取的不對,自然匹配不上了!第二種方法匹配上,是在解決問題1之後啊!
3,瀏覽器中審查元素得到的報價圖片下載地址,為何與curl得到的下載地址不同。
可能……最後答案依然是:我是豬。
因為URI對象為:attachment.php?aid=Mzk3MTB8YTg5ZTYyNTJ8MTMyNjcyNDEwMXw5NWYydC9aOUE0a05EVm9ydlErSFBRamZJNWJQL1NHdWJLK3ZraU9GTDZYdnBUdw%3D%3D¬humb=yes
aid是個什麼呢?很可能是個與session有關的東東,變一變也很正常的嘛。後來抓看起來像靜態路徑的東東就沒問題了。
以上三個故事中包含兩個悲劇,這就是PHP初學者必犯的低級錯誤。
以上就介紹了遇到問題需要關閉 調試一段PHP程式時遇到的三個問題,包括了遇到問題需要關閉方面的內容,希望對PHP教程有興趣的朋友有所協助。