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