非常實用的十個PHP進階應用程式技巧

來源:互聯網
上載者:User

PHP 獨特的文法混合了 C、Java、Perl 以及 PHP 自創新的文法。它可以比 CGI或者Perl更快速的執行動態網頁。用PHP做出的動態網頁面與其他的程式設計語言相比,PHP是將程式嵌入到HTML文檔中去執行,執行效率比完全產生HTML標記的CGI要高許多。下面介紹了十個PHP進階應用程式技巧。

1, 使用 ip2long() 和 long2ip() 函數來把 IP 位址轉化成整型儲存到資料庫裡。

這種方法把儲存空間降到了接近四分之一(char(15) 的 15 個位元組對整形的 4 個位元組),計算一個特定的地址是不是在一個區段內頁更簡單了,而且加快了搜尋和排序的速度(雖然有時僅僅是快了一點)。

先看看下邊這段PHP代碼。這段使用ip2long函數,對同一個IP進行轉換。當然,也有人認為58.99.011.1和058.99.011.1算不上合法的

IP,那就Return,此文對你沒有協助。

為什麼要使用帶前置字元為零的ip:為了在資料庫中查詢,這個可以在IP庫中定位到ip所對應的位置資訊。雖然沒有整型的IP查詢效率高,但畢竟直觀啊。

<?php  echo ip2long('58.99.11.1'),"<br/>";   //輸出是 979569409  echo ip2long('58.99.011.1'),"<br/>";  //輸出是 979568897  echo ip2long('058.99.11.1'),"<br/>";  //輸出是空  ?>  <?phpecho ip2long('58.99.11.1'),"<br/>";   //輸出是 979569409echo ip2long('58.99.011.1'),"<br/>";  //輸出是 979568897echo ip2long('058.99.11.1'),"<br/>";  //輸出是空?>

這個函數好像有bug

 

2, 在驗證 email 地址的時候使用 checkdnsrr() 函數驗證網域名稱是否存在。

這個內建函數能夠確認指定的網域名稱能夠解析成 IP 位址。該函數的PHP 文檔的使用者評論部分有一個簡單的使用者自訂函數,這個函數基於 checkdnsrr(),用來驗證 email 地址的合法性。對於那些認為自己的 email 地址是 [url=mailto:“joeuser@wwwphp.net]“joeuser@wwwphp.net[/url]” 而不是 [url=mailto:“joeuser@php.net]“joeuser@php.net[/url]” 的傢伙們,這個方法可以很方便的抓住他們。

3, 如果你使用的是 PHP 5 和 MySQL 4.1 或者更高的版本,考慮拋棄 mysql_* 系列函數改用改進版的 mysqli_* 系列函數。

一個很好的功能就是你可以使用預先處理語句,如果你在維護一個資料庫密集型網站,這個功能能夠加快查詢速度。一些評估分數。

4, 學會愛上三元運算子。

5, 如果你在項目中感覺到有可複用的部分,在你寫下一行代碼前先看看 PEAR 中是否已經有了。

很多 PHP 程式員都知道 PEAR 是一個很好的資產庫,雖然還有很多程式員不知道。這個線上資產庫包含了超過 400 個可以複用的程式片段,這些程式片段你可以立即用刀你的程式裡。除非說你的項目真的是非常特別的,你總能找到幫你節省時間的 PEAR 包。(參見 PECL)

6, 用 highlight_file() 來自動的列印出格式化的很漂亮的原始碼。

如果你在留言板、IRC 這些地方尋求一個指令碼的協助的話,這個函數用起來非常的順手。當然了,要小心不要意外的泄露出你的資料庫連接資訊和密碼等。

7, 使用 error_reporting(0) 函數來防止使用者看到潛在的敏感錯誤資訊。

在理想情況下,發行伺服器應該在 php.ini 裡完全禁止。但是如果你用的是一個共用的 網頁伺服器的話,你沒有自己的 php.ini 檔案,那麼這種情況下你最好的選擇就是在所有指令碼的第一行前加上 error_reporting(0);(或者使用 require_once() 方法)。這就能夠在出錯的時候完全屏蔽敏感的 SQL 查詢語句和路徑名。

8, 在網資料庫中儲存很大的字串之前使用 gzcompress() 和 gzuncompress() 來顯式的壓縮/解壓字串。

這個 PHP 內建函數使用 gzip 演算法,可以壓縮普通文本達 90%。在我每次要讀寫 BLOB 類型的欄位的時候都使用這些函數。唯一額例外就是當我需要全文檢索索引的時候。

9, 通過“引用”傳遞參數的方法從一個函數中得到多個傳回值。

就像三元運算子一樣,大部分受過正式編程訓練的程式員都知道這個技巧。但是那些 HTML 背景大於 Pascal 背景的程式員都或多或少的有過這樣的疑問“在僅能使用一次 return 的情況下,從一個函數裡返回多個值?”答案就是在變數前加上一個 “&” 符號,通過“引用”傳遞而非“值”傳遞。

10, 完全理解“魔術引號”和 SQL 注入的危險性。

我希望閱讀到這裡的開發人員都已經很對 SQL 注入和瞭解了。不過我還是把這條列在這裡,是因為這個確實有點難以理解。如果你還沒有聽說過這種說法,那麼把今天剩下的時間都用來 Google、閱讀吧。

通過本文的分析,希望對你有協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.