安裝

第一節

引言

您現在應該已經理解CakePHP函式庫的目錄結構和用途。也可能您直接略過前幾章來到這裡,壓根不想理會那些理論,只想開始馬上開始玩? 無論如何,準備開始把你的手弄髒吧!

本章會說明伺服器上需要安裝那些東西、以不同的方式設定伺服器、 下載和安裝CakePHP、開啟預設的CakePHP網頁。再教一些在某些事不照排理出牌時,還能找到問題的小技巧。

第二節

需求

為了使用CakePHP,您必須擁有一台安裝了所有函式庫和應用程式的伺服器以執行CakePHP:

伺服器需求

這兒列出能執行CakePHP的伺服器最低需求:

  1. 一套HTTP伺服器 (如Apache) ,啟動以下功能:sessions, mod_rewrite (非絕對需要,但最好有)。

  2. PHP 4.3.2 以上的版本。是的,CakePHP可以在PHP 4 或 5 正常執行。

  3. 一套資料庫引擎 (目前支援MySQL, PostgreSQL 與ADODB)。

第三節

安裝 CakePHP

取得最新的穩定版本

有幾種安心取得CakePHP的方法:由CakeForge取得穩定版本,取得每晚重建版,或由SVN取得最新的開發中版本。

要下載穩定版本, 請到http://cakeforge.org/projects/cakephp/ 找檔案區。

要取得每晚重建版,可由http://cakephp.org/downloads/index/nightly 取得。 每晚重建版是穩定的版本,而且常常修正穩定版本的bug。

由SVN取得最近的開發中版本,使用你偏好的SVN程式連到 https://svn.cakephp.org/repo/trunk/cake/ 然後選一個版本下載。

解開檔案封包

現在您應該已經取得最近的版本了,把這個經過壓縮的封包放到web server的webroot上。 接下來要做的是解開CakePHP封包檔,解開後的目錄可用二個方案配置: 開發環境方案,可以在一個網域中輕易的流覽多個CakePHP應用程式; 產品方案,在一個網域中只允許一個CakePHP應用程式存在。 第一種方案只建議在開發環境中使用,因為它比較不安全。 第二種安裝方案比較安全,可以用在產品的環境。

註:/app/tmp 資料匣必須設定成可以讓執行web server的使用者寫入。

第四節

安裝CakePHP

開發環境方案

如果是要開發程式,我們可以把整個Cake安裝目錄放置到DocumentRoot內,像這樣:

/wwwroot
    /cake
        /app
        /cake
        /vendors
        .htaccess
        index.php

wwwroot 資料匣指的就是web的根目錄。在這種方案中,URL看起來會像這樣(如果有使用 mode_rewrite):

www.example.com/cake/controllerName/actionName/param1/param2

產品方案

你必須有權改變伺服器內的DocumentRoot設定才能使用產品方案安裝。 安裝後會讓整個網域運作起來很像只有一個CakePHP應用程式在跑。

產品方案的目錄結構如下:

../path_to_cake_install /app /config /controllers /models /plugins /tmp /vendors /views /webroot <-- 這裡就是新的DocumentRoot所在 .htaccess index.php /cake /vendors .htaccess index.php

產品方案中建議的httpd.conf設定方式

DocumentRoot /path_to_cake/app/webroot

這樣的設定會把webroot目錄當成網站的根目錄,此時URL就變成下面這樣(如果有使用 mod_rewrite):

http://www.example.com/controllerName/actionName/param1/param2

進階方案: 另一種安裝方式

有些狀況您會想要把Cake的目錄放在磁碟的其他地方。 原因可能來自分享主機的限制,或者你想讓不同的應用程式分享同一個Cake函式庫。

Cake應用程式有三大部分:

  1. CakePHP 核心函式庫 – 放在/cake

  2. 應用程式程式碼 (如 controllers, models, layouts 和 views) – 放在/app

  3. 應用程式的webroot 檔 (如圖片, javascript 和 css) – 放在/app/webroot

除了webroot目錄必須放在web伺服器可存取的地方外,其餘目錄可在檔案系統中可任意放置。 甚至可以把webroot目錄移出app資料匣,只要您事先告訴Cake放置的位置即可。

要把Cake設定成您選擇的配置,必須修改/app/webroot/index.php (隨Cake發佈的位置)。 您需要修改三個常數:ROOT,APP_DIR和CAKE_CORE_INCLUDE_PATH。

  1. ROOT 設定成含有app資料匣的位置

  2. APP_DIR 設定成 app 資料匣的位置

  3. CAKE_CORE_INCLUDE_PATH 設定成放置Cake函式庫的資料匣.

/app/webroot/index.php (移除了一些說明)

if (!defined('ROOT'))
{
    define('ROOT', dirname(dirname(dirname(__FILE__))));
}

if (!defined('APP_DIR'))
{
    define ('APP_DIR', basename(dirname(dirname(__FILE__))));
}

if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
    define('CAKE_CORE_INCLUDE_PATH', ROOT);
}

如果還是不太明白,下面再舉一個例子。如果我要讓Cake以下面的配置運作:

  1. 我想讓Cake函式庫和其他應用程式共用,且放在/usr/lib/cake

  2. 我的Cake webroot 目錄必須是/var/www/mysite/

  3. 我的應用程式檔案會放在/home/me/mysite

檔案配置看起來會像這樣:
/home
    /me
        /mysite                  <-- 原本是/cake_install/app
            /config
            /controllers
            /models
            /plugins
            /tmp
            /vendors
            /views
            index.php
/var
    /www
        /mysite                  <-- 原本是/cake_install/app/webroot
            /css
            /files
            /img
            /js
            .htaccess
            css.php
            favicon.ico
            index.php
/usr
    /lib
        /cake                    <-- 原本是/cake_install/cake
            /cake
                /config
                /docs
                /libs
                /scripts
                app_controller.php
                app_model.php
                basics.php
                bootstrap.php
                dispatcher.php
            /vendors
 

需求定好後,編輯放在webroot的index.php檔(這個範例中應該是在/var/www/mysite/index.php),讓它看起來像這樣:

建議使用'DS'取代分隔目錄名稱的斜線,而不要直接使用斜線。 如此可以防止打錯分格符號而出現'missing file'的錯誤,更可以讓程式更具可移植性。

if (!defined('ROOT'))
{
    define('ROOT', DS.'home'.DS.'me');
}

if (!defined('APP_DIR'))
{
    define ('APP_DIR', 'mysite');
}

if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
    define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
}

第五節

設定 Apache 和 mod_rewrite

由於CakePHP使用到mod_rewrite功能,我們就發現少數的使用者,因為沒有設定好這項功能,而無法順利的在他們的系統中玩CakePHP。 這裡有幾點注意事項要注意:

  1. 確認有允許覆蓋使用目錄下的.htaccess 檔: 在 httpd.conf 中可以找到某區用於設定每個目錄的存取狀況。 確認我們安裝的目錄中,AllowOverride 是設定成 All

  2. 確定您編輯的是系統使用的httpd.conf 而不是使用者或網站自有的httpd.conf。

  3. 有時候你取得的CakePHP會缺少.htaccess檔。 原因可能是一些作業系統把'.' 開頭的檔隱藏起來而沒有復製到。 請確認您的CakePHP是由我們指定的地點下載的。

  4. 確定mod_rewrite有被正被的載入! 在httpd.conf中應該會找到類似LoadModule rewrite_module libexec/httpd/mod_rewrite.so AddModule mod_rewrite.c的文字。 注意這些文字沒有被加上註解符號。

  5. 如果您將Cake安裝在使用者目錄 (http://example.com/~myusername/),則必須修改Cake安裝目錄下的.htaccess內容。 只要加" RewriteBase /~myusername/ "。

  6. 如果因為某些原因,你的URL被加上了一個很長的匿名session ID
    http://example.com/posts/?CAKEPHP=4kgj577sgabvnmhjgkdiuy
    ,則可以在安裝根目錄中的.htaccess 加上" php_flag session.trans_id off "。

第六節

確認它的運作情形

讓我們看看這寶貝是否能正常運作。依您使用的安裝方案,將瀏覽器指向http://www.example.com 或 http://www.example.com/cake。 此時,應該會出現CakePHP預設網頁,和一些告訴你目前資料庫連線狀態的訊息。

恭喜! 您可以開始建立第一個Cake應用程式了。


附錄:讀者筆記

小錯字 

水說:安裝 第五節 1. 確認有允許複蓋使用目錄下... 應為 1. 確認有允許覆蓋使用目錄下...

Clar回答說:修正~

小錯字 

水說:安裝 第六節 將流覽器指向... 應為 將瀏覽器指向... 對不起,一直挑錯字 ^^"

Clar回答說:修正~ 我是白字王, 請原諒我~

水回答說:那...可以繼續改錯字嗎 @@

Clar回答說:當然! 這是一定要的!

URL上出現Session ID? 

小瓜呆說:我依照第五節的方法, 改了.htacess, 可是沒有用, 怎麼辦?

Clar回答說:我沒用這個方法, 我直接去改php.ini, 把 session.use_trans_sid = 0 就行了, 參考一下.

目錄結構亂了 

Lingb說:這句話==>產品方案的目錄結構如下: 下面的那個目錄結構亂了 我用的瀏覽器是 Firefox 2.0.0.14