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