安裝 XCache 加速 PHP 執行速度

php-logo

前言

最近 FreeBSD 系統常常會當機,加上 Varnish cache + APC 一直給我出包,所以這次就換了一套加速 PHP 執行的套件 XCache,這是一套由華人所開發的加速器,可以參考篇台灣PHP聯盟論壇所發表 PHP 加速器 - xcache,裡面可以看到這篇裡面就有中文的對話,非常好玩,這次也順便把 PHP 升級到 5.3.8 版本,還有 Varnish 一次升級到 3.0.1 版本。

各家 PHP 加速器

大家都知道目前網路上知名的 PHP 加速器 apc, eaccelerator, phpa, truck-mmcache,這幾套網路上資料很多,大家都可以試著玩看看,尤其是前面兩套 APC 及 eaccelerator,phpa 目前已經不再維護了,truck-mmcache 版本好像也沒啥在更新,距離上次更新是 2009-07-17,Xcache 作者研究 truck-mmcache 跟 APC 已經很長的時間,他發現 APC 的程式碼比起 truck-mmcache 還要簡單更容易瞭解,所以大家也可以研究 APC 相關程式碼。

[Read More]

Linode VPS Inbound 流量將不再收費

Linode VPS
如果有在玩虛擬主機的朋友們,這是一項非常大的消息(

Linode Reduces Transfer Pricing),那就是從**2011年9月1日開始,只要是流入 Linode VPS 或者是 NodeBalancer 伺服器的流量都是免費**,至於流出流量呢?只要是超過限制的 transfer pool 都是以 $0.10/GB 來計費,這相當便宜阿,Linode 看的出來蠻用心的,可以租一台當作 backup server 也不賴,價格來說也不會很貴啦,最小 VPS 每個月流量給大 200G/month,其實也用不太完,但是網路的速度,可能就要評估看看,不要依賴 Ping 的 ttl 值,以直接下載檔案速度來觀看也許會比較適合喔。

CodeIgniter@TW 成立 IRC 頻道 #codeigniter.tw

CodeIgniter
為了方便大家可以線上討論

CodeIgniter 技術,我在 Freenode 開了一個 IRC 聊天室,頻道是 #codeigniter.tw,歡迎大家可以上來聊聊天,當然在台灣官方首頁也加入了 Web 版的 IRC 聊天室,可以透過這網址進入,如果您是在 Windows 環境可以下載 XChat 軟體來上聊天室,Linux 底下可以透過 screen + irc 指令掛網。 另外講一下 CodeIgniter 最近的消息,那就是很高興官方成功轉換到 Github 上面進行版本控制,目前在 PHP Language 也爬升到第10名,第一名還是 Symfony,CodeIgniter 其中一位作者 Phil Sturgeon 與其他作者推出一套 Fuel PHP Framework 也是大受歡迎,排在 CodeIgniter 後面,真是讚。 不多說了,大家快來聊天吧 /join #codeigniter.tw

git cherry-pick 處理專案 pull request

很高興最近有些網路上朋友想要加入翻譯 CodeIgniter 的計畫,本人在 2009 年開啟這計畫時,就打算用當時蠻熱門的 git 來控管翻譯的進度,然而也選用了 github 來當作 Web 平台,可是大家對於入門 git 有很大的挫折,其實學習 git 沒有想像中這麼難,想要貢獻自己的程式碼都可以在 github 找到教學步驟,2009 年那時候 github 文件還尚未像現在這麼完整,入門之前可以先閱讀 git help 教學,貢獻程式碼之前可以先 Fork 專案,接著進行 Pull request,這些都是透過 Web 介面就可以做到了,但是大家在 pull request 之前記得先將專案程式碼更新,以及 pull request 時選取需要的 commit 阿,先看一個範例,有朋友發了一個 XML-RPC Class 翻譯的 Chinese Pull request 來,但是大家有沒有看到內容,裡面還包含了先前 Html Table 翻譯,所以這時候我就必須用 git cherry-pick 來挑選需要的 commit。

git cherry-pick 使用方法

我們如何 Merge 別人的 pull request,首先新增 remote add branch:

# gname 可以自己自訂
git remote add gname https://github.com/gname/PHP-CodeIgniter-Framework-Taiwan.git
# fetch 程式碼下來
git fetch gname
# 選取您要合併的 commit
# -n 代表多個 commit
git cherry-pick -n bf0246c8 ab3f4943
# 可以修改 commit log 內容
git commit -c bf0246c8

這樣就可以不用 merge 全部的內容,也相當方便 ^^

CodeIgniter 轉移版本控制到 Github 順便 Release 2.0.3

CodeIgniter
在我上禮拜 8/20,8/21 參加

COSCUP 2011 會議的時候,CodeIgniter 偷偷 Release 了 2.0.3 版本,也不算偷偷 Release,因為剛好8月20,21號也是 CICON 2011 會議,CodeIgniter 想給來聽演講的學員們一個驚喜吧,也因為這個 CodeIgniter Con 2011 會議,官方也宣佈將轉換版本控制,原本放在 bitbucket 的程式碼也都轉換到 Github 上面了,另外順便把 CodeIgniter Reactor 取消後面 Reactor 字串,改成 CodeIgniter 了,那 Reactor 呢,就變成 Develop 分支,這個消息真的是太棒了,轉換到大家所熟悉的 Git 版本控制,有些常常在貢獻程式碼的開發者,都是在使用 Github。不管是不是 CodeIgniter,其他許多 opensource 包含 jQuery, phpBB…等都是在使用 github。 [

直接下載 2.0.3 玩看看吧]1 參考:

繁體中文 CodeIgniter 官方公告

JavaScript Reference Select and Option objects 用法介紹

在網頁裡面用 Select 是很常遇到的,之前也寫了一篇如何利用 jQuery 動態增加 option 或取值jQuery 部份就不介紹了,那是需要搭配 jQuery Plugin: Select box manipulation,今天要介紹的是如何用 javascript 動態取值或者是增加 option 選項。因為我發現有使用者直接利用 innerHtml 的方式來把資料塞入到 Select 裡面,雖然 FireFoxChrome 都可以正常運作,但是遇到 IE 還是沒辦法動。

如何取得 select element 底下很多方法可以取得 select element: 1. 透過 form name + element name

document.myform.selectname
2. 透過 form name + element 陣列(注意看 select 是位在 form element index 值多少)
document.myform.elements
3. 透過獨一無二的 ID
document.getElementById("selectid")
[Read More]

推薦一本書籍 Master Mobile Web Apps with jQuery Mobile

master-mobile-web-apps-with-jqm 在這裡跟大家推薦一本國外的書籍,也就是 Elated.com 網站作者 Matt Doyle 推出的一本新書 Master Mobile Web Apps with jQuery Mobile,此作者也有推出 PHPPhotoshop 的書籍,本人相當佩服有美工天份又會寫程式人才。然而現在當紅的 Mobile Device,大家相繼為了 iOS, Android 或其他手持式裝置撰寫 Web 介面,目前網路上大家推的其中一套就是 jQuery Mobile,而我呢,正在摸索另一套強大的 Web App Framework: Sencha Touch,功能來比的話,個人覺得 Sencha Touch 優勢比較多,之後有機會再來寫一系列的 Sencha Touch 文章。此書有提供目錄可以參考,該作者會教大家如何搭配 PHP 跟 MySQL 結合 jQuery Mobile API 來撰寫程式,書籍應該是蠻完整的,目前售價美金19元,如果有興趣的人可以上網下單。

無痛安裝 NodeJS 和 Node Framework Express

nodejs-light

NodeJS 是目前當紅的 Web 2.0 技術,去年 COSCUP 2010 就有 KKBOX 資深工程師 ericpi 來探討這個議題,NodeJS 背後使用了 V8 引擎為基礎,沒看過用純 JS 來當 Server-Side 吧,台灣很紅的 Plurk 也是大量使用 NodeJS,然而每開發一種語言,就會想開始找搭配的 Framework,那就首推 Node Framework Express 來撰寫程式,本篇是要介紹如何在 Ubuntu 10.10 無痛安裝 nodejs + express。

下載 Nodejs 原始碼 直接到

官網下載 Stable 的版本吧,目前是 node-v0.4.10.tar.gz,也可以先看看 API Document

# wget http://nodejs.org/dist/node-v0.4.10.tar.gz
[Read More]

PHP function 參數 default value

2011.08.06 Update: 感謝 jaceju 指正筆誤 自己定義 PHP Function 的時候,假設該函式有1個參數,您可以傳入該參數或者是不傳,但是函式裡面如何判斷是否有傳入該參數呢?先看看底下例子: function test($arg_1 = NULL) { // 判斷 $arg_1 參數是否傳入 $arg_1 = $arg_1 || 'test'; echo $arg_1; } 你會發現上面結果會是 1,而不是 test,大家會懷疑為什麼這樣寫不行呢,那是因為 || 是 boolean operators,他只會 return true 或是 false,而不是回傳 string,如果想這這樣寫,大概可以用 javascript 或 perl 語言來寫,javascript 可以參考之前的文章 [Javascript] 在函數裡設定參數預設值,然而 PHP 的正確寫法要用 ?: 來取代 function test($arg_1 = NULL) { // 判斷 $arg_1 參數是否傳入 $arg_1 = (isset($arg_1)) ? $arg_1 : 'test'; // 或者是 $arg_1 = $arg_1 ? [Read More]

深入探討 CodeIgniter Input Class 核心程式流程

codeigniter_2
為什麼會寫到這篇呢?當然是有網友希望可以幫他解決困難,由於問題的解答需要比較長的文章解釋,就寫出這一篇啦。在我 2009 年開始推廣到現在,相信在台灣已經有不少人開始使用

CodeIgniter,自己覺得非常感動 XD,也非常欣慰,希望把好東西推廣給大家知道。廢話不多說,先來說說問題點,先前發表的一篇 [CodeIgniter] 利用 jQuery 簡易驗證使用者帳號/Email 最後有人留言針對 input->post() 在中文官網上面的 Input Class 教學有些疑慮,底下我先來說明網友的問題點。

input->post 如果為空,則塞進去資料庫竟然是 0 該網友引用了 Input Class 中文文件的內容

使用 POST, COOKIE, 或 SERVER 資料CodeIgniter 提供三個讓你取出 POST, COOKIE 或 SERVER 中項目的補助函數。使用這些函數的主要便利性在於, 它們會確認並檢視是否這些項目已被設定並且在未設定時回傳 false (boolean) , 而不是直接取出 ($_POST[‘something’]),官方範例↓這讓你可以方便地使用資料而不必預先測試它們是否存在。不然, 通常你可能會像這樣做:if ( ! isset($_POST[‘something’])) { $something = FALSE; } else { $something = $_POST[‘something’]; } 網友敘述:

但是為什麼還是為設定為0呢??這應該是檢查資料有沒有被設定而已,那我如果沒有輸入,又怎麼會出現 0 呢?? 網友希望 $username = $this->input-post(“username”); 能幫他判斷如果 username 沒有資料,就直接回傳 NULL,Insert 到資料庫時,應該是 NULL 而不是 0。

程式範例 網友其實沒有錯,根據文件上顯示,如果 $something =

$this->input->post(“something”); 取值過後,如果系統沒有 $_POST[‘something’],則會回傳 FALSE,我猜網友在跟 model 作搭配的時候使用了底下的寫法來塞值進入資料庫:

$data = array(
    "username" => $this->input->post('username'),
    "passwd" => $this->input->post('passwd'), 
    "email" => $this->input->post('email'),
);
$this->load->model('members'); 
$this->members->register($data);  
假設如果沒有 $_POST['email'] 的話,該欄位就會被設定為 0,原因很簡單,就是出在要塞值進入資料庫的時候,程式針對資料的型態判斷啦,底下從最開始取得

$_POST 資料開始說起。

[Read More]