CodeIgniter Error Handler 處理

CodeIgniter

CodeIgniter 在處理 PHP Error handler 是直接呼叫內建的 Exceptions Class 顯示在瀏覽器上,如果有打開 log,系統另外會紀錄在 application/logs 目錄。這是 CodeIgniter 預設作法,但是我希望能把這些錯誤訊息都紀錄到 Database,相關 Notice, Error 訊息都一律寫到 DB 裡面,但是如果用 extend 系統內的 Exceptions 是完全做不到的,所以我寫了一個 Library 只要直接 include 系統就可以直接開始紀錄,因為在 PHP 你會遇到無數種 User experience,都會產生相關錯誤訊息,在產品上線都會將 display_errors 設定為 0,不要讓使用者看到任何錯誤訊息,但是我們還是需要全部的錯誤訊息阿,底下來看看如何安裝 Log Library。

建立 log table 可以直接參考

連結,或者是複製底下資料貼到 phpMyAdmin。

--
-- Table structure for table `logs`
--

DROP TABLE IF EXISTS `logs`;
CREATE TABLE IF NOT EXISTS `logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `errno` int(2) NOT NULL,
  `errtype` varchar(32) CHARACTER SET utf8 NOT NULL,
  `errstr` text CHARACTER SET utf8 NOT NULL,
  `errfile` varchar(255) CHARACTER SET utf8 NOT NULL,
  `errline` int(4) NOT NULL,
  `time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
[Read More]

PHPFog 即將關閉,請儘速轉移到 AppFog

php-logo
在10月寫了一篇

PHP 免費雲端主機 PHPFog vs Pagoda vs AppFog 介紹,上個月很不幸接到 mail 通知,說在今年12月即將關閉 PHPFog,所以免費的服務會在12月21號全部斷線,所以官方寫了 如何轉移 PHPFog 到 AppFog,大家可以參考看看,話說自己把所有的服務都轉到 AWS EC2 上面了,因為在 PHPFog 遇到 Session 一直消失的 Issue,也沒辦法解決,如果有在用 PHPFog 服務,請儘快轉移。

PHP 免費雲端主機 PHPFog vs Pagoda vs AppFog

php-logo
今天筆者來介紹幾套目前免費的雲端虛擬主機服務,自從

Git 版本控制的出現後,大家可以發現,以往免費的虛擬主機搭配後台 Panel,這種模式已經不再看到,取代而之的就是用 Git 來管理程式碼,而不是用 FTP 上下傳方式了。筆者認為學會 Git,是一件非常重要的事情,這樣可以嘗試不同雲端服務,,像是 PHPFogPagoda BoxAppFog …等。這次介紹的雲端主機服務不同於 Linode VPS,Linode 是可以拿到完整的虛擬主機權限,可以進行主機的效能優化,以及安裝合適的套件。

[Read More]

PHP MVC Framework 搭配 Nginx + PHP-FPM 設定檔

Laravel PHP Framework
相信大家都知道

Nginx 搭配 PHP-FPM 用起來效能還不錯,這次來筆記如何設定 Nginx 去除 PHP MVC Framework 討厭的 index.php 字串,不管是 LaravelCodeIgniter 教學文件都是在 Apache 設定 .htaccess 來達成 Cleaner URL,Apache 最大好處支援 .htaccess,但是 Nginx 也有強大的效能,此篇紀錄如何設定 Nginx 達成 mod_rewrite 效果。

[Read More]

[PHP] preg_replace 效能測試 (將兩個空白字元以上取代成一個)

php-logo

preg_replace 可以使用正規語法來取代字串任何字元,,今天探討取代空白字元的效能,雖然這是個不起眼的效能評估,一般人不太會這樣去改,不過這是國外 PHP Framework 有人提出來修正的,經過許多人的測試一致同意。功能就是一篇文章內如果有多餘的空白能空取代成一個,一般人都會用 \s+ 正規語法,畢竟大家都知道 \s 代表單一空白或 \r 等符號,但是國外有人提出用 {2,} 方式來取代空白。程式碼如下,大家可以測試看看。

[Read More]

簡易 PHP Excel Generator Library

php-logo
因為專案需求,必須將資料庫資料輸出成簡易 Excel 檔案,如果要用 PHP 取裡 Excel 文件,我想大家首推一定是

PHPExcel,不管你要對 Excel 做任何處理都一定辦的到,但是專案只需要 generate excel 簡易表格出來,有需要這麼強大的 PHPExcel,網路上找到一個非常簡易的 Library 那就是 php-excel 作者似乎現在沒再更新了,不過已經夠專案使用了,PHP 程式碼也非常簡單。

How to use 程式碼很簡易

$header = array('編號', '姓名', '電話'); 
$body = array('1', '小惡魔', '0934353289'); 
$xls = new Excel_XML;
$xls->addRow($header);
$xls->addRow($body);
$xls->generateXML("test");
或是將資料寫成多為陣列
$body = array(array('編號', '姓名', '電話'), array('1', '小惡魔', '0934353289')); 
$xls = new Excel_XML;
$xls->addArray($body);
$xls->generateXML("test");
結論就是殺雞焉用牛刀,就這個簡易 Library 就對了。

CodeIgniter 3.0.x 支援 Native Session Driver

CodeIgniter
看來

CodeIgniter 團隊看到大家的心聲了,在 2.0.x 版本的時候就已經有人開始發 patch 讓 CI 可以支援 Native Session,也就是透過 session_start 來存取 session,而不是本來的 cookie session,很高興 philsturgeon (Fuel Framework 作者) 今天將此功能 merge 進來 3.0.x 分支,另外 Session 也同時抽出來變成 Driver 而不是單一個 Library 了,詳細可以看此 Patch 連結,也因為這樣所以之前自己寫的 CodeIgniter-Native-Session 可以功成身退了。目前官方同時維護兩個分支,2.1.x 另外是 3.0.x,後者是專門開發新功能,有機會在慢慢介紹。

快速修正專案 PHP Coding Standards

底下是之前的投影片教導創業團隊制定 PHP 程式碼規範,讓工程師可以遵循此規則達到團隊合作

投影片內容都是現有 PHP FIG Group 所制定的 PSR-0, PSR-1, PSR-2 規則,那如何將既有專案的 Coding Style 轉換成上述標準呢,可以透過 PHP Coding Standards Fixer tool 來快速完成,此工具是由 Symfony Framework 完成。透過此工具可以快速且無痛轉換程式碼風格,舉個簡單例子:

[Read More]

關於 PHP FIG Group 所制定的 PSR-0, PSR-1, PSR-2

上禮拜寫了一篇 寫出好維護的 PHP 程式碼,看到 gslin 大神回應了一篇 關於可維護的 PHP 專案:PHP-FIG 的 PSR-0、PSR-1、PSR-2,其實我已經關注 PHP FIG 有一陣子了,FIG 所定義的三份文件 PSR-0 (Auto loading Standard), PSR-1 (Basic Coding Standard), PSR-2 (Coding Style Standard) 寫的非常清楚,目的就是讓 PHP Open Source 專案有共同的 Coding Standard,方便大家共同開發。所以上禮拜提到的投影片內容有大部份參考了這份文件,裏面的內容比較不同的地方就差於 Control Structures 部份,舉個簡單例子: 寫 if 條件式,網路上只有兩種寫法 <?php if ($a == $b) { …… }[/code]

另外一種寫法

[code lang=“php”]<?php if ($a == $b) { …… }[/code]

[Read More]

寫出好維護的 PHP 程式碼

今天有機會到台中幫創業團隊制定 PHP Coding Style,相信程式設計師每天花最多時間的就是 maintain code 了,如何寫出大家都易於維護的程式碼,必須先制定團隊的 coding style 為首要目標,底下分享個人推薦的寫法給大家參考,希望對於未來維護,轉移程式碼或教育訓練剛起步的團隊有些幫助。