[CodeIgniter] Open Source PHP Web Framework 系列講座

update 2009.07.23: 有影音檔可以看了,請點選這裡 7月18日受到 OSSF::自由軟體鑄造場(Open Source Software Foundry)的邀請,在高雄講一場 Open Source PHP Web Framework系列講座 - CodeIgniter (高雄場次) ,我準備了 87 張投影片,包含介紹了 CodeIgniter 目前台灣官方網站的狀況,以及流行 PHP MVC Framework 的比較,大部分時間花在 Controller, Views 身上,還有 helper function, Library Class 教學使用,沒有把 Model 精華部份教完有點可惜,內容可能有點多,一整天六小時的課程把教學消化,好像有點困難了,這也是給我一點警惕,下次教學這部份內容要在改變一下,這樣對於來上課的學員,才不會感到排斥,最後非常感謝酷學園的阿民來幫忙錄影,以及飛亨現場支援,以及讓我有這次機會可以上台分享這幾個月在 CI 上面的使用心得,底下是我這次的上課投影片,如果大家有問題可以到論壇討論,或者是看看繁體中文教學文件,如果對於翻譯教學文件有興趣,可以再跟我聯絡喔。

[SQL] MySQL ROW_NUMBER Simulation

在台大 PTT Database 版看到有人問一個問題,我覺得還不錯,問題如下:網頁版

小弟在練習做一個系統遇到以下問題 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | c | 退選 4 | d | 退選 5 | e | 退選 網頁介面如上(用for迴圈+mysql_fetch_object抓出資料) 報名序號 | 姓名 | 志願1 | 志願2 | 志願3 | 志願4 | 志願5 1001 小王 a b c d e 資料庫欄位內容如上 想請問若使用者想退選志願3~~照理說用update把志願3欄位清掉 網頁再一次抓資料會變成志願3的系所變空的(如下表) 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | | 退選 4 | d | 退選 5 | e | 退選 有沒有辦法在select的時候排除空的那欄 也就是說抓資料的時候,以上述為例,只抓出4筆,變成下表 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | d | 退選 4 | e | 退選

[Read More]

[CodeIgniter] lighttpd rewrite rule && apache mod_rewrite

CodeIgniter 要移除網址列存在的 index.php,apache 必須使用 mod_rewrite 寫入 .htaccess 的方式來達成,lighttpd 也是有支援 rewrite,可以參考官方文件:Module: mod_rewrite,設定方法很容易。

$HTTP["host"] == "mimi.twgg.org" {
  server.document-root = "/var/www/html/MLB/"
  url.rewrite = (
        "^/images/.*$" => "$0",
        "^/includes/.*$" => "$0",
        "^/(.*)$" => "index.php/$1"

  )
  accesslog.filename = "/var/log/lighttpd/mimi.twgg.org-access_log"
}
[Read More]

[Perl] 解決 Wide character in print with UTF-8 mode

最近在寫 Perl 的程式,發現在正規比對的時候,print 出中文資料會出現 “Wide character in print at” 的 warning 訊息,在 google 找到一篇解決方法:Perl with UTF-8 mode,這篇提出的解決方法有很多種,comment 留言也有提供解法,可以去看一下,還蠻不錯的,那底下是我參考的解法: 只要在表頭加上: use utf8; binmode(STDIN, ':encoding(utf8)'); binmode(STDOUT, ':encoding(utf8)'); binmode(STDERR, ':encoding(utf8)'); 完整的檔案如下: #! /usr/bin/perl -w use Carp; use File::Basename; use LWP::Simple; use WWW::Mechanize; use LWP::UserAgent; use WWW::Shorten '0rz'; use Getopt::Std; use DBI; use utf8; binmode(STDIN, ':encoding(utf8)'); binmode(STDOUT, ':encoding(utf8)'); binmode(STDERR, ':encoding(utf8)'); if($_ =~ m/\s*(.+)<\/a><\/div>\s*/) { $pic_desc = $1; print "desc: " . $1 . " \n" [Read More]

[PHP] Gallery 3.0 Beta 1 使用 Kohana MVC Framework

Gallery Gallery 3.0 Beta 1 出來了,在 roga’s blog,看到這篇訊息,gallery 3 捨去 php smaty template engine,而改用 Kohana MVC Framework 這套 base on CodeIgniter 的 Framework,在 Gallery3:FAQ 裡面有提到為什麼會使用 Kohana 這套 MVC,gallery 團隊找尋了許多 MVC 的架構來幫助開發整個相簿系統,包含了 CakePHPZend FrameworkPradoSymfonyCodeIgniter,最後經過許多人的討論,選用了 Kohana 這套 MVC,原本打算考慮 CI 的,雖然 CI 支援 PHP4 跟 PHP5,以及它非常的小,對於效能方面也非常的好,但是並不支援 PHP5 的 exception,畢且有些少數的 Structure 只有支援 PHP4,所以就不被他們採納了,再來 Zend Framework 因為包含了 1705 個檔案,相當龐大,效能比 CI 少了 200-300%,雖然 ZF 文件相當豐富,不過沒有良好的 example 範例,所以導致 gallery 團隊遇到很多挫折,XDD。 最後選擇了 Kohana,雖然 Kohana 效能輸給 CI,不過這之間的差異極小,Kohana 也有 support PHP5 的 exception,Kohana 文件比 CI 還要少了些,不過對 gallery 團隊已經相當足夠了。底下有一篇各大 Framework 的效能比較:PHP framework comparison benchmarks,還有另一篇:Kohana vs CodeIgniter: Speed and Memory Usage Performance Benchmark

[PHP] FreeBSD Sphinx 繁體中文全文檢索 on PHP

sphinx 最近想說幫之前替代役單位來把全文檢索的中文部份搞定,所以找了一些全文檢索的 open source,挑了這套網路上評價還不錯的 Sphinx,目前 Sphinx 支援的作業系統如下:

  • Linux 2.4.x, 2.6.x (various distributions)
  • Windows 2000, XP
  • FreeBSD 4.x, 5.x, 6.x
  • NetBSD 1.6, 3.0
  • Solaris 9, 11
  • Mac OS X 雖然上面寫 FreeBSD 只支援到 6.X,但是我測試是在 FreeBSD 7.1-RELEASE-p6 的環境,所以相當 ok 的,底下是我安裝在 FreeBSD 的心得筆記,PHP 官網上面有支援

Search Engine Extensions 的介紹,包含了 mnoGoSearchSphinx — Sphinx Client、Swish — Swish Indexing,可以利用 pecl 來安裝 Sphinx,目前版本:0.9.9-rc1。

[Read More]

[MySQL] 利用 perl 單行印出 my.cnf

在 MySQL Performance Blog 裡面發現這篇:How to pretty-print my.cnf with a one-liner,利用一行 perl 指令把 my.cnf 的註解拿掉: perl -ne 'm/^([^#][^\s=]+)\s*(=.*|)/ && printf("%-35s%s\n", $1, $2)' /etc/my.cnf 輸出為: [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock skip-locking key_buffer = 256M max_allowed_packet = 1M table_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size = 16M thread_concurrency = 8 log-slow-queries = /var/log/mysql/mysql-slow. [Read More]

[jQuery] 驗證表單實作筆記 API/1.3/Selectors

驗證 form 表單屬於前端的工作,非常重要,避免使用者填錯格式,當然在 jQuery Plugin 可以找到專門驗證表單的外掛:jQuery plugin: Validation,此外掛不能相容於 IE 6,會沒辦法呈現效果,google 到一篇解決方法:Validating not happening in IE6 & no error removal on keyup,這篇裡面提到,必須使用 un-packed and un-minified 的版本,也就是沒有壓縮過的 javascript 檔案,不過我自己沒有試過就是了,底下針對表單的 checkbox select input radio 欄位做檢查的筆記,可以讓大家參考看看。 在 jQuery 1.3 裡面正式拿掉 [@attr] 的寫法,所以以前寫 $(“input:radio[@name=reg_sex]”) 都要改成 $(“input:radio[name=reg_sex]”),這樣才是正確的,可以參考 jQuery Selector 這篇的 Attribute Filters 部份,先來一篇網路上實做提示說明在 text 來未:jQuery: show plain text in a password field and then make it a regular password field on focus 作法很簡單:建立兩個輸入 password 的 text input 欄位:

[Read More]