調(diào)試一段PHP程序時(shí)遇到的三個(gè)問(wèn)題
更新時(shí)間:2012年01月17日 23:38:03 作者:
調(diào)試一段PHP程序時(shí)遇到的三個(gè)問(wèn)題,學(xué)習(xí)php的朋友可以參考下。
1,filesize()函數(shù)返回錯(cuò)誤的值。
使用curl將某個(gè)頁(yè)面下載到本地時(shí),需要將下載到的臨時(shí)文件tmpHtml.txt的內(nèi)容讀取到一個(gè)緩沖區(qū)中。由于我使用fread()進(jìn)行讀取,需要傳入要讀取的大小,所以先用filesize(‘./tmpHtml.txt')獲取臨時(shí)文件大小。怪異的是,獲取到的臨時(shí)文件大小不正確,下斷點(diǎn)調(diào)試,在filesize()調(diào)用后,手工去硬盤(pán)上尋找文件,文件大小與filesize()得到的結(jié)果不一樣。
在php.net上搜索filesize,可以看到函數(shù)說(shuō)明中有這么一句:Note: 此函數(shù)的結(jié)果會(huì)被緩存。參見(jiàn) clearstatcache() 以獲得更多細(xì)節(jié)。
再去查閱clearstatcache(),果然找到了原因:
PHP將緩存這些(提供了函數(shù)表供查詢)函數(shù)的返回信息以提供更快的性能。然而在某些情況下,你可能想清除被緩存的信息。例如如果在一個(gè)腳本中多次檢查同一個(gè)文件,而該文件在此腳本執(zhí)行期間有被刪除或修改的危險(xiǎn)時(shí),你需要清除文件狀態(tài)緩存。這種情況下,可以用 clearstatcache() 函數(shù)來(lái)清除被 PHP 緩存的該文件信息。
2,在UTF-8編碼的PHP腳本中,對(duì)GBK編碼的中文網(wǎng)頁(yè)內(nèi)容做模式匹配時(shí),如何匹配中文。
在昨天的開(kāi)發(fā)中,需要匹配包含GBK編碼字符串‘蘋(píng)果'的內(nèi)容,所以寫(xiě)出如下代碼:
$pat = '/<img onclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="蘋(píng)果\.jpg" \/><\/a>/';
$pat = iconv(‘UTF-8', ‘GB2312', $pat);
$ret = preg_match_all($pat, $contents, $matches);
可是死活匹配不上,于是嘗試先將內(nèi)容轉(zhuǎn)換成UTF-8編碼,如下:
$pat = '/<img onclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="蘋(píng)果\.jpg" \/><\/a>/';
$contenst = iconv(‘GB2312', ‘UTF-8', $contents);
$ret = preg_match_all($pat, $contents, $matches);
于是就能匹配上了。但是想不通啊,懷疑這里面有詐。
但悲劇的是,今天又用了第一種方法,又匹配中了??磥?lái)問(wèn)題出在別的地方。
?。±戏蚴秦i,問(wèn)題2是由問(wèn)題1引起的!filesize()獲取的不對(duì),自然匹配不上了!第二種方法匹配上,是在解決問(wèn)題1之后??!
3,瀏覽器中審查元素得到的報(bào)價(jià)圖片下載地址,為何與curl得到的下載地址不同。
可能……最后答案依然是:我是豬。
因?yàn)閁RI對(duì)象為:attachment.php?aid=Mzk3MTB8YTg5ZTYyNTJ8MTMyNjcyNDEwMXw5NWYydC9aOUE0a05EVm9ydlErSFBRamZJNWJQL1NHdWJLK3ZraU9GTDZYdnBUdw%3D%3D¬humb=yes
aid是個(gè)什么呢?很可能是個(gè)與session有關(guān)的東東,變一變也很正常的嘛。后來(lái)抓看起來(lái)像靜態(tài)路徑的東東就沒(méi)問(wèn)題了。
以上三個(gè)故事中包含兩個(gè)悲劇,這就是PHP初學(xué)者必犯的低級(jí)錯(cuò)誤。
使用curl將某個(gè)頁(yè)面下載到本地時(shí),需要將下載到的臨時(shí)文件tmpHtml.txt的內(nèi)容讀取到一個(gè)緩沖區(qū)中。由于我使用fread()進(jìn)行讀取,需要傳入要讀取的大小,所以先用filesize(‘./tmpHtml.txt')獲取臨時(shí)文件大小。怪異的是,獲取到的臨時(shí)文件大小不正確,下斷點(diǎn)調(diào)試,在filesize()調(diào)用后,手工去硬盤(pán)上尋找文件,文件大小與filesize()得到的結(jié)果不一樣。
在php.net上搜索filesize,可以看到函數(shù)說(shuō)明中有這么一句:Note: 此函數(shù)的結(jié)果會(huì)被緩存。參見(jiàn) clearstatcache() 以獲得更多細(xì)節(jié)。
再去查閱clearstatcache(),果然找到了原因:
PHP將緩存這些(提供了函數(shù)表供查詢)函數(shù)的返回信息以提供更快的性能。然而在某些情況下,你可能想清除被緩存的信息。例如如果在一個(gè)腳本中多次檢查同一個(gè)文件,而該文件在此腳本執(zhí)行期間有被刪除或修改的危險(xiǎn)時(shí),你需要清除文件狀態(tài)緩存。這種情況下,可以用 clearstatcache() 函數(shù)來(lái)清除被 PHP 緩存的該文件信息。
2,在UTF-8編碼的PHP腳本中,對(duì)GBK編碼的中文網(wǎng)頁(yè)內(nèi)容做模式匹配時(shí),如何匹配中文。
在昨天的開(kāi)發(fā)中,需要匹配包含GBK編碼字符串‘蘋(píng)果'的內(nèi)容,所以寫(xiě)出如下代碼:
復(fù)制代碼 代碼如下:
$pat = '/<img onclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="蘋(píng)果\.jpg" \/><\/a>/';
$pat = iconv(‘UTF-8', ‘GB2312', $pat);
$ret = preg_match_all($pat, $contents, $matches);
可是死活匹配不上,于是嘗試先將內(nèi)容轉(zhuǎn)換成UTF-8編碼,如下:
復(fù)制代碼 代碼如下:
$pat = '/<img onclick="zoom\(this, \'(attachments.*?)\'\)".*?alt="蘋(píng)果\.jpg" \/><\/a>/';
$contenst = iconv(‘GB2312', ‘UTF-8', $contents);
$ret = preg_match_all($pat, $contents, $matches);
于是就能匹配上了。但是想不通啊,懷疑這里面有詐。
但悲劇的是,今天又用了第一種方法,又匹配中了??磥?lái)問(wèn)題出在別的地方。
?。±戏蚴秦i,問(wèn)題2是由問(wèn)題1引起的!filesize()獲取的不對(duì),自然匹配不上了!第二種方法匹配上,是在解決問(wèn)題1之后??!
3,瀏覽器中審查元素得到的報(bào)價(jià)圖片下載地址,為何與curl得到的下載地址不同。
可能……最后答案依然是:我是豬。
因?yàn)閁RI對(duì)象為:attachment.php?aid=Mzk3MTB8YTg5ZTYyNTJ8MTMyNjcyNDEwMXw5NWYydC9aOUE0a05EVm9ydlErSFBRamZJNWJQL1NHdWJLK3ZraU9GTDZYdnBUdw%3D%3D¬humb=yes
aid是個(gè)什么呢?很可能是個(gè)與session有關(guān)的東東,變一變也很正常的嘛。后來(lái)抓看起來(lái)像靜態(tài)路徑的東東就沒(méi)問(wèn)題了。
以上三個(gè)故事中包含兩個(gè)悲劇,這就是PHP初學(xué)者必犯的低級(jí)錯(cuò)誤。
相關(guān)文章
淺談PHP中其他類(lèi)型轉(zhuǎn)化為Bool類(lèi)型
本文給大家匯總介紹了下PHP中轉(zhuǎn)化為布爾(bool)類(lèi)型時(shí)的一些情況,非常的簡(jiǎn)單,有需要的小伙伴可以參考下2016-03-03
深入解讀php中關(guān)于抽象(abstract)類(lèi)和抽象方法的問(wèn)題分析
這篇文章主要介紹了php中關(guān)于抽象(abstract)類(lèi)和抽象方法的問(wèn)題分析,有需要的朋友可以參考一下2014-01-01
php bootstrap實(shí)現(xiàn)簡(jiǎn)單登錄
這篇文章主要為大家詳細(xì)介紹了php bootstrap實(shí)現(xiàn)簡(jiǎn)單登錄的具體方法,感興趣的小伙伴們可以參考一下2016-03-03
PHP常用日期加減計(jì)算方法實(shí)例小結(jié)
這篇文章主要介紹了PHP常用日期加減計(jì)算方法,結(jié)合實(shí)例形式總結(jié)分析了php日期計(jì)算常見(jiàn)的時(shí)區(qū)設(shè)置、date日期轉(zhuǎn)換、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
Wordpress 相冊(cè)插件 NextGEN-Gallery 添加目錄將中文轉(zhuǎn)為拼音的解決辦法
NextGEN Gallery是Wordpress中著名的相冊(cè)插件,遺憾的是不支持中文等unicode字符,本文將介紹如何將目錄轉(zhuǎn)換為拼音(添加圖集時(shí))。2010-12-12
PHP警告Cannot use a scalar value as an array的解決方法
PHP警告Cannot use a scalar value as an array的解決方法,需要的朋友可以參考下。2012-01-01
PHP生成唯一的促銷(xiāo)/優(yōu)惠/折扣碼(附源碼)
每一個(gè)電子商務(wù)網(wǎng)站,現(xiàn)在有一種或多種類(lèi)型的優(yōu)惠/折扣/優(yōu)惠券系統(tǒng),給大家分享一下如何在PHP生成唯一的促銷(xiāo)/折扣碼;因此,今天將討論這樣一個(gè)優(yōu)惠碼的實(shí)現(xiàn)過(guò)程,需要了解的朋友可以參考下2012-12-12
PHP將二維數(shù)組某一個(gè)字段相同的數(shù)組合并起來(lái)的方法
這篇文章主要介紹了PHP將二維數(shù)組某一個(gè)字段相同的數(shù)組合并起來(lái)的方法,涉及PHP多維數(shù)組操作的相關(guān)技巧,需要的朋友可以參考下2016-02-02

