PHP開發十大必知要點
1. 在合適的時候使用PHP - Rasmus Lerdorf
沒有誰比PHP 的建立者Rasmus Lerdorf 明白PHP 用在什麼地方是更合理的, 他於1995 年 釋出了PHP 這門語言,從那時起,PHP 就像燎原之火,燒遍了整個開發陣營,改變了互聯 網的世界。 可是,Rasmus 並不是因此而建立PHP 的。PHP 是為了解決web 開發者的實際問 題而誕生的。
和許多開源專案一樣,PHP 變得流行,流行的動機並不能用正常的哲學來進行解釋,甚至 流行得有些孤芳自賞。它完全可以作為一個案例,一個解決各種web 問題的工具需求所引 起的案例,因此當PHP 剛出現的時候,這種工具需求全部聚焦到PHP 的身上。
但是,你不能奢望PHP 可以解決所有問題。Lerdorf 是第一個承認PHP 只是一種工具的 人,並且PHP 也有很多力所不能及的情況。
根據工作的不同來選擇合適的工具。我跑了很多家公司,為了說服他們部署和使用PHP, 但是這並不意味著PHP 對所有問題都適用。它只是可以一個解決大部分問題的front-end 腳步語言。 作為一個web 開發者,嘗試用PHP 解決所有問題是不科學的,同時也會浪費你的時間。當 PHP 玩不轉的時候,不要猶豫,試用一下其他的語言吧。
2. 使用多表儲存提高規模伸縮性 - Matt Mullenweg
沒有人願意質疑Matt Mullenweg 在PHP 方面的權威性,他開發了這個星球上最流行的 blog 系統,(依靠一個強大的社群力量支援):Wordpress.建立Wordpress 以後,Matt 和他 的團隊啟動了Wordpress.com 平臺,一個基於Wordpress MU (出版社徵稿)的免費blog 站點。現在, Wordpress 已經擁有大約400 萬用戶, 這些使用者每天提供超過 140,000 篇的日誌。
如果有人知道如何讓網站的規模伸縮自如,這個人一定是Matt Mullenweg。2006 年的時候 Matt 對Wordpress 的資料結構進行了前瞻性的改進,並且解釋了為什麼Wordpress MU 對 每個blog 使用獨立的MYSQL 表格, 而不是把所有的blog 資料都塞進一個巨大的表格。
我們測試過這個方法,但是發現如果要擴充套件它的伸縮性,代價太高。如果用一個整體的數 據結構,在大流量面前,你將會面臨伺服器硬體的問題。在MU 裡面。使用者們都被分佈到獨 立的表格當中,並且可以輕易地組織起來。舉個例子,WordPress 把使用者的資料分散 儲存到4096 個數據庫中,這些資料庫可以分散大規模的資料訪問,實現流量和壓力分流。 資料表的可遷移性讓程式碼(blog)可以執行得更快,並且讓系統具備更強的伸縮性。依靠 強大的快取策略和靈活的資料庫運用策略, Matt 向人們展示了時下最流行的Facebook 和 Wordpress 都可以在PHP 下穩定執行,並且處理驚人的訪問量。
3. 千萬不要相信使用者 - Dave Child Dave Child 是Added Bytes(previouslyilovejackdaniels) 網 站的核心人物,這個網 站以他出色的《cheat sheets for many programming languages》而聞名。
Dave 為很多 英國的公司服務,並且已經在程式設計世界裡樹立起相當的權威。 Dave 為PHP 開發者提供了很多深謀遠慮的建議,並總結成了《writing secure code in PHP》:千萬不要相信你的使用者,他們甚至可能會傷害你。 有一條web 開發的基本原則,我重複多少遍都覺得不夠,那就是:千萬不要相信你的用 戶,同時要假設你網站中的每個資料單元都是從使用者那裡收集來的惡意程式碼。很多時候, 你必須用javascript 在客戶端檢驗表單提交過來的內容,如果你習慣瞭如此,那麼,這是 一個好習慣。如果安全性對你來說很重要,這就是最重要最需要學習的原則。
Dave 目前正致力於為它的《Writing Secure PHP》系列書籍整理例項,書的最後他說: 最後,變得偏執一點吧。除非你認為你的站點永遠不會受到攻擊,否則就正視所有的問 題,當問題真正發生的時候,你的情況會變得很糟。你需要把每個使用者都看成會帶來一場 攻防站的黑客,想盡一切辦法來保護站點的安全,同時想好相應問題的解決方案。
4. 多使用PHP 快取 - Ben Balbo Ben Balbo 開發了Site Point,一個為developers 和designers 提供指導的網站。他是墨 (學術期刊)爾本PHP 開發和開源俱樂部的成員, 因此他對PHP 有一定的瞭解,同時對PHP caching 有 一定的想法和經驗。
如果你擁有一個訪問量很大,但更新並不頻繁的站點(比如blog,基於某種CMS),或許 它需要進行一些改造,這些改造不會花費太多的時間,但是對效能有突出的貢獻。 如果要 為一個複雜/更新頻率很快的站點建立快取機制,過程可能會很曲折,但是好處也是顯而 易見的。
PHP 快取技術有很多種,Ben 為我們推薦瞭如下一些: 快取函式的執行結果 設定過期時間 快取IE 下載的檔案 模板快取技術 Cache_Lite 由於PHP 作為動態語言的特性,快取機制對於更新頻率並不快的站點來說非常重要。
5. 使用IDE, Templates 和Snippets 加速PHP 開發 - Chad Kieffer 當Chad Kieffer 從UI 設計和資料庫優化的工作中抽身出來的時候,他會在他的部落格2 tablespoons 上分享很多技術經驗。由於Chad 多方面的全面發展,他經常可以發現其他程 序員不能發現的問題,並形成相關經驗,尤其是他開發網站的方法。他參與了網站開發的 各個環節,因此他的建議對於提高網站開發的大局觀非常有用。
Chad 認為使用Eclipse PDT (Eclipse's PHP development package) 這樣的IDE,同時使用一些模板技術和開源專案 可以有效地提高PHP 的開發速度。 緊湊的計劃,長長的to do lists 以及deadlines 讓開發人員非常苦悶。不過有些功能, 比如Eclipse Templates,可以有效減少編碼的時間和出錯的機率。 通常來說,任何專案都可以自動化,自動化程度越高,你完成專案的時間就越短。花時間 來開發使用頻率很高的框架和模板,將會節省你以後更多時間。同時,使用像Eclipse and the PDT package 這樣的IDE,你會發現效率得到明顯提高,IDE 可以自動閉合,補全 分號並且可以在本地debug。 Related posts: wordpress 成功升級到2.3.2 雖然tag 對我來說沒什麼用,但是著眼於安全性,我還是升 級了,(國家級期刊)從兩年前的2.0.5 升級到現在的2.3.2,著實需要一份勇氣和決心,幸好在本地跑 升級的時候沒有出現任何問題,只是模板上的功能需要一些簡單的修改。
線上的升級一切 順利,很多人會納悶,你剛才不是還發post 求助升級辦法麼?嗯,我已經找到了最好的工 具,WordPress Automatic Upgrade plugin 這款wordpress 的自動升級外掛真正讓你升級 無憂,因為它會在升級之前為你備份所有的檔案和資料,用起來也是“一路next”型,相 信很適合那些不想為升級煩心的blogger 們,不過有個問題,升級以後的export 功能出現 問題,提示找不到wp-config.php,不知道是普遍有此問題還是我blog 的問題,遇到同樣 問題的朋友請給我留言,我來研究一下解決辦法。
使用者是最好的宣傳和 銷售人員,來聽聽他們是如何宣傳的吧,Tell-a-Friend King—立即體驗! 你是否擁有一 個使用者推薦的系統?一個可以讓使用者發信邀請朋友的系統。我們可以看到, 這些使用者發的 信裡面包含“為什麼使用者在您的網站上消費”這個問題的答案。 很多人花費大量的時間來進行自我定位和制定吸引人的廣告詞,但通過使用者的推薦信,你 就可以找到使用者為什麼青睞你的原因。 輕鬆收集使用者反饋, Kampyle—立即體驗! Kampyle 可以讓使用者在你的網站上提交使用者反饋(通過頁面底部的一個小button),點選 以後會彈出一個視窗讓使用者填寫他們的意見和建議。站長們可以登入Kampyle 的官網去查 看和管理收集到的使用者反饋,如果使用者留下了email 地址,站長們還可以輕易地通知用 戶,他們已經收到反饋並將進行相應的改進。...
6. 利用好PHP 的過濾函式 - Joey Sochacki 或許Joey Sochacki 並不像Matt Mullenweg 那樣有名 ,但他也是一個經驗豐富的開發 者,並且通過他的部落格Devolio 分享了很多技術經驗 Joey 發現在編寫php 程式碼的過程中有很多地方需要進行過濾,但卻並沒有太多的coder 關 注php 的內建過濾函式。 過濾資料是我們經常需要做的事情,但是很多功能豐富的PHP 內建過濾函式卻不為人知。 使用類似filter(www.faqikan.com發期刊)的PHP 內建函式,我們幾乎可以處理所有的過濾任務,包括資料型別 驗證/URL/email 和IP 地址驗證/特殊字元處理等等。 過濾是一件複雜的事情,但是我相信joey 的發現會給你很多啟發,讓你認識到PHP 強大的 過濾功能。
7. 使用PHP 框架 - Josh Sharp 對於是否應該使用Zend,CakePHP,Code Igniter, 或者其他PHP 框架,一直存在著很多爭 議,但是在web 開發者的心中,他們有自己衡量的標準。 Josh Sharp 自己建立了一家提供麵包和黃油服務的網站,因此他對於使用PHP 框架來開發 網站有一定的經驗。他認為使用一個PHP 框架來進行專案開發(use a PHP framework), 可以有效地節省時間,並且減少出錯的機率。(省級期刊)為什麼?因為他覺得PHP 實在是太好上手 了。
PHP 的易於使用有時候也有缺陷,因為並不嚴格的語法,經常會導致很多錯誤程式碼的誕 生。但如果使用一個PHP 框架,出錯的機率就會大大減少。 PHP 框架可以讓你的程式碼結構更加規範,並且節省大量時間,你可以閱讀《benefit of using a PHP framework》來獲得更多相關資訊。
8. 不要使用PHP 框架 - Rasmus Lerdorf 與Josh 的觀點恰恰相反, PHP 的鼻祖Rasmus Lerdorf 卻認為最好不要使用PHP 框架,為 什麼?因為不基於框架的PHP 效能更好。
Rasmus 在Drupalcon 2008 的演講上,用“Hello World”的例子來對比了一些框架PHP 和 簡單PHP 之間的效能,結果顯示框架PHP 的效能要遠遠落後。
9. 使用批處理 - Jack D. Herrington Jack Herrington 對PHP 世界並不陌生, 並且為大名鼎鼎的IBM developerWorks 貢獻過 超過30 篇的專搞, 同時出版過《PHP Hacks》的書,因此他是一個真正的專家。 Herrington 推薦使用批處理和Cron 來代替那些可以執行在後臺的程式腳步,web 使用者並 不願意線上等待你的處理過程,所以有些事情更適合放到後臺來處理。 誠然,在某些情況下,這有點大材小用了,但是你可以清楚地看到,使用Cron, MySQL, PHP 面向物件的方法以及Pear::DB 這些便捷的工具來建立一個批處理工具並不是一件複雜 的事情。
Jack 認為使用cron, PHP 和MySQL 在後臺處理一些任務,比起多程序的業務邏輯要划算得 多。 兩種方法我都嘗試過,我認為Cron 非常符合”Keep It Simple, Stupid” (KISS) 的原 則,它讓後臺處理變得簡單。與多程序的業務邏輯相比,它沒有記憶體溢位的風險。你可以 建立一個簡單的批處理指令碼,並且在cron 中執行,這個指令碼會定時檢查是否有任務需要處 理,處理完之後就會自動退出,因此你不用擔心是否有程序卡殼,或者陷入死迴圈。
10. 及時啟用錯誤報告 - David Cummings David Cummings 有一個專門提供CMS 軟體服務的公司,並且獲得過幾次獎,他有非常豐富 的PHP 開發經驗。 David 曾經寫過《two PHP tips he wished he’d learned in the beginning》,其中一 點就是:及時啟用錯誤報告,這會節省大量的時間。 我告訴人們,最重要的事情就是最大程度地開啟PHP 的錯誤報告,為什麼?因為PHP 可能 會隱藏很多小問題: 變數沒有預定義 在程式碼片段中引用了不可用的變數 使用了未定義的常量 這些因素看起來並不是什麼大事,除非你在使用面向物件的方法編寫一些類庫。通常,關 閉錯誤報告將可能使你付出更大的成本來維護你的程式碼。
錯誤報告可以幫你輕易地找到程式碼的問題所在,如果錯誤報告的等級夠高,細微的錯誤都 能被立即發現,幫助你節省整體debug 的時間。