你不了解PHP的10件事情
1.使用ip2long()和long2ip()函數(shù)來把IP地址轉(zhuǎn)化成整型存儲到數(shù)據(jù)庫里。這種方法把存儲空間降到了接近四分之一(char(15)的15個字節(jié)對整形的4個字節(jié)),計算一個特定的地址是不是在一個區(qū)段內(nèi)頁更簡單了,而且加快了搜索和排序的速度(雖然有時僅僅是快了一點)。
2.在驗證email地址的時候使用checkdnsrr()函數(shù)驗證域名是否存在。這個內(nèi)置函數(shù)能夠確認(rèn)指定的域名能夠解析成IP地址。該函數(shù)的PHP文檔的用戶評論部分有一個簡單的用戶自定義函數(shù),這個函數(shù)基于checkdnsrr(),用來驗證email地址的合法性。對于那些認(rèn)為自己的email地址是“joeuser@wwwphp.net”而不是“joeuser@php.net”的家伙們,這個方法可以很方便的抓住他們。
3.如果你使用的是PHP5和MySQL4.1或者更高的版本,考慮拋棄mysql_*系列函數(shù)改用改進(jìn)版的mysqli_*系列函數(shù)。一個很好的功能就是你可以使用預(yù)處理語句,如果你在維護(hù)一個數(shù)據(jù)庫密集型站點,這個功能能夠加快查詢速度。一些評估分?jǐn)?shù)。
4.學(xué)會愛上三元運算符。
5.如果你在項目中感覺到有可復(fù)用的部分,在你寫下一行代碼前先看看PEAR中是否已經(jīng)有了。很多PHP程序員都知道PEAR是一個很好的資源庫,雖然還有很多程序員不知道。這個在線資源庫包含了超過400個可以復(fù)用的程序片段,這些程序片段你可以立即用刀你的程序里。除非說你的項目真的是非常特別的,你總能找到幫你節(jié)省時間的PEAR包。(參見PECL)
6.用highlight_file()來自動的打印出格式化的很漂亮的源代碼。如果你在留言板、IRC這些地方尋求一個腳本的幫助的話,這個函數(shù)用起來非常的順手。當(dāng)然了,要小心不要意外的泄露出你的數(shù)據(jù)庫連接信息和密碼等。
7.使用error_reporting(0)函數(shù)來防止用戶看到潛在的敏感錯誤信息。]在理想情況下,發(fā)布服務(wù)器應(yīng)該在php.ini里完全禁止。但是如果你用的是一個共享的web服務(wù)器的話,你沒有自己的php.ini文件,那么這種情況下你最好的選擇就是在所有腳本的第一行前加上error_reporting(0);(或者使用require_once()方法)。這就能夠在出錯的時候完全屏蔽敏感的SQL查詢語句和路徑名。
8.在網(wǎng)數(shù)據(jù)庫中存儲很大的字符串之前使用gzcompress()和gzuncompress()來顯式的壓縮/解壓字符串。這個PHP內(nèi)置函數(shù)使用gzip算法,可以壓縮普通文本達(dá)90%。在我每次要讀寫B(tài)LOB類型的字段的時候都使用這些函數(shù)。唯一額例外就是當(dāng)我需要全文檢索的時候。
9.通過“引用”傳遞參數(shù)的方法從一個函數(shù)中得到多個返回值。就像三元運算符一樣,大部分受過正式編程訓(xùn)練的程序員都知道這個技巧。但是那些HTML背景大于Pascal背景的程序員都或多或少的有過這樣的疑問“在僅能使用一次return的情況下,從一個函數(shù)里返回多個值?”答案就是在變量前加上一個“&”符號,通過“引用”傳遞而非“值”傳遞。
10.完全理解“魔術(shù)引號”和SQL注入的危險性。我希望閱讀到這里的開發(fā)者都已經(jīng)很對SQL注入和了解了。不過我還是把這條列在這里,是因為這個確實有點難以理解。如果你還沒有聽說過這種說法,那么把今天剩下的時間都用來Google閱讀吧。