SlideShare a Scribd company logo
快速上手 CodeIgniter
  吳柏毅 Bo-Yi Wu
    appleboy
 http://blog.wu-boy.com/
        2011.11.12
 2011 PHP Conference
內容皆採用 創用 CC 姓名標示
相同方式分享 3.0 台灣 授權條款
$this->load->view('about/me')

    瑞昱半導體股份有限公司
            Linux Kernel Driver, Sencha Touch Web App.
    CodeIgniter 台灣站長 http://codeigniter.org.tw
            翻譯線上文件
            提交 Patch 給官方 CodeIgniter
    個人 Github
            https://github.com/appleboy


2011/11/12                      PHP Conference            3
本投影片適合尚未使用過
Framework 且對於 PHP 已經有些
    基礎的 Web Developer



2011/11/12   PHP Conference   4
Why use Framework?

    合作方式 ( 不管你是團隊還是 Soho)
            程式設計師與程式設計師
            程式設計師與前端設計師
    加速開發
            幫你寫好一堆功能模組 ( 分頁 , 驗證碼 , 多國語系 )
            幫你解決安全性問題 ($_GET, $POST ...)




2011/11/12                PHP Conference      5
CodeIgniter 與我




         在 2009 年 1 月
      畢業進入資策會的第 1 份工作



2011/11/12        PHP Conference   6
為了尋找一套適合同事們
          一起共同開發的環境架構
        (Zend, Cake, Symfony, Yii...)



2011/11/12          PHP Conference      7
$this->load->view('Why')



              在眾多 Framework 選擇下
              為什麼要使用 CodeIgniter




2011/11/12            PHP Conference    8
初學者非用 CodeIgniter 的優勢

    懶人安裝方法
    架構清楚明瞭
    繁體中文文件
    基礎 MVC 架構 ( 日後可跳往其它 Framework)




2011/11/12       PHP Conference       9
懶人安裝方法




2011/11/12    PHP Conference   10
下載 + 解壓縮 = 安裝完成
           適用於任何作業系統



2011/11/12     PHP Conference   11
真的這麼容易安裝 ?

    進入下載網址
            http://www.codeigniter.org.tw/downloads
    解壓縮檔案
            unzip CodeIgniter_2.X.X.zip
    輸入網址
            http://your_host_name/codeigniter/




2011/11/12                      PHP Conference         12
$this->load->view('welcome')




2011/11/12         PHP Conference      13
如果安裝失敗呢?




2011/11/12      PHP Conference   14
你還是不要接觸 PHP 會比較好
         ( 開玩笑的 )



2011/11/12   PHP Conference   15
CodeIgniter 架構清楚明瞭




2011/11/12          PHP Conference   16
CodeIgniter 目錄

      application ( 網站主目錄 )
      system (CodeIgniter 核心目錄 )
      user_guide (CodeIgniter 使用手冊 )
             index.php ( 網站主程式 )




2011/11/12               PHP Conference   17
開發多網站目錄架構
             ( 大部份 Framework 做法 )



2011/11/12           PHP Conference   18
多網站目錄架構

         system ( 升級版本只需要換此目錄 )

         web_01
             application
             index.php

        web_02
             application
             index.php
2011/11/12                 PHP Conference   19
簡易清楚繁體中文文件
       ( 解決初學者對於英文的排斥 )
             http://codeigniter.org.tw/user_guide/



2011/11/12                 PHP Conference            20
初學者請直接閱讀一般主題




2011/11/12        PHP Conference   21
必讀資料

    一般主題                                   類別參考
            CodeIgniter URLs                       Database 類別
            控制器 (Controllers)                      Input 類別
            檢視 (Views)                             Loader 類別
            模型 (Models)




2011/11/12                      PHP Conference                     22
進階閱讀

    一般主題                               類別參考
      ●      新增程式庫 (Library)                 ●   Email 類別
      ●      新增核心類別                          ●   File Uploading 類別
      ●      Hooks – 擴充核心                    ●   Form Validation 類別
      ●      URI 路由                          ●   Language 類別
                                             ●   Output 類別
                                             ●   Pagination 類別
                                             ●   Session 類別

2011/11/12                  PHP Conference                           23
以上就是足以讓大家嘗試的理由

             簡單 容易 好上手



2011/11/12      PHP Conference   24
來看看 CodeIgniter 基本 MVC 架構




2011/11/12   PHP Conference   25
MVC Architecture
   Database                                      Layout

    Model       Library                Helper    View




                          Controller



                Routing                Caching


                          Web Server



2011/11/12            Client Browser
                         PHP Conference                   26
撰寫第一個 Hello World




2011/11/12         PHP Conference   27
Hello Appleboy

             View (views/welcome.php)
     View      <html>
                 <body>
                 Hello <?php echo $username; ?>
                 </body>
               </html>




             Controller (controllers/welcome.php)
               function welcome($id) {
Controller
                 $data[‘username’] = $id;
                 $this->load->view(“welcome”, $data);
               }
2011/11/12               PHP Conference                 28
CodeIgniter 功能特性介紹




2011/11/12          PHP Conference   29
自訂 URL




 還在用 Apache 模組 mod_rewrite
    自訂特殊 URL 嘛?


2011/11/12    PHP Conference   30
CodeIgniter 內建自訂 URL 功能

    $route['products/([a-z]+)/(d+)'] = "$1/id_$2"
            products/os/1234
            呼叫 os controller
            傳入參數 id_1234
    網站出現重大問題需要停機修復
            $route['(:any)'] = "system/fix"
            $route['.*'] = “system/fix”



2011/11/12                        PHP Conference      31
High Performance Framework




                CodeIgniter
             預設不會載入未使用模組
               用到時自行載入


2011/11/12        PHP Conference   32
High Performance Framework

    載入 Library
            $this->load->library(array('email', 'table'));
    載入 view
            $this->load->view('file_name');
    載入 model
            $this->load->model('model_name');
    載入 helper
            $this->load->helper('help_name');

2011/11/12                        PHP Conference              33
CodeIgniter Cahe System

                               index


 Cache 存在                   Routing

                           Caching


                   Application Controller

2011/11/12              PHP Conference      34
Cache 使用方式

    Cache 可以寫在 Controller 任意地方
            $this->output->cache(n);
            n 代表分鐘




2011/11/12                      PHP Conference   35
Cache 缺點




             當 expire time 尚未過期

              網頁資訊一定是舊的


2011/11/12          PHP Conference   36
CodeIgniter Cache 機制

    將 time()+n*60 寫入到 cache 檔案最前面
    每次 Request 則取出跟 time() 比對時間
          若 cache time > time() 直接輸出 cache file
          若 cache time < time() 刪除 cache 並且新增 cache


                  缺點 : 適用於靜態檔案


    2011/11/12               PHP Conference            37
如果用在動態檔案呢 ?



    官方無提供刪除 cache 檔案函式
       請自行 Patch 程式碼
                  http://goo.gl/03IrZ
        $this->output->delete_cache('post/12')
        $this->output->delete_cache('post/list')


2011/11/12              PHP Conference             38
支援簡單 Command Line




             CodeIgniter 2.x.x 版本支援
              Windows, Linux crontab
                搭配背景執行處理


2011/11/12            PHP Conference   39
好處

    CLI 去執行您的 cron-jobs 而不需要使用 curl
    互動式 "tasks" 工作 , 像是動態改變權限、清除
     cache 目錄、執行備份…等。
    任意搭配其他程式 , 例如 Perl, C++, Python




2011/11/12         PHP Conference      40
用法




$ php index.php controller method
$ php index.php welcome index


2011/11/12    PHP Conference    41
避免網頁執行到 command line

    將 corn-jobs 移出 apache 可執行目錄
    用 PHP 判斷,確保瀏覽器不能執行 cron-jobs
            php_sapi_name() === "cli"
            defined('STDIN')




2011/11/12                      PHP Conference   42
處理 $_POST,$_GET 資料
      if ( ! isset($_POST['user']))
              $user = FALSE;
      else
              $user = $_POST['user'];

$user = (! isset($_POST['user'])) ? FALSE : $_POST['user'];




 2011/11/12                    PHP Conference            43
不需要這麼麻煩

    $_POST 資料
            $user = $this->input->post('user');
    $_GET 資料
            $user = $this->input->get('user');
    一起判斷
            $user = $this->input->get_post('user');
            先找 $_POST['user'], 後找 $_GET['user']


2011/11/12                       PHP Conference        44
避免 XSS 的攻擊

    $user = $this->input->post('user', TRUE);
    $user = $this->input->get('user', TRUE);
    $user = $this->input->get_post('user', TRUE);




2011/11/12              PHP Conference               45
良好的程式設計

    善用 === 做判斷
    數字請用 intval() 或 (int) 過慮
            $id = intavl($id);
            $id = (int) $id;
    用 is_array, is_int, is_bool, is_string 判斷類型




2011/11/12                        PHP Conference   46
表單驗證

    $this->form_validation->set_rules('username', ' 帳
     號 ', 'trim|required|min_length[5]|max_length[12]|
     xss_clean');
    $this->form_validation->set_rules('password', ' 密
     碼 ', 'trim|required|md5');
    $this->form_validation->set_rules('email', ' 電子郵
     件 ', 'trim|required|valid_email');



    2011/11/12           PHP Conference              47
分頁

    $this->load->library('pagination');
    $config['base_url'] =
     'http://example.com/index.php/test/page/';
    $config['total_rows'] = 200;
    $config['per_page'] = 20;
    $this->pagination->initialize($config);
    echo $this->pagination->create_links();


2011/11/12               PHP Conference           48
Email 寄信

    多重協定 : Mail , Sendmail , and SMTP
    多重收件人
    副本 (CC) 和密件副本 (BCCs)
    支援 HTML 或者是純文字 (Plaintext) 郵件
    附件檔案




2011/11/12          PHP Conference       49
使用方式

    $this->load->library('email');
    $this->email->from('your@example.com', 'Your Name');
    $this->email->to('someone@example.com');
    $this->email->cc('another@another-example.com');
    $this->email->bcc('them@their-example.com');
    $this->email->subject('Email Test');
    $this->email->message('Testing the email class.');
    $this->email->send();
    echo $this->email->print_debugger();
    2011/11/12                PHP Conference                50
影像縮圖功能

    修改影像的尺寸
    建立縮圖
    影像裁剪
    影像旋轉
    浮水印
    支援 GD/GD2 , NetPBM 以及 ImageMagick



2011/11/12         PHP Conference        51
以上只是一些
        CodeIgniter Library 基本介紹
           想了解更多功能請上
               User Guide
             http://goo.gl/7PGnW




2011/11/12         PHP Conference   52
光是 CodeIgniter 內建的功能
           還不能滿足您嘛?



2011/11/12      PHP Conference   53
歡迎使用 http://getsparks.org/




2011/11/12       PHP Conference    54
What is Sparks?




              Ruby 有 RubyGems
               Node.js 有 npm
             CodeIgniter 有 sparks


2011/11/12          PHP Conference   55
What is Sparks?



        Package Management System

                Making Code Easy to
             Find, Create, and Distribute


2011/11/12              PHP Conference      56
Get Sparks tool Now!!




              一行指令就安裝完成
$ php -r "$(curl -fsSL http://getsparks.org/go-sparks)"




 2011/11/12             PHP Conference              57
Installing Sparks with the Spark
                Manager




                http://goo.gl/lHmCX
$ php tools/spark install -v1.0.4 google-url-shortener




 2011/11/12            PHP Conference               58
Load Sparks Library




$this->load->spark(google-url-shortener/1.0.4');
$short_url = $this->google_url_api->shorten($url);
echo $url . " => " . $short_url->id . "<br />";




2011/11/12           PHP Conference              59
好用 sparks 介紹

    ion_auth http://goo.gl/Au4kM
            E-mail 啟動帳號 , 忘記密碼 .. 等
            單一帳號多重群組
            User/Email 雙重認證選擇
            Zend ACL Library 導入權限
            搭配 Facebook, Google Auth API 認證
    Template http://goo.gl/BN5g6
            動態讀取 CSS 或 Javascript

2011/11/12                  PHP Conference     60
CodeIgniter 重大改變 2009->2011

    版本演進 1.7.x → 2.x.x
            捨棄 PHP4
            效能改善
    版本控制
            Bitbucket → Github
            加速大家貢獻




2011/11/12                        PHP Conference   61
如果有任何問題都可以到討論區留言
         http://www.codeigniter.org.tw/forum/




2011/11/12              PHP Conference          62
歡迎加入 CodeIgniter 翻譯




2011/11/12          PHP Conference   63
https://github.com/appleboy/PHP-CodeIgniter-Framework-Taiwan


              縮址 : http://goo.gl/5CU9N



 2011/11/12               PHP Conference                 64
Thank You.




2011/11/12      PHP Conference   65

More Related Content

What's hot (20)

PDF
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
Shengyou Fan
 
PDF
Composer 從入門到實戰
Shengyou Fan
 
PDF
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
Shengyou Fan
 
PDF
Composer 套件管理
Shengyou Fan
 
PDF
View 與 Blade 樣板引擎
Shengyou Fan
 
PDF
應用程式部署
Shengyou Fan
 
PDF
COSCUP 2016 Laravel 部署工作坊 - 部署指南
Shengyou Fan
 
PDF
使用者認證
Shengyou Fan
 
PDF
Package 安裝與使用
Shengyou Fan
 
PDF
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
 
PDF
View 與 Blade 樣板引擎
Shengyou Fan
 
PDF
前端工程師一定要知道的 Docker 虛擬化容器技巧
Chu-Siang Lai
 
PDF
CodeIgniter 2.0.X
Bo-Yi Wu
 
PDF
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
 
PDF
Model 設定與 Seeding
Shengyou Fan
 
PDF
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
Shengyou Fan
 
PDF
開發環境建置
Shengyou Fan
 
PDF
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
 
PDF
[PHP 也有 Day #64] PHP 升級指南
Shengyou Fan
 
PDF
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Chu-Siang Lai
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
Shengyou Fan
 
Composer 從入門到實戰
Shengyou Fan
 
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
Shengyou Fan
 
Composer 套件管理
Shengyou Fan
 
View 與 Blade 樣板引擎
Shengyou Fan
 
應用程式部署
Shengyou Fan
 
COSCUP 2016 Laravel 部署工作坊 - 部署指南
Shengyou Fan
 
使用者認證
Shengyou Fan
 
Package 安裝與使用
Shengyou Fan
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
 
View 與 Blade 樣板引擎
Shengyou Fan
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
Chu-Siang Lai
 
CodeIgniter 2.0.X
Bo-Yi Wu
 
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
 
Model 設定與 Seeding
Shengyou Fan
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
Shengyou Fan
 
開發環境建置
Shengyou Fan
 
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
 
[PHP 也有 Day #64] PHP 升級指南
Shengyou Fan
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Chu-Siang Lai
 

Viewers also liked (20)

PDF
Tennistavolo- Classifica finale regionale di società - Zona B
Giuliano Ganassi
 
PPTX
How to choose web framework
Bo-Yi Wu
 
PDF
Introduction to Grunt.js on Taiwan JavaScript Conference
Bo-Yi Wu
 
PPTX
Git Flow and JavaScript Coding Style
Bo-Yi Wu
 
PDF
Gearman work queue in php
Bo-Yi Wu
 
PDF
Introduction to git
Bo-Yi Wu
 
PPTX
Git flow 與團隊合作
Bo-Yi Wu
 
PPTX
Why to choose laravel framework
Bo-Yi Wu
 
PPTX
PHP & JavaScript & CSS Coding style
Bo-Yi Wu
 
PPTX
Write microservice in golang
Bo-Yi Wu
 
PDF
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
PDF
advanced introduction to codeigniter
Bo-Yi Wu
 
PDF
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
Bo-Yi Wu
 
PDF
You must know about CodeIgniter Popular Library
Bo-Yi Wu
 
PPTX
Codeigniter 3.0 之 30 分鐘就上手
Piece Chao
 
PDF
Automating your workflow with Gulp.js
Bo-Yi Wu
 
PDF
雲端入侵:郵件攻擊與密碼竊取
openblue
 
PDF
SQL Injection
Vincent Chi
 
PDF
資安入門
Jyny Chen
 
PPTX
資訊安全入門
Tyler Chen
 
Tennistavolo- Classifica finale regionale di società - Zona B
Giuliano Ganassi
 
How to choose web framework
Bo-Yi Wu
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Bo-Yi Wu
 
Git Flow and JavaScript Coding Style
Bo-Yi Wu
 
Gearman work queue in php
Bo-Yi Wu
 
Introduction to git
Bo-Yi Wu
 
Git flow 與團隊合作
Bo-Yi Wu
 
Why to choose laravel framework
Bo-Yi Wu
 
PHP & JavaScript & CSS Coding style
Bo-Yi Wu
 
Write microservice in golang
Bo-Yi Wu
 
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
advanced introduction to codeigniter
Bo-Yi Wu
 
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
Bo-Yi Wu
 
You must know about CodeIgniter Popular Library
Bo-Yi Wu
 
Codeigniter 3.0 之 30 分鐘就上手
Piece Chao
 
Automating your workflow with Gulp.js
Bo-Yi Wu
 
雲端入侵:郵件攻擊與密碼竊取
openblue
 
SQL Injection
Vincent Chi
 
資安入門
Jyny Chen
 
資訊安全入門
Tyler Chen
 
Ad

Similar to Phpconf 2011 introduction_to_codeigniter (20)

PDF
大话Php之性能
liqiang xu
 
PDF
2012 php conf slide PIXNET 如何使用 php
ronnywang_tw
 
PPT
PHP & AppServ
Ht Wang
 
PDF
Phalcon the fastest php framework 阿土伯
Hash Lin
 
PDF
Phalcon phpconftw2012
Rack Lin
 
PDF
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
PPTX
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Gelis Wu
 
PPTX
Php documentor
Cloud Liao
 
PPTX
Php documentor
Cloud Liao
 
PDF
第四章解答
jiannrong
 
PDF
基于Symfony框架下的快速企业级应用开发
mysqlops
 
PPT
Html01
Ht Wang
 
PDF
rebar erlang 2
致远 郑
 
DOC
部分PHP问题总结[转贴]
wensheng wei
 
PDF
Web development overview
Wei Sun
 
PDF
Symfony簡介
Ricky Su
 
PDF
通用即时到帐接口集成教程 Php版本
abdul_manashi
 
PDF
通用即时到帐接口集成教程 Php版本
abdul_manashi
 
PPTX
Asp.net 5 新功能與變革
Gelis Wu
 
PDF
Demo review
tbmallf2e
 
大话Php之性能
liqiang xu
 
2012 php conf slide PIXNET 如何使用 php
ronnywang_tw
 
PHP & AppServ
Ht Wang
 
Phalcon the fastest php framework 阿土伯
Hash Lin
 
Phalcon phpconftw2012
Rack Lin
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Gelis Wu
 
Php documentor
Cloud Liao
 
Php documentor
Cloud Liao
 
第四章解答
jiannrong
 
基于Symfony框架下的快速企业级应用开发
mysqlops
 
Html01
Ht Wang
 
rebar erlang 2
致远 郑
 
部分PHP问题总结[转贴]
wensheng wei
 
Web development overview
Wei Sun
 
Symfony簡介
Ricky Su
 
通用即时到帐接口集成教程 Php版本
abdul_manashi
 
通用即时到帐接口集成教程 Php版本
abdul_manashi
 
Asp.net 5 新功能與變革
Gelis Wu
 
Demo review
tbmallf2e
 
Ad

More from Bo-Yi Wu (18)

PDF
Drone CI/CD 自動化測試及部署
Bo-Yi Wu
 
PDF
用 Go 語言打造多台機器 Scale 架構
Bo-Yi Wu
 
PDF
Job Queue in Golang
Bo-Yi Wu
 
PDF
Golang Project Layout and Practice
Bo-Yi Wu
 
PDF
Introduction to GitHub Actions
Bo-Yi Wu
 
PDF
Drone 1.0 Feature
Bo-Yi Wu
 
PDF
Drone CI/CD Platform
Bo-Yi Wu
 
PDF
GraphQL IN Golang
Bo-Yi Wu
 
PPTX
Go 語言基礎簡介
Bo-Yi Wu
 
PPTX
drone continuous Integration
Bo-Yi Wu
 
PPTX
Gorush: A push notification server written in Go
Bo-Yi Wu
 
PPTX
用 Drone 打造 輕量級容器持續交付平台
Bo-Yi Wu
 
PPTX
用 Go 語言 打造微服務架構
Bo-Yi Wu
 
PPTX
Introduction to Gitea with Drone
Bo-Yi Wu
 
PDF
運用 Docker 整合 Laravel 提升團隊開發效率
Bo-Yi Wu
 
PDF
用 Go 語言實戰 Push Notification 服務
Bo-Yi Wu
 
PPTX
用 Go 語言打造 DevOps Bot
Bo-Yi Wu
 
PPTX
A painless self-hosted Git service: Gitea
Bo-Yi Wu
 
Drone CI/CD 自動化測試及部署
Bo-Yi Wu
 
用 Go 語言打造多台機器 Scale 架構
Bo-Yi Wu
 
Job Queue in Golang
Bo-Yi Wu
 
Golang Project Layout and Practice
Bo-Yi Wu
 
Introduction to GitHub Actions
Bo-Yi Wu
 
Drone 1.0 Feature
Bo-Yi Wu
 
Drone CI/CD Platform
Bo-Yi Wu
 
GraphQL IN Golang
Bo-Yi Wu
 
Go 語言基礎簡介
Bo-Yi Wu
 
drone continuous Integration
Bo-Yi Wu
 
Gorush: A push notification server written in Go
Bo-Yi Wu
 
用 Drone 打造 輕量級容器持續交付平台
Bo-Yi Wu
 
用 Go 語言 打造微服務架構
Bo-Yi Wu
 
Introduction to Gitea with Drone
Bo-Yi Wu
 
運用 Docker 整合 Laravel 提升團隊開發效率
Bo-Yi Wu
 
用 Go 語言實戰 Push Notification 服務
Bo-Yi Wu
 
用 Go 語言打造 DevOps Bot
Bo-Yi Wu
 
A painless self-hosted Git service: Gitea
Bo-Yi Wu
 

Phpconf 2011 introduction_to_codeigniter

  • 1. 快速上手 CodeIgniter 吳柏毅 Bo-Yi Wu appleboy http://blog.wu-boy.com/ 2011.11.12 2011 PHP Conference
  • 2. 內容皆採用 創用 CC 姓名標示 相同方式分享 3.0 台灣 授權條款
  • 3. $this->load->view('about/me')  瑞昱半導體股份有限公司  Linux Kernel Driver, Sencha Touch Web App.  CodeIgniter 台灣站長 http://codeigniter.org.tw  翻譯線上文件  提交 Patch 給官方 CodeIgniter  個人 Github  https://github.com/appleboy 2011/11/12 PHP Conference 3
  • 4. 本投影片適合尚未使用過 Framework 且對於 PHP 已經有些 基礎的 Web Developer 2011/11/12 PHP Conference 4
  • 5. Why use Framework?  合作方式 ( 不管你是團隊還是 Soho)  程式設計師與程式設計師  程式設計師與前端設計師  加速開發  幫你寫好一堆功能模組 ( 分頁 , 驗證碼 , 多國語系 )  幫你解決安全性問題 ($_GET, $POST ...) 2011/11/12 PHP Conference 5
  • 6. CodeIgniter 與我 在 2009 年 1 月 畢業進入資策會的第 1 份工作 2011/11/12 PHP Conference 6
  • 7. 為了尋找一套適合同事們 一起共同開發的環境架構 (Zend, Cake, Symfony, Yii...) 2011/11/12 PHP Conference 7
  • 8. $this->load->view('Why') 在眾多 Framework 選擇下 為什麼要使用 CodeIgniter 2011/11/12 PHP Conference 8
  • 9. 初學者非用 CodeIgniter 的優勢  懶人安裝方法  架構清楚明瞭  繁體中文文件  基礎 MVC 架構 ( 日後可跳往其它 Framework) 2011/11/12 PHP Conference 9
  • 10. 懶人安裝方法 2011/11/12 PHP Conference 10
  • 11. 下載 + 解壓縮 = 安裝完成 適用於任何作業系統 2011/11/12 PHP Conference 11
  • 12. 真的這麼容易安裝 ?  進入下載網址  http://www.codeigniter.org.tw/downloads  解壓縮檔案  unzip CodeIgniter_2.X.X.zip  輸入網址  http://your_host_name/codeigniter/ 2011/11/12 PHP Conference 12
  • 15. 你還是不要接觸 PHP 會比較好 ( 開玩笑的 ) 2011/11/12 PHP Conference 15
  • 17. CodeIgniter 目錄 application ( 網站主目錄 ) system (CodeIgniter 核心目錄 ) user_guide (CodeIgniter 使用手冊 ) index.php ( 網站主程式 ) 2011/11/12 PHP Conference 17
  • 18. 開發多網站目錄架構 ( 大部份 Framework 做法 ) 2011/11/12 PHP Conference 18
  • 19. 多網站目錄架構 system ( 升級版本只需要換此目錄 ) web_01 application index.php web_02 application index.php 2011/11/12 PHP Conference 19
  • 20. 簡易清楚繁體中文文件 ( 解決初學者對於英文的排斥 ) http://codeigniter.org.tw/user_guide/ 2011/11/12 PHP Conference 20
  • 22. 必讀資料  一般主題  類別參考  CodeIgniter URLs  Database 類別  控制器 (Controllers)  Input 類別  檢視 (Views)  Loader 類別  模型 (Models) 2011/11/12 PHP Conference 22
  • 23. 進階閱讀  一般主題  類別參考 ● 新增程式庫 (Library) ● Email 類別 ● 新增核心類別 ● File Uploading 類別 ● Hooks – 擴充核心 ● Form Validation 類別 ● URI 路由 ● Language 類別 ● Output 類別 ● Pagination 類別 ● Session 類別 2011/11/12 PHP Conference 23
  • 24. 以上就是足以讓大家嘗試的理由 簡單 容易 好上手 2011/11/12 PHP Conference 24
  • 25. 來看看 CodeIgniter 基本 MVC 架構 2011/11/12 PHP Conference 25
  • 26. MVC Architecture Database Layout Model Library Helper View Controller Routing Caching Web Server 2011/11/12 Client Browser PHP Conference 26
  • 28. Hello Appleboy View (views/welcome.php) View <html> <body> Hello <?php echo $username; ?> </body> </html> Controller (controllers/welcome.php) function welcome($id) { Controller $data[‘username’] = $id; $this->load->view(“welcome”, $data); } 2011/11/12 PHP Conference 28
  • 30. 自訂 URL 還在用 Apache 模組 mod_rewrite 自訂特殊 URL 嘛? 2011/11/12 PHP Conference 30
  • 31. CodeIgniter 內建自訂 URL 功能  $route['products/([a-z]+)/(d+)'] = "$1/id_$2"  products/os/1234  呼叫 os controller  傳入參數 id_1234  網站出現重大問題需要停機修復  $route['(:any)'] = "system/fix"  $route['.*'] = “system/fix” 2011/11/12 PHP Conference 31
  • 32. High Performance Framework CodeIgniter 預設不會載入未使用模組 用到時自行載入 2011/11/12 PHP Conference 32
  • 33. High Performance Framework  載入 Library  $this->load->library(array('email', 'table'));  載入 view  $this->load->view('file_name');  載入 model  $this->load->model('model_name');  載入 helper  $this->load->helper('help_name'); 2011/11/12 PHP Conference 33
  • 34. CodeIgniter Cahe System index Cache 存在 Routing Caching Application Controller 2011/11/12 PHP Conference 34
  • 35. Cache 使用方式  Cache 可以寫在 Controller 任意地方  $this->output->cache(n);  n 代表分鐘 2011/11/12 PHP Conference 35
  • 36. Cache 缺點 當 expire time 尚未過期 網頁資訊一定是舊的 2011/11/12 PHP Conference 36
  • 37. CodeIgniter Cache 機制  將 time()+n*60 寫入到 cache 檔案最前面  每次 Request 則取出跟 time() 比對時間  若 cache time > time() 直接輸出 cache file  若 cache time < time() 刪除 cache 並且新增 cache 缺點 : 適用於靜態檔案 2011/11/12 PHP Conference 37
  • 38. 如果用在動態檔案呢 ? 官方無提供刪除 cache 檔案函式 請自行 Patch 程式碼 http://goo.gl/03IrZ $this->output->delete_cache('post/12') $this->output->delete_cache('post/list') 2011/11/12 PHP Conference 38
  • 39. 支援簡單 Command Line CodeIgniter 2.x.x 版本支援 Windows, Linux crontab 搭配背景執行處理 2011/11/12 PHP Conference 39
  • 40. 好處  CLI 去執行您的 cron-jobs 而不需要使用 curl  互動式 "tasks" 工作 , 像是動態改變權限、清除 cache 目錄、執行備份…等。  任意搭配其他程式 , 例如 Perl, C++, Python 2011/11/12 PHP Conference 40
  • 41. 用法 $ php index.php controller method $ php index.php welcome index 2011/11/12 PHP Conference 41
  • 42. 避免網頁執行到 command line  將 corn-jobs 移出 apache 可執行目錄  用 PHP 判斷,確保瀏覽器不能執行 cron-jobs  php_sapi_name() === "cli"  defined('STDIN') 2011/11/12 PHP Conference 42
  • 43. 處理 $_POST,$_GET 資料 if ( ! isset($_POST['user'])) $user = FALSE; else $user = $_POST['user']; $user = (! isset($_POST['user'])) ? FALSE : $_POST['user']; 2011/11/12 PHP Conference 43
  • 44. 不需要這麼麻煩  $_POST 資料  $user = $this->input->post('user');  $_GET 資料  $user = $this->input->get('user');  一起判斷  $user = $this->input->get_post('user');  先找 $_POST['user'], 後找 $_GET['user'] 2011/11/12 PHP Conference 44
  • 45. 避免 XSS 的攻擊  $user = $this->input->post('user', TRUE);  $user = $this->input->get('user', TRUE);  $user = $this->input->get_post('user', TRUE); 2011/11/12 PHP Conference 45
  • 46. 良好的程式設計  善用 === 做判斷  數字請用 intval() 或 (int) 過慮  $id = intavl($id);  $id = (int) $id;  用 is_array, is_int, is_bool, is_string 判斷類型 2011/11/12 PHP Conference 46
  • 47. 表單驗證  $this->form_validation->set_rules('username', ' 帳 號 ', 'trim|required|min_length[5]|max_length[12]| xss_clean');  $this->form_validation->set_rules('password', ' 密 碼 ', 'trim|required|md5');  $this->form_validation->set_rules('email', ' 電子郵 件 ', 'trim|required|valid_email'); 2011/11/12 PHP Conference 47
  • 48. 分頁  $this->load->library('pagination');  $config['base_url'] = 'http://example.com/index.php/test/page/';  $config['total_rows'] = 200;  $config['per_page'] = 20;  $this->pagination->initialize($config);  echo $this->pagination->create_links(); 2011/11/12 PHP Conference 48
  • 49. Email 寄信  多重協定 : Mail , Sendmail , and SMTP  多重收件人  副本 (CC) 和密件副本 (BCCs)  支援 HTML 或者是純文字 (Plaintext) 郵件  附件檔案 2011/11/12 PHP Conference 49
  • 50. 使用方式  $this->load->library('email');  $this->email->from('[email protected]', 'Your Name');  $this->email->to('[email protected]');  $this->email->cc('[email protected]');  $this->email->bcc('[email protected]');  $this->email->subject('Email Test');  $this->email->message('Testing the email class.');  $this->email->send();  echo $this->email->print_debugger(); 2011/11/12 PHP Conference 50
  • 51. 影像縮圖功能  修改影像的尺寸  建立縮圖  影像裁剪  影像旋轉  浮水印  支援 GD/GD2 , NetPBM 以及 ImageMagick 2011/11/12 PHP Conference 51
  • 52. 以上只是一些 CodeIgniter Library 基本介紹 想了解更多功能請上 User Guide http://goo.gl/7PGnW 2011/11/12 PHP Conference 52
  • 53. 光是 CodeIgniter 內建的功能 還不能滿足您嘛? 2011/11/12 PHP Conference 53
  • 55. What is Sparks? Ruby 有 RubyGems Node.js 有 npm CodeIgniter 有 sparks 2011/11/12 PHP Conference 55
  • 56. What is Sparks? Package Management System Making Code Easy to Find, Create, and Distribute 2011/11/12 PHP Conference 56
  • 57. Get Sparks tool Now!! 一行指令就安裝完成 $ php -r "$(curl -fsSL http://getsparks.org/go-sparks)" 2011/11/12 PHP Conference 57
  • 58. Installing Sparks with the Spark Manager http://goo.gl/lHmCX $ php tools/spark install -v1.0.4 google-url-shortener 2011/11/12 PHP Conference 58
  • 59. Load Sparks Library $this->load->spark(google-url-shortener/1.0.4'); $short_url = $this->google_url_api->shorten($url); echo $url . " => " . $short_url->id . "<br />"; 2011/11/12 PHP Conference 59
  • 60. 好用 sparks 介紹  ion_auth http://goo.gl/Au4kM  E-mail 啟動帳號 , 忘記密碼 .. 等  單一帳號多重群組  User/Email 雙重認證選擇  Zend ACL Library 導入權限  搭配 Facebook, Google Auth API 認證  Template http://goo.gl/BN5g6  動態讀取 CSS 或 Javascript 2011/11/12 PHP Conference 60
  • 61. CodeIgniter 重大改變 2009->2011  版本演進 1.7.x → 2.x.x  捨棄 PHP4  效能改善  版本控制  Bitbucket → Github  加速大家貢獻 2011/11/12 PHP Conference 61
  • 62. 如果有任何問題都可以到討論區留言 http://www.codeigniter.org.tw/forum/ 2011/11/12 PHP Conference 62
  • 64. https://github.com/appleboy/PHP-CodeIgniter-Framework-Taiwan 縮址 : http://goo.gl/5CU9N 2011/11/12 PHP Conference 64
  • 65. Thank You. 2011/11/12 PHP Conference 65