為什麼要選擇 CodeIgniter PHP Framework?

CodeIgniter
大家一定會有疑問,在眾多 PHP Framework 選擇下,我為什麼要推廣

CodeIgniter 這套呢?寫這篇的原因就是我在腦殘 PHP 部落格看到了這篇:Codeigniter是萬靈丹?,底下針對此作者寫的內容做一些回應

在最近幾次去面試的過程 或是和朋友聊天聊到framework 都發現了一個問題 許多完完全全不懂framework的人一直在談論它的好 也發現了有很多基本PHP程式設計基礎都不好的人都在用它 連台灣在推廣它的人都把它尊奉為神…. 看完上面的內容,我實在很想知道,有哪些推廣 CI 的人,把 CI 尊奉為神?如果有的話,可以介紹認識認識。不知道此部落格作者有沒有深入想過,為什麼這些人會覺得 CI 非常好用和 CI 的好處在哪裡?至少在我聽到的大部都是覺得 容易上手及架構清楚,光是這樣就足以讓一些基礎的人可以快速上手這套 Framework。

[Read More]

2011 Taiwan php conference – CodeIgniter Framework

phpconf
今年第1屆舉辦

2011 PHP Conference,終於有機會去台北推廣 CodeIgniter,底下是我這一次的簡報,歡迎大家參考

Phpconf 2011 introduction_to_codeigniter
<div style="padding:5px 0 12px">
  View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/appleboy" target="_blank">Wu Bo-Yi</a>
</div>

輕量級 A Clean & Classy PHP Framework Laravel 簡介安裝

Laravel PHP Framework
今日作者來介紹一套輕量級 PHP Framework:

Laravel,目前還尚未發現台灣有任何人使用這套,然而 PHP Framework 實在太多種了,要把每一套都弄熟實在很不容易,如果作者有玩過一定會上來寫些教學文件,Laravel 是基於 PHP 5.3 環境的 PHP Framwork,裡面已經都是用物件及 5.3 的 Namespace 下去開發,如果您想研究 Laravel PHP Framework 可以 Follow Laravel Twitter,更重要的是追蹤 Github Source Code。也許可以看一下 2.0 的 Roadmap

[Read More]

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

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]

PHP 將長期宣導程式設計師將 ext/mysql 改用 pdo_mysql 和 mysqli

php-logo
今天看到一篇 PHP-Dev 公佈一篇

[PHP-DEV] deprecating ext/mysql,大意就是 PHP 官方未來將打算移除 ext/mysql 的所有相關文件及功能,作者相信很多程式開發者都是用 mysql 套件下去開發,聽到這消息會非常錯愕吧。 官方 documentation team 討論移除的原因在於安全性的考量,在 DK 大神那邊看到是使用 ext/mysql 必須自己處理 mysql_real_escape_string 和 mysql_escape_string,所以官方希望教育使用者不要再使用 ext/mysql 了,底下是官方會做的事情

  • 增加說明指出 ext/mysql 已過時
  • 建議和取代方案
  • 包含取代方案的範例 官方提供了兩個解決方案

pdo_mysqlmysqli,官方列了幾點說明:

  • 從現在開始教育使用者及增加說明文件
  • 在 5.4 版本增加 E_DEPRECATED 訊息,甚至 5.5 6.0 都可以
  • 提供 pdo_mysql 轉換的說明文件
  • 專注於整理 pdo_mysql 跟 mysqli 的線上文件
  • 增加 “The MySQL situation” 的文件說明現況 看完這篇,大家現在趕快轉換到 mysqli 或者是使用 PDO 來開發程式吧
MySQL  PDO  php 

簡易 CodeIgniter Layout Library for Template

在 Web 開發網站,最重要的就是切割版面 CSS 化,制定共同部份 header 跟 footer…等,如果是用在 CodeIgniter Controller 裡面,呼叫 Views 的時候,如底下程式碼: $data = array( "title" => "Welcome to Test" ); $this->load->view("header"); $this->load->view("welcome", $data); $this->load->view("footer"); 大家可以發現只要任何一個 Controller 的函式都必須寫上面的程式碼,這樣是不是重複率太高了呢?在 CodeIgniter Wiki 裡面發現一個不錯用的簡易 layout library,他的作法就是利用 $this->load->view 裡面的第三個參數來達成,可以參考線上文件 - Views 最後一個段落 Returning views as data,我們參考看看底下官網提供的程式碼: obj =& get_instance(); $this->layout = $layout; } function setLayout($layout) { $this->layout = $layout; } function view($view, $data=null, $return=false) { $loadedData = array(); $loadedData['content_for_layout'] = $this->obj->load->view($view,$data,true); if($return) { $output = $this->obj->load->view($this->layout, $loadedData, true); return $output; } else { $this->obj->load->view($this->layout, $loadedData, false); } } } ? [Read More]

好用 PHP debug extension Xdebug on FreeBSD 安裝

之前介紹 FirePHP 這套好用的 PHP Debug 工具,也寫了一篇針對 CodeIgniter 的安裝方式,請參考: [PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter,今天要介紹一套好用的 PHP debug Extension: Xdebug 的安裝方式,作者環境是在 FreeBSD 上,Windows 安裝方式就到官方網站下載對應的 PHP Windows binaries,目前在 FreeBSD ports 上面的版本是 2.1.0,但是 Xdebug 作者已經更新到 2.1.1,自己就順手發了一個 patch 157677 給 FreeBSD 官方 ports 去 update。 FreeBSD 安裝步驟 # cd /usr/ports/devel/php-xdebug # make install clean 設定 /usr/local/etc/php/extensions.ini 檔案後面加入 extension=xdebug.so 設定 /usr/local/etc/php/php.ini 檔案後面加入 xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /tmp/profiler 重新啟動 apache /usr/local/etc/rc.d/apache22 restart 之後執行指令 php -v 會發現出現底下 warning message: PHP Warning: Xdebug MUST be loaded as a Zend extension 這時候請修改 /usr/local/etc/php/extensions. [Read More]

PHP curl error: SSL certificate problem, verify that the CA cert is OK

之前在 CodeIgniter 寫了 CodeIgniter-Google-URL-Shortener-API 縮短網址的 goo.gl API Library,也在國外 CodeIgniter 論壇發表了一篇,不過在論壇有人回覆安裝好之後不能使用,會直接噴出底下錯誤訊息:

Severity: Notice Message: Trying to get property of non-object Filename: controllers/google_url.php Line Number: 24 之後我在 Windows 利用 Appserv 架設好這環境,發現是同樣問題,但是在 FreeBSDUbuntu 上面都不會出現這錯誤訊息,接著在程式馬上面看看 curl 吐出什麼資料:

Curl error: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 把這錯誤訊息拿去 Google 發現到這篇解法 Curl: SSL certificate problem, verify that the CA cert is OK,只要跳過驗證憑證就可以了

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
可以參考

PHP 官方 curl_setopt 的設定說明。