Doctrine, the PHP ORM Framework

Posted on 12/23,2008

Doctrine是一個在PHP上的資料庫ORM(Object Relational Mapper),最近手邊的幾個小案子透過Doctrine來實作。ORM的確是讓開發者少寫不少的SQL查詢,但相對的效能一定是比簡單的SQL要來得差,我想魚跟熊掌要兼得並不容易,便利跟效能之間總有個天平讓開發者來自已調整,所以ORM好不好用就見人見志囉。  (閱讀全文)


 

AMFPHP-搭起Flash與PHP的美麗橋樑

Posted on 10/12,2008

AMFPHP LogoFlash在跟Server在交換資料,比較常見的是一般的文字訊息或是XML,我自己在趕時間的時候,會偷懶的隨便echo一個字出來知會flash說server程式已經做完了或是程式執行之後的結果,不趕時間且資料量較多的時候,則會乖乖的用XML。不過,最近開始我比較常用的是AMF跟JSON這兩個方法,其實都還滿方便的,各有其優缺點。

 (閱讀全文)


 

Omit the PHP closing tag "?>"

Posted on 09/10,2008

自從開始改用ZF後,開始慢慢的調整自己的code style,過程也許會痛苦,但相信結果應該會是甜美的。在ZF的Coding Standard裡有一段是這麼寫的:

For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP, and omitting it prevents the accidental injection of trailing whitespace into the response.

看不太懂哪來的injection,後來再翻了一下PHP的官方資料才發現也有提到這段:

The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files. 

後來自己動手做了一下實驗:

檔名:inc.php
<?php
  // do something
?>

檔名:test.php
<?php
  require_once('inc.php');
  session_start();
?>

執行test.php,看起來是沒什麼大問題;不過如果在inc.php的"?>"後面再按幾下enter,多加幾行空白行,test.php就會丟出警告訊息"Cannot send session cookie - headers already sent by...",如果把inc.php的"?>"拿掉就ok了。

原來,在"?>"之後多按的幾個enter(newline)也會被當成資料丟給瀏覽器,所以如果include了這樣的檔案進來,會讓header()或session_start()之類的指令丟出"headers already sent by..."的警告訊息,而如果省去結尾的"?>"則可以避免這個問題。

果然魔鬼都是還是躲在細節裡,PHP的手冊還是要多看啊! Cool

順帶一提,ZF有PDF版的離線手冊了,一千多頁,雖然不見得有比線上方便,但沒網路的時候倒還不錯用(我是把它放到PDA裡,上廁所可以看)


 

Zend Framework之Zend_Tool

Posted on 09/06,2008

Zend Framework Logo看到djangorails之類的framework都有可以快速的產生scaffold的工具,甚至連同樣都是php framework的cakephp也有...還好我之前都是在Zend Studio裡直接new一個Zend Framework Project,它也會自動產生基本的架構出來。隨著Zend Framework 1.6版的上市,它也提供了類似的方便工具(不過從目錄名字看起來還是在實驗階段而已..) (閱讀全文)


 

Zend Framework 1.6 Release

Posted on 09/03,2008

Zend Framework Logo之前用了一陣子的RC版,今天終於正式Release了,這個1.6版的ZF比1.5版多了不少有趣的東西啊(不過選在跟新聞炒很大的google chrome同一天出來,鋒頭多少被蓋去了一點點)

‧Dojo Integration
‧SOAP
‧Preview of Tooling Project in Laboratory (see /laboratory folder)
‧Unit Testing Harness for Controllers
‧Lucene 2.3 Index File Format Support
‧Zend_Session save handler for Database Tables
‧Paginator Component
‧Text/Figlet Support
‧ReCaptcha Service
‧Captcha Form Element
‧Zend_Config_Xml Attribute Support
‧Zend_File_Transfer Component
‧File Upload Form Element
‧Zend_Wildfire Component with FireBug Log Writer
‧Media View Helpers (Flash, Quicktime, Object, and Page)
‧Support in Zend_Translate for INI File Format

對我工作上比較大的影響是跟Dojo的整合(我還是比較喜歡jQuery),這裡有篇文章有寫到1.6版新增的一些功能介紹

另外,分頁、表單認證碼及檔案上傳功能....這些在做網站時常用的功能,之前都是自己拼裝出來用的,結果在1.6也都加進來了Cool。我試著直接把1.5版昇級為1.6版,目前手邊的案子看起來都還滿正常的。

下載連結:http://framework.zend.com/download/current/


 

Smarty之星鍋娛樂網

Posted on 07/28,2008

星鍋娛樂網你想當大明星嗎? 嗯,我想 :)

這案子在當初頁面設計尚未底定,且工作時間有限的情況下,我把這案子用Smarty,搭配MVC(Model-View-Controller)的架構來製作;另外再搭配上Subversion的版本控制功能,讓設計人員可以commit他們的template,工程師可以commit他們的程式碼,讓彼此修改頁面而不小心動到程式碼的影響降到最小,在萬一真的不小心改壞了,還可以回朔之前的版本,真的很方便。

這案子另外還有需要跟金流廠商串接的部份(線上刷卡、便利商店代收及網路ATM功能),忍不住想抱怨一下,有的金流廠商的API很方便(例如綠界),串接起來很輕鬆;但有的廠商的API,看了一下程式碼實在很老舊,明明就有switch的語法可以用,但還用一堆的if...else...來寫,看了實在火大,又還規定一定要用Big5編碼。(我這人有程式碼潔癖,所以看不下去最後就自己動手改寫了....)

網址:http://www.starswok.com


 

Zend Framework之全國加油站 :)

Posted on 06/19,2008

全國加油站之油滴寶寶經過了許久個日子的努力,終於讓全國加油站上線了,這次,用的也是ZF(Zend Framework)來實作的。

網站:http://www.npcgas.com.tw/

上次的HI-CHEW開心堂實作算是第一個試作品,新手上路,所以架構是仿照Rob Allen的"Getting Started with Zend Framework"這篇文章來佈署的,但上回實作的過程中總覺得有些不方便的地方,所以這次全國加油站網站在實作的MVC佈署架構,就上次實作的HI-CHEW更模組化一些,期望下次再建構網站時可以有更多的模組能在最小修改(或是不用修改)的情況下再重複使用。

心得:果然,還是直接實作比看一堆文件還學得快,也記得比較牢 :)


 

Zend Framework與Dojo的組合

Posted on 05/28,2008

Zend Framework Logo不久前ZF宣佈與Dojo的整合..
我個人比較愛jQuery,可惜目前ZF目前選擇的是Dojo當做它的好伴侶
這兩天再來了解一下Dojo,期待jQuery也被整合進去呀

參考資料:
官方消息
Zend Framework Dojo Integration
Zend Frameowork + Dojo的ppt

補充:
看了一下Dojo的資料,整個是個不小的架構,甚至還得改寫原來html code的習慣...試玩了一下Dojo的Helloworld,真的不太習慣...我還是比習慣jQuery,不過Dojo背後有大廠在支持啊...-_-


 

Zend Framework之Zend_ACL

Posted on 04/30,2008

Zend Framework Logo在Zend_Acl當中有兩個重要的部份:Resource(資源) 與 Role(角色),其中「角色」存取「資源」,舉個白話的例子,在一個進出受管制的電梯大樓,小明可以進入101樓的辦公室,表示小明這個「角色」,他的通行證可以刷卡進入101樓的電梯,進入101樓這個「資源」。

比較常見的是網站管理系統的權限實作,例如編輯部的同仁只能用網站的內容編輯系統,廣告部則可以使用廣告刊播系統以及報表系統,但沒有使用內容編輯的權限。那在ZF中,Zend_Acl如何實作這樣的概念呢?

 (閱讀全文)


 

Zend Framework之開心實作堂 :)

Posted on 04/08,2008

Zend Framework Logo看著上一篇網誌的日期,轉眼又是四個月過去了,話說這段時間除了手邊的案子一直在進行之外,就是花了些時間在Zend Framework上。不過看歸看,一直在觀望不敢拿自己手邊的案子做實驗 :) 

前不久ZF 1.5 Release推出了,看起來還不賴,就狠下心來用它了,反正好壞也是一刀 :)  最近手邊的一個星光幫林宥嘉代言的短期網路活動案(HI-CHEW開心堂),就整個是用ZF來實做的。

因為對MVC沒很熟,所以程式碼很多都不太MVC(我好像把Controller該做的動作寫到Model裡了),應該還有滿多地方要改進的,下個案子再來tune :)

活動還有些獎品,活動期間是97年4/1到5/30,有興趣的可以去買個糖果上去參加抽獎 :)


 

自動產生swf檔

Posted on 08/22,2007

我的環境:
Windows XP Professional(SP2)
Appserv(Apache 2.2.4, PHP/5.2.3, MySQL 5.0.45)

透過Ming就可以直接產生swf檔

 (閱讀全文)


 

Zend Framework安裝

Posted on 08/14,2007

環境:
Windows XP Professional(SP2)
Appserv(Apache 2.2.4, PHP/5.2.3, MySQL 5.0.45)
Zend Framework 1.0.1(2007-07-30)

 (閱讀全文)


 

PHP5 Magic Function : __autoload

Posted on 08/03,2007

在PHP裡使用類別,若忘了把類別檔案給include進來,在實體化的時候會發生錯誤。在PHP5裡有這個方便的function可以用:「__autoload」。透過它,就可以讓類別檔在需要的時候載入了。

function __autoload($class_name){
  $filename = strtolower($class_name) .'.php';
  $file = site_path .'classes' .DIRECTORY_SEPARATOR .$filename;
  if(!file_exists($file)){
    return false;
  }
  include_once ($file);
}

這樣只要把類別檔放在classes目錄裡面,它在需要用的時候就會透過__autoload function去找到相對應的檔案Cool

根據php.net所寫的注意事項:
1. 它在Command Line模式底下不能用;
2. 在裡面丟出Exception抓不到


 

PHPMailer

Posted on 05/02,2007

為了要用PHP在透過本機的mail程式發信,搞了一整晚都搞不太定的sendmail.cf,換了postfix也時穩時不穩(看樣子我的LPI認證是考假的了..)

突然想起以前某個外發的程式碼裡有這玩意

http://phpmailer.sourceforge.net/

可以指定非本機的SMTP server發信,還可以夾帶檔案、HTML格式寄信,還是以OOP的方式寫的,使用上相當容易

寫這class的作者,真的是佛心來的!! :)


 

Create Thumbnail Image with PHP & GD

Posted on 04/09,2007

用PHP直接產生小縮圖的方法:
http://icant.co.uk/articles/phpthumbnails/
http://www.sitepoint.com/article/php-gd-libraries

透過GD Library就能直接操作,真方便,ASP就還得靠其它元件才能玩
最近的案子都會用得上 :)