2009年1月20日 星期二
判斷是否在時間範圍內
判斷是否在時間範圍內
***************/
//time()函式會回傳UNIX時間戳記
//strtotime()可將時間字串轉為UNIX時間戳記
$start = "2009-1-31";
$end = "2009-2-14";
$ustart = strtotime($start);
$uend = strtotime($end);
$now=time();
if($now > $ustart && $now < $uend)
{
echo '在時間範圍內';
}else{
echo '不在時間範圍內';
}
2008年8月4日 星期一
PHP資源蒐集
有好的程式碼,有如在蚌中養珍珠一樣持續的蒐集
可以煉出程式碼的美麗(龐大>美麗>簡單),簡單的
程式碼通常是不容易閱讀的。
國外
http://freshmeat.net/
http://php.resourceindex.com/
http://www.devshed.com/
臺灣
中國
2008年7月31日 星期四
PHP搜尋引擎
- Sphine官方網站
1. 用PHP構建自定義搜索引擎(1)
2. 用PHP構建自定義搜索引擎(2)
3. 用PHP構建自定義搜索引擎(3)
4. 用PHP構建自定義搜索引擎(4)
5. 用PHP構建自定義搜索引擎(5)
6. 用PHP構建自定義搜索引擎(6)
7. 用PHP構建自定義搜索引擎(7)
8. 用PHP構建自定義搜索引擎(8)
9. 用PHP構建自定義搜索引擎(9)
10. 用PHP構建自定義搜索引擎(10)
資料來源:http://www.xgdown.com
2008年5月20日 星期二
Cakephp 簡明指南
Cakephp 簡明指南
作者注:這個指南並非出自Cakephp的開發人員,也沒有從他們那裏得到認可。我撰寫它是因為我最近發現Cakephp ,有了很多疑問。我想其他人可能也遇上了這類問題。
什麼是Cakephp?
Cakephp是一個php框架,就如同Rails對於Ruby。本質上講,它是php開發人員避免重複做輪子的一個工具。
Cakephp會對我有説明嗎?
Cakephp會對你有幫助,如果:
你喜歡ruby on rails 的靈巧和高效;
你已經瞭解了php 並且沒時間去學習另一門語言;
你已經厭倦了編寫定制的代碼去做非常類似的事情;
你使用共用主機;
你想用少的時間去做多的工作;
你想使用模版;
你想用美觀、方便搜索的urls 而不是像這樣的 .php?id=12345678;
你不想使用命令行方式;
你只有一個 mysql 資料庫。
Cakephp 與Rails 的優劣比較?
Cakephp像其他框架那樣遵循了MVC模式。我想這樣說是公平的,其開發者受到了Rails的啟發。然而,因為php不同於Ruby, 這兩個框架沒法直接比較。在我看來 Rails 的創意很好,但你需要學習一門新的語言並且需要獨立主機。換句話說,使用Cakephp使你可以繼續留在熟悉的編程環境,使用共用主機的同時利用框架的帶來的便利。
Cakephp能為我做什麼?
很容易地實現內容的管理(增加,更新,刪除)
使用模版樣的佈局和視圖來分離邏輯與表現
表單字段的有效性檢查
避免資料自動存入資料庫(阻止SQL注入式攻擊)
包含了回滾功功能(比如,在保存資料前或後執行某個行為)
測試資料庫的同時正式使用資料庫
使用Cakephp的前提條件?
任何安裝了Apache、php 4.3.2或以上版本、 MySQL 的伺服器。如果mod rewrite 可配置,那麼讓你將獲得美觀的urls。Cakephp同樣可以運行在IIS上。
我自己能安裝Cakephp嗎?
可以,只需將它ftp上傳。你就可以運行Cakephp不需要對伺服器作任何配置變動。
我需要進入命令行嗎?
不需要。
什麼是scaffolding, Cakephp能做到嗎?
從本質上說,scaffolding意味著你可以在資料庫結構之上運行script,它能自動產生基本的內容管理(比如web表單)。是的,Cakephp可以做scaffolding。
包含ajax功能嗎?
是的,Cakephp包含Ajax功能。
我如何在Cakephp中使用CSS, Javascrip及別的的要素?
你可以將所有非Cakephp檔保存在另外的目錄裏。
好的,我需要Cakephp!
從CakeForge下載最新版本
所有程式員都應該知道的5個套件(轉)
在參與了幾個大型PHP項目,寫了很多PHP代碼以後,我發現很多工具可以提高代碼品質,簡化發佈,使得做為PHP開發人員的生涯變得輕鬆許多。許多這樣 的工具可能已經為大家所用。但是,由於一些人甚至沒有注意到這些工具的存在,我會從此開始,好了,不說廢話,下面是我認為所有PHP程式師應該知道的工具 列表。
Phing - 一個專案構建系統
Phing 是一個基於Apache ANT 的專案構建系統。它的名字是一個拗口的語句首字母縮寫 - PHing Is Not GNU make 。Phing可以做傳統構建系統比如 GNU make 能做的任何事情,同時沒有陡峭的學習曲線。
在phing(以及其他的構建系統)背後的思想是評估一系列相關性,然後執行一系列PHP類去正確的安裝和配置一個應用系統。構建過程用一個簡單的 XML配置檔控制。Out of the box, phing內置可以執行一系列替換(比如:在你的開發版本和產品版本間改變include路徑)、執行SQL語句、移動和複製檔、運行外部腳本等等。通 過擴展包含在發行包中的“task”類,你也可以創造自己的定制任務。
對任何需要在超過一台伺服器上部署大型PHP應用的人來世,Phing是一個無價之寶。同時我發現它對簡單的PHP腳本也是很有用的。
Xdebug - 調試和分析工具
Xdebug 是幫助你調試和分析腳本的一個PHP擴展。Xdebug中最有用的特性是在啟動後顯示的新注意資訊、警告資訊和錯誤資訊。如果一個腳本不能正常運行,Xdebug將會輸出關於錯誤資訊的完整堆跟蹤 ,會附帶函數名稱、參數值、原始檔案和行號。這對於厭倦了PHP默認只帶的可憐的錯誤報告功能的程式師是一個值得歡迎的特性。
這個擴展有很多更先進的功能,允許開發人員進行代碼覆蓋率分析,收集分析資訊以及互動式地調試腳本。profiling functionality 功能尤其有用。分析器使用一個普通的輸出檔格式,允許你使用象 KCacheGrind 這樣的工具快速發現你代碼中的瓶頸。對任何嚴肅的開發人員而言,一個好的分析器是基本工具,它使得你妥善優化你的代碼,同時避免過早優化帶來的危害。
PHPUnit - 單元測試框架
PHPUnit 是一個羽量級的PHP測試框架。它是在PHP5下麵的 JUnit 3.8.1 完整移植,是xUnit 測試框架家族的一員(它們基於軟體模式 先鋒 Kent Beck 的設計)。
單元測試是幾個現代敏捷開發方法的基礎,使得PHPUnit成為許多大型PHP項目的關鍵工具。這個工具也可以被前面討論的Xdebug擴展用來生成代碼覆蓋率報告 ,並且可以與phing集成來自動測試。
Propel - ORM(物件關係映射)框架
Propel是一個PHP5下面的物件關係映射(ORM)框架,它起源於Apache Torque項目。它提供了一個複雜但是易用的資料庫抽象層,使得你可以在PHP中象使用普通類和物件一樣得使用資料庫實體。Propel允許你使用一種簡單的XML格式定義你的資料庫,這個XML檔被用來映射資料庫,生成應用中使用的靜態類。
Propel被內嵌於流行的Symfony PHP框架 (還有其他的),它使得代碼更靈活、模組化以及可移植。這個項目有The project has 出色的文檔,以及很棒的支持社區。
phpMyAdmin / phpPgAdmin - 基於web的資料庫管理系統
歷史有點長可是還是很有用,phpMyAdmin是對於任何資料庫(對應PostgreSQL和SQLite是phpPgAdmin 和 phpSQLiteAdmin)最有用的管理工具之一。它有助於做每一件事情 - 從為了調試應用去創建和刪除資料庫到做備份。安裝它通常是我在一個LAMP伺服器上面安裝完 Apache, PHP和MySQL後做的第一件事情。如果你使用MySQL,不知何故還沒聽說過它,那麼現在就安裝 。
優化PHP程式的40條建議
1.如果一個方法可靜態化,就對它做靜態聲明。速率可提升至4倍。
2.echo 比 print 快。
3.使用echo的多重參數(譯注:指用逗號而不是句點)代替字元串連接。
4.在執行for迴圈之前確定最大循環數,不要每迴圈一次都計算最大值。
5.登出那些不用的變數尤其是大陣列,以便釋放記憶體。
6.儘量避免使用__get,__set,__autoload。
7.require_once()代價昂貴。
8.在包含檔時使用完整路徑,解析作業系統路徑所需的時間會更少。
9.如果你想知道腳本開始執行(譯注:即伺服器端收到用戶端請求)的時刻,使用$_SERVER[‘REQUEST_TIME’]要好於time()。
10.函數代替正則運算式完成相同功能。
11.str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。
12.如果一個字串替換函數,可接受陣列或字元作為參數,並且參數長度不太長,那麼可以考慮額外寫一段替換代碼,使得每次傳遞參數是一個字元,而不是只寫一行代碼接受陣列作為查詢和替換的參數。
13.使用選擇分支語句(譯注:即switch case)好於使用多個if,else if語句。
14.用@遮罩錯誤消息的做法非常低效。
15.打開apache的mod_deflate模組。
16.資料庫連接當使用完畢時應關掉。
17.$row[‘id’]的效率是$row[id]的7倍。
18.錯誤消息代價昂貴。
19.儘量不要在for迴圈中使用函數,比如for ($x=0; $x <>每迴圈一次都會調用count()函數。
20.在方法中遞增局部變數,速度是最快的。幾乎與在函數中調用局部變數的速度相當。
21.遞增一個總體變數要比遞增一個局部變數慢2倍。
22.遞增一個物件屬性(如:$this->prop++)要比遞增一個局部變數慢3倍。
23.遞增一個未預定義的局部變數要比遞增一個預定義的局部變數慢9至10倍。
24.僅定義一個局部變數而沒在函數中調用它,同樣會減慢速度(其程度相當於遞增一個局部變數)。PHP大概會檢查看是否存在總體變數。
25.方法調用看來與類中定義的方法的數量無關,因為我(在測試方法之前和之後都)添加了10個方法,但性能上沒有變化。
26.派生類中的方法運行起來要快於在基類中定義的同樣的方法。
27.調用帶有一個參數的空函數,其花費的時間相當於執行7至8次的局部變數遞增操作。類似的方法調用所花費的時間接近於15次的局部變數遞增操作。
28.用單引號代替雙引號來包含字串,這樣做會更快一些。因為PHP會在雙引號包圍的字串中搜尋變數,單引號則不會。當然,只有當你不需要在字串中包含變數時才可以這麼做。
29.輸出多個字串時,用逗號代替句點來分隔字串,速度更快。注意:只有echo能這麼做,它是一種可以把多個字串當作參數的“函數”(譯注:PHP手冊中說echo是語言結構,不是真正的函數,故把函數加上了雙引號)。
30.Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。儘量多用靜態HTML頁面,少用腳本。
31.除非腳本可以緩存,否則每次調用時都會重新編譯一次。引入一套PHP緩存機制通常可以提升25%至100%的性能,以免除編譯開銷。
32.儘量做緩存,可使用memcached。memcached是一款高性能的記憶體物件緩存系統,可用來加速動態Web應用程式,減輕資料庫負載。對運算碼 (OP code)的緩存很有用,使得腳本不必為每個請求做重新編譯。
33. 當操作字串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因為它不做任何計算,只返回在zval 結構(C的內置資料結構,用於存儲PHP變數)中存儲的已知字串長度。但是,由於strlen()是函數,多多少少會有些慢,因為函數調用會經過諸多步 驟,如字母小寫化(譯注:指函數名小寫化,PHP不區分函數名大小寫)、哈希查找,會跟隨被調用的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。
(舉例如下)
if (strlen($foo) <>(與下面的技巧做比較)
if (!isset($foo{5})) { echo "Foo is too short"; }
調用isset()恰巧比strlen()快,因為與後者不同的是,isset()作為一種語言結構,意味著它的執行不需要函數查找和字母小寫化。也就是說,實際上在檢驗字串長度的頂層代碼中你沒有花太多開銷。
34. 當執行變數$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用於其他語言,所以請不要修改你的C或Java代碼並指望它 們能立即變快,沒用的。++$i更快是因為它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會產生一個臨時變數,這個臨時變 量隨後被遞增。而前置遞增直接在原值上遞增。這是最優化處理的一種,正如Zend的PHP優化器所作的那樣。牢記這個優化處理不失為一個好主意,因為並不是所有的指令優化器都會做同樣的優化處理,並且存在大量沒有裝配指令優化器的互聯網服務提供商(ISPs)和伺服器。
35.並不是事必面向物件(OOP),面向物件往往開銷很大,每個方法和物件調用都會消耗很多記憶體。
36.並非要用類實現所有的資料結構,陣列也很有用。
37.不要把方法細分得過多,仔細想想你真正打算重用的是哪些代碼?
38.當你需要時,你總能把代碼分解成方法。
39.儘量採用大量的PHP內置函數。
40.如果在代碼中存在大量耗時的函數,你可以考慮用C擴展的方式實現它們。
41.評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug調試器包含了檢驗程式,評估檢驗總體上可以顯示出代碼的瓶頸。
42.mod_zip可作為Apache模組,用來即時壓縮你的資料,並可讓資料傳輸量降低80%。
24個頂級PHP樣板引擎
為了找到一個好的範本引擎,在網上進行搜索,目前已經整理出了以下名單:
Smarty
Smarty的特點是將範本編譯成PHP腳本,然後執行這些腳本。很快,非常靈活。
Heyes Template Class
一個非常容易使用,但功能強大並且快速的範本引擎,它幫助你把頁面佈局和設計從代碼中分離。
FastTemplate
一個簡單的變數插值範本類,它分析你的範本,把變數的值從HTML代碼中分離處理。
ShellPage
一個簡單易用的類,可以讓你的整個網站佈局基於範本檔,修改範本就能改變整個站點。
STP Simple Template Parser
一個簡單、羽量級並且易於使用的範本分析類。它可以從多個範本中組裝一個頁面,把結果頁面輸出到流覽器或者檔系統。
OO Template Class
一個你可以用在自己程式中的面向兌現的範本類。
SimpleTemplate
一個可以創建和結構化網站的範本引擎。它可以解析和編譯範本。
bTemplate
短小但是快速的範本類,允許你把PHP邏輯代碼從HTML修飾代碼中分離。
Savant
一個強大且羽量級的PEAR相容範本系統。它是非編譯型的,使用PHP語言本身做為它的範本語言。
ETS - easy template system
可以使用完全相同資料重組範本的範本系統。
EasyTemplatePHP
適用於你的站點的一個簡單但是強大的範本系統。
vlibTemplate
一個快速、全能的範本系統,它包含一個緩存和調試類。
AvanTemplate
多位元組安全的範本引擎,佔用很少系統資源。它支援變數替換,內容塊可以設置顯示或隱藏。
Grafx Software’s Fast Template
一個修改版本的Fast Template系統,它包括緩存功能,調試控制臺以及沉默去除為賦值塊。
TemplatePower
一個快速、簡單、功能強大的範本類。主要功能有嵌套的動態塊支援,塊/檔包含支援以及顯示/隱藏未賦值的變數。
TagTemplate
這個庫的功能被設計來使用範本檔,同時允許你從HTML檔檢索資訊。
htmltmpl: templating engine
一個適用於Python和PHP的範本引擎。它面向希望在專案中分離代碼和設計的web應用開發人員。
PHP Class for Parsing Dreamweaver templates
一個分析Dreamweaver範本的簡單類,被用於Gallery 2 和WordPress的自定義模組中。
MiniTemplator (Template Engine)
針對HTML檔的一個緊湊型範本引擎。對於範本變數和塊定義它具有簡單的語法。其中塊可以嵌套。
Layout Solution
簡化網站開發和維護。它擁有常用的變數和頁面元素使你不需要重複做頁面佈局工作。
Cached Fast Template
它已經納入 FastTemplate ,允許你緩存範本檔,甚至可以在分離的塊內容上緩存不同的規格。
TinyButStrong
一個支持MySQL, Odbc, Sql-Server和ADODB的範本引擎。它包含7個方法和兩個屬性。
Brian Lozier’s php based template engine
只有2K大小,非常快並且是物件導向設計。