
CodeIgniter 來當作 REST Server 的朋友們,我相信都會找到 philsturgeon 所寫的 codeigniter-restserver,此套件幫你完成底層 API Response 動作,讓你可以輕易處理 REST URL。但是如果拿這套程式碼來搭配 Backbone.js 你會遇到拿不到 POST 或 PUT 變數問題,作者來一一描述。
[Read More]CodeIgniter 來當作 REST Server 的朋友們,我相信都會找到 philsturgeon 所寫的 codeigniter-restserver,此套件幫你完成底層 API Response 動作,讓你可以輕易處理 REST URL。但是如果拿這套程式碼來搭配 Backbone.js 你會遇到拿不到 POST 或 PUT 變數問題,作者來一一描述。
[Read More]Cross Site Request Forgery 簡稱 CSRF 是網路上最常見的攻擊方式,由於前端的盛行,現在開發網站偏向前後端拆開,前端使用大量的 Javascript 及 CSS3 效果,後端則是使用 PHP, Ruby, Python… 等,前端如何拿到資料庫資料呢,必需透 過 AJAX 方式來存取,常見的後端 API 會設計成 RESTful (GET/PUT/POST/DELETE),後端為了擋住 CSRF 攻擊,所以限定了特殊 Content-Type Header,前端需要帶 application/json 給後端才可以拿到資料,這只能透過 Ajax requests 才可以做到。
[Read More]很高興看到 CodeIgniter 出了 2.1.4 版本了,距離上個版本大約 9 個月,但是這次的 Release 只針對 Security 做改善,可以參考 Change Log。然而在今天看到 Ellislab 宣佈找尋 CodeIgniter 新東家,也就是官網不再維護此 Project,希望有新的團隊或公司可以接手,繼續讓 CodeIgniter 發揚光大,在 GitHub 上的 PHP Language 排名上,CodeIgniter 幾乎榜上有名,討論活躍度也是非常高的,但是公司就是找不到任何 Business Model 來支撐整個 Project 維護成本。其實觀察幾年下來,本來寫 CodeIgniter 核心人物都漸漸不在了,像是 @Philsturgeon 自己創了 Fuel PHP Framework,現在似乎也沒在參與此 Project?CodeIgniter 最後都是由 @narfbg 來 maintain 以及開發新功能,世界各地的 Pull Request 也都是由他負責審核並且參與討論,但是一個人還是無法負擔這麼多事情阿,所以現在 CodeIgniter 3.0 還是生不出來。最後希望還是有人可以接手 CodeIgniter,很期待 3.0 出來的說,都已經做了一半以上了,不要放棄阿。
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。
連結,或者是複製底下資料貼到 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]
CodeIgniter,拿到第1版原始碼來自 中國 CodeIgniter ,版本是很舊的 1.7.x 版本,目前官方已經是 2.1.3 版本,現在朝 3.0.x 版本邁進,這次有機會將整個原始碼改寫成 3.0.x develop 分支版本,也將整個官方 source code 分享出來,讓需要原始碼範例初學者可以參考,Source Code 已經放在 github 上面,由於是拿大陸那邊的原始碼,也許有些地方寫的不是很完整,歡迎大家 pull request。 台灣 CodeIgniter Source Code Github
如果你有在使用 CodeIgniter + Nginx + PHP-FPM 使用者,務必看到這篇 CLI problem nginx php-fpm,在使用 CLI 時候會有些問題,解決方式也非常簡單,只要在 index.php 裡面加上
$_SERVER['PATH_INFO'] = NULL;當然這篇最主要不是講這個,而是最後我有提到一篇解法,在
Nginx 裡面如何設定 rewrite 功能,比較不同的是,現在不用在設定這麼複雜了,要判斷檔案是否存在,不要在使用下面方式
server { root /var/www/domain.com; location / { if (!-f $request_filename) { break; } } }而必須改成
location / { try_files $uri $uri/ /index.php; }請看
Check IF File Exists,看完之後可以拿掉很多設定,讓 Nginx 設定檔看起來更簡單容易。 參考: try_files
去年 PHPConf 介紹了 CodeIgniter PHP Framework,這次講如何在 CodeIgniter 底下設計 RESTFul API,其實主要介紹兩個 CodeIgniter 套件,第一個是 RESTFul Server 前面是 RESTFul Client,一個伺服器端,後面用來測試 (Unit Test),底下是今年的 Slide,歡迎大家下載
Nginx 搭配 PHP-FPM 用起來效能還不錯,這次來筆記如何設定 Nginx 去除 PHP MVC Framework 討厭的 index.php 字串,不管是 Laravel 或 CodeIgniter 教學文件都是在 Apache 設定 .htaccess 來達成 Cleaner URL,Apache 最大好處支援 .htaccess,但是 Nginx 也有強大的效能,此篇紀錄如何設定 Nginx 達成 mod_rewrite 效果。
[Read More]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 程式碼規範,讓工程師可以遵循此規則達到團隊合作
投影片內容都是現有 PHP FIG Group 所制定的 PSR-0, PSR-1, PSR-2 規則,那如何將既有專案的 Coding Style 轉換成上述標準呢,可以透過 PHP Coding Standards Fixer tool 來快速完成,此工具是由 Symfony Framework 完成。透過此工具可以快速且無痛轉換程式碼風格,舉個簡單例子:
[Read More]