CakePHP 2.x CookBook 中文版 第二章 安装
安裝
CakePHP 很容易安裝。最小安裝只要有一個 web 服務(wù)器和一份 Cake 的副本,就足夠了!本手冊主要聚焦于在 Apache 上安裝 Cake(因為 Apache 最通用), 你也可以在 LightHTTPD 或者 Microsoft IIS 之類的 web 服務(wù)器上配置運行 Cake。
必備的軟件
- HTTP 服務(wù)器。例如: Apache。 mod_rewrite 是推薦選擇的, 但不是必須的。
- PHP 5.2.8 或更高版本。
數(shù)據(jù)庫引擎不是必須的,但是我們認為很多應(yīng)用程序?qū)⑹褂盟akePHP 支持如下數(shù)據(jù)庫引擎:
- MySQL (4 或更高版本)
- PostgreSQL
- Microsoft SQL Server
- SQLite
注意:所有內(nèi)置的驅(qū)動都需要 PDO。你需要確定你已經(jīng)正確安裝了 PDO 擴展。
許可
CakePHP 的許可是基于 MIT license 的。這意味著你能夠在保持版權(quán)聲明完整的前提下自由的修改、分發(fā)和重發(fā)布其源碼。 你也可以在商業(yè)或封閉源代碼的應(yīng)用程序中包含 CakePHP。
下載 CakePHP
有兩種主要途徑用來獲得 CakePHP 的最新副本。你可以從主站下載(有三種格式:zip/tar.gz/tar.bz2), 或者從 git 倉庫中檢出代碼。
要想下載最新的主版本,訪問主站 http://www.cakephp.org 并且點擊 “Download Now” 鏈接。
全部當前版本都寄存在 Github 上。Github 收藏了全部的 CakePHP,并且還包含了許多的 CakePHP 的插件。 有效的 CakePHP 版本在 Github downloads 。
另外,你也可以獲取最新的帶有全部 bug 修正的每分鐘提交的源代碼。 這可以訪問 Github 倉庫并克隆副本:
git clone git://github.com/cakephp/cakephp.git權(quán)限
CakePHP 的一些不同操作需要使用 app/tmp 目錄:模塊描述、視圖緩存和 session 信息等。
因此,你需要確定 web 服務(wù)器用戶擁有 cake 安裝目錄下的 app/tmp 目錄和它的全部子目錄的寫權(quán)限。
設(shè)置
CakePHP 可以極其簡單地布署在 web 服務(wù)器的文檔根目錄中,也可以以你所期望的方式靈活復(fù)雜地進行布署。 這一節(jié)將覆蓋 CakePHP 的三種主要安裝類型: 開發(fā)、產(chǎn)品和高級。
- 開發(fā):最容易進行。應(yīng)用程序的 URLs 包括 CakePHP 的安裝目錄名,安全級別低。
- 產(chǎn)品:包括配置 web 服務(wù)器的文檔根目錄的能力、整潔的 URL,非常安全。
- 高級: 帶有許多配置,允許你將 CakePHP 的關(guān)鍵目錄放在文件系統(tǒng)的不同位置,可以在多個 CakePHP 應(yīng)用程序間共享同一個 CakePHP 內(nèi)核庫文件夾。
開發(fā)
開發(fā)安裝是設(shè)置 Cake 的最快方法。 本例將幫助你安裝一個 CakePHP 應(yīng)用程序,并使其在http://www.example.com/cake_2_0/ 地址上生效。 我們假定你的文檔根目錄是在 /var/www/html 。
將 Cake 壓縮文件的內(nèi)容解壓到 /var/www/html。現(xiàn)在在文檔根目錄中有了一個以下載的版本為后綴命名的文件夾(例如 cake_2.0.0)。 將這個文件夾改名為 cake_2_0. 你的開發(fā)安裝在文件系統(tǒng)看起來結(jié)構(gòu)就像下面這樣:
/var/www/html/cake_2_0/app/lib/plugins/vendors/.htaccessindex.phpREADME如果 web 服務(wù)器配置正確,現(xiàn)在就可以通過 http://www.example.com/cake_2_0/ 訪問你的 Cake 應(yīng)用程序了。
多個應(yīng)用程序使用同一份 CakePHP
如果你開發(fā)幾個應(yīng)用程序,常常會感覺需要在它們之間共享一份 CakePHP 核心副本。有幾個辦法能達到這個目的。最簡單的是使用 PHP 的 include_path。 首先,克隆 CakePHP 到一個目錄。本示例中,我們使用 ~/projects :
git clone git://github.com/cakephp/cakephp.git ~/projects/cakephp這會把 CakePHP 克隆至 ~/projects 目錄。如果不想使用 git,你可以下載 zip 包,其余的步驟是相同的。 接下來,你需要找到并編輯你的 php.ini 文件。 在 *nix 系統(tǒng)中,常常會是 /etc/php.ini,可以使用 php -i 查找 ‘載入的配置文件’。 一旦你找到正確的 ini 文件,編輯 include_path 選項,使其包含 ~/projects/cakephp/lib。 例如:
include_path = .:/home/mark/projects/cakephp/lib:/usr/local/php/lib/php然后,啟動 web 服務(wù),在 phpinfo() 中能夠看到這些修改的結(jié)果.
注解
如果使用 windows 系統(tǒng),包含路徑的分隔符就是 ;(半角分號),而不是 :(半角冒號)。
完成了 include_path 設(shè)置,應(yīng)用程序就能夠自動找到 CakePHP。
產(chǎn)品
產(chǎn)品安裝是配置 Cake 的更靈活的方法。 這種方式允許整個域作為 CakePHP 應(yīng)用程序。 本示例將幫助你在文件系統(tǒng)的任意位置安裝 Cake,并且使其在 http://www.example.com 生效。 需要注意的是,這種安裝可能需要改變 Apache web 服務(wù)器的 DocumentRoot 。
將 Cake 壓縮包的內(nèi)容解壓到你選擇的目錄。在本救命中,我們假定你選擇將 Cake 安裝到 /cake_install。 你的產(chǎn)品安裝的文件夾結(jié)構(gòu)類似下面這樣:
/cake_install/app/webroot/ (this directory is set as the ``DocumentRoot``directive)lib/plugins/vendors/.htaccessindex.phpREADME程序員需要將 Apache 域名的 DocumentRoot 指向到安裝目錄:
DocumentRoot /cake_install/app/webroot如果 web 服務(wù)器配置正確,將可以在 http://www.example.com 訪問你的 Cake 應(yīng)用程序。
高級安裝和服務(wù)器精確配置
高級安裝
某些情況下,你希望將 CakePHP 的各個目錄放在文件系統(tǒng)的不同位置。 這可能是由于共享主機的約束,或者是多個應(yīng)用程序想要共享同一份 Cake 庫。 這一節(jié)描述了如何跨文件系統(tǒng)鋪設(shè) CakePHP 目錄。
首先,需要了解 Cake 應(yīng)用程序的三個主要組成部分:
這些文件中的每一個都可以被放置在文件系統(tǒng)的任意位置,web 根目錄例外,它需要通過 web 服務(wù)器訪問。 你甚至可以將 web 根目錄移出 app 文件件,只要你告訴 Cake 它在哪兒。
為了配置 CakePHP 安裝,你需要修改如下幾個文件。
- /app/webroot/index.php
- /app/webroot/test.php (如果你使用 測試 特性。)
有三個內(nèi)容需要編輯: ROOT, APP_DIR, 和 CAKE_CORE_INCLUDE_PATH 。
- ROOT 用來設(shè)置包含 app 文件夾的路徑。
- APP_DIR 用來設(shè)置 app 文件夾的(基本)名稱。
- CAKE_CORE_INCLUDE_PATH 用來設(shè)置 CakePHP 庫文件夾的路徑。
讓我們通過運行一個示例向你展示實踐中是如何進行高級安裝的。假設(shè)我想設(shè)置 CakePHP 按如下方式工作:
- CakePHP 核心庫放置在 /usr/lib/cake 文件夾。
- 我的應(yīng)用程序 web 根目錄放置在 /var/www/mysite/ 文件夾。
- 我的應(yīng)用程序的 app 文件夾放置在 /home/me/myapp 文件夾。
對于這種類型的安裝,我需要編輯 webroot/index.php 文件(本示例中,內(nèi)容添加在 /var/www/mysite/index.php 的尾部),看上去就像下面這樣:
// /app/webroot/index.php (節(jié)選,注釋已經(jīng)被移除)if (!defined('ROOT')) {define('ROOT', DS . 'home' . DS . 'me'); }if (!defined('APP_DIR')) {define ('APP_DIR', 'myapp'); }if (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', DS . 'usr' . DS . 'lib'); }推薦使用 DS 常量作為文件路徑的分隔符。這可以防止因使用了錯誤的分隔符造成的那些文件找不到的問題,并且使代碼的可移植性更高。
Apache 和 mod_rewrite(以及 .htaccess)
當 CakePHP 被構(gòu)建成基于 mod_rewrite 工作時(通常都是這樣),我們注意到一些用戶努力地去做一切能使他們的系統(tǒng)更好的運行的事情。
有幾件可能會使運行良好的事,你應(yīng)該嘗試一下。 首先看看 httpd.conf (確定你編輯的是系統(tǒng)的 httpd.conf,而不是用戶的或特定站點的)。
確定 .htaccess 被允許覆蓋,并且 DocumentRoot 的 AllowOverride 被正確設(shè)置為 All。你應(yīng)該看到如下的內(nèi)容:
# Each directory to which Apache has access can be configured with respect # to which services and features are allowed and/or disabled in that # directory (and its subdirectories). # # First, we configure the "default" to be a very restrictive set of # features. # <Directory />Options FollowSymLinksAllowOverride All # Order deny,allow # Deny from all </Directory>確定已經(jīng)正確地加載了 mod_rewrite。應(yīng)該能看到如下的內(nèi)容:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so在很多系統(tǒng)里,這些默認是被注釋掉的(行的起始是一個 #),這時你只需要刪除起始的 # 符號。
修改完成后,重啟 Apache 并確定設(shè)置已經(jīng)生效。
檢測你的 .htaccess 是不是真的在正確的目錄中。
在拷貝過程可能會發(fā)生這樣一種情況,因為某些操作系統(tǒng)隱藏了以 . 開頭的文件,以致看不到它的拷貝副本。
確定你的 CakePHP 副本來自本站的 Downloads 一節(jié)指定的站點或 Git 倉庫,并已經(jīng)被正確地解壓(通過檢查 .htaccess 文件)。
Cake 根目錄(需要拷貝到你的文檔,重定向每件事物到 Cake app):
<IfModule mod_rewrite.c>RewriteEngine onRewriteRule ^$ app/webroot/ [L]RewriteRule (.*) app/webroot/$1 [L] </IfModule>Cake app 目錄(拷貝到應(yīng)用程序的頂級目錄)
<IfModule mod_rewrite.c>RewriteEngine onRewriteRule ^$ webroot/ [L]RewriteRule (.*) webroot/$1 [L] </IfModule>Cake webroot 目錄(拷貝到應(yīng)用程序的 webroot 目錄)
<IfModule mod_rewrite.c>RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [QSA,L] </IfModule>如果 CakePHP 站點仍然有 mod_rewrite 方面的問題,可能需要試著編輯虛擬主機的設(shè)置。 在 ubuntu 中,編輯 /etc/apache2/sites-available/default 文件(在它的頒發(fā)依賴中可以找到)。 在這個文件中,將 AllowOverrideNone 改成 AllowOverride All,你將會有:
<Directory />Options FollowSymLinksAllowOverride All </Directory> <Directory /var/www>Options Indexes FollowSymLinks MultiViewsAllowOverride AllOrder Allow,DenyAllow from all </Directory>在 Mac OSX,或者其它解決方案中,使用虛擬主機工具確保虛擬主機指向了你的 web 根目錄。
對于更多的主機服務(wù)(GoDaddy,1and1),你的 web 服務(wù)器實際上使用了用戶目錄來服務(wù),并且已經(jīng)應(yīng)用了 mod_rewrite。如果你把 CakePHP 安裝在用戶目錄中(http://example.com/~username/cakephp/) 或其它已經(jīng)應(yīng)用了 mod_rewrite 的 URL 結(jié)構(gòu),你需要在 CakePHP 所用的 .htaccess(/.htaccess,/app/.htaccess, /app/webroot/.htaccess) 中添加 RewriteBase 語句。
也能加入 RewriteEngine 指令到同一節(jié)中,那么 web 根目錄的 .htaccess 看起來就會像下面這樣:
<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /path/to/cake/appRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [QSA,L] </IfModule>修改的具體情況依賴于實際的設(shè)置,還可以包含與 CakePHP 無關(guān)的其它內(nèi)容。更多信息請參考 Apache 在線文檔。
漂亮的 URL 與 nginx
nginx 是一款流行的服務(wù)器軟件,它比 Apache 使用的系統(tǒng)資源更少。 它的缺點是不能像 Apache 那樣使用 .htaccess 文件, 它必須在可訪問站點的配置中建立一些重寫的 URL。 依賴于你的配置,你必須編輯這些,至少你需要讓 PHP 以 FastCGI 實例的方式運行。
server {listen 80; server_name www.example.com; rewrite ^(.*) http://example.com$1 permanent; }server {listen 80; server_name example.com; # root directive should be globalroot /var/www/example.com/public/app/webroot/; access_log /var/www/example.com/log/access.log; error_log /var/www/example.com/log/error.log; location / {index index.php index.html index.htm; try_files $uri $uri/ /index.php?$uri&$args; }location ~ \.php$ {include /etc/nginx/fcgi.conf; fastcgi_pass 127.0.0.1:10005; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }基于IIS7 的 URL 重寫(Windows 主機)
IIS7原生是不支持 .htaccess的。一些插件可以添加這種支持,也可以用 CakePHP 自帶的 rewrite 向 IIS 導(dǎo)入 htaccess 規(guī)則。步驟如下:
也可以使用 IIS Rewrite 模塊的導(dǎo)入功能從 CakePHP 的根目錄、/app/ 及 /app/webroot目錄中的 .htaccess 直接導(dǎo)入規(guī)則——雖然一些 IIS 的編輯必須要得到這些工作。使用這種方式導(dǎo)入規(guī)則,IIS 將自動建立 web.config 文件。
一旦帶有正確的對 IIS 友好的 rewrite 規(guī)則的 web.config 文件,CakePHP 的鏈接、js、css 和路由都會正確的工作。
漂亮的 URLs 和 Lighttpd
注意: 以下內(nèi)容為2.0幫助文件中的內(nèi)容,2.3已經(jīng)刪除了這一部分。 –譯者注
雖然 Lighttpd 包含 rewrite 模塊,但是它不同于 Apache 的 mod_rewrite。為了在使用 Lighty 獲取“漂亮的 URLs”,你有兩個選擇。一是使用 mod_rewrite,二是通過使用 LUA 腳本和 mod_magnet。
使用 mod_rewrite:獲得“漂亮的 URLs”的最快的方法是在 Lighty 的配置中添加如下腳本。再編輯一下URL,就應(yīng)該沒問題了。需要注意的是當 CakePHP 安裝在子文件夾時這種方法無效。
$HTTP["host"] =~ "^(www\.)?example.com$" {url.rewrite-once = (# if the request is for css|files etc, do not pass on to Cake"^/(css|files|img|js)/(.*)" => "/$1/$2","^([^\?]*)(\?(.+))?$" => "/index.php/$1&$3",)evhost.path-pattern = "/home/%2-%1/www/www/%4/app/webroot/" }使用 mod_magnet:和 CakePHP、Lighttpd 一起使用“漂亮的 URLs”,在 /etc/lighttpd/cake中放置如下 LUA 腳本。
-- little helper function function file_exists(path)local attr = lighty.stat(path)if (attr) thenreturn trueelsereturn falseend end function removePrefix(str, prefix)return str:sub(1,#prefix+1) == prefix.."/" and str:sub(#prefix+2) end-- prefix without the trailing slash local prefix = ''-- the magic ;) if (not file_exists(lighty.env["physical.path"])) then-- file still missing. pass it to the fastcgi backendrequest_uri = removePrefix(lighty.env["uri.path"], prefix)if request_uri thenlighty.env["uri.path"] = prefix .. "/index.php"local uriquery = lighty.env["uri.query"] or ""lighty.env["uri.query"] = uriquery .. (uriquery ~= "" and "&" or "") .. "url=" .. request_urilighty.env["physical.rel-path"] = lighty.env["uri.path"]lighty.env["request.orig-uri"] = lighty.env["request.uri"]lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]end end -- fallthrough will put it back into the lighty request loop -- that means we get the 304 handling for free. ;)注意: 如果要在子文件夾中運行 CakePHP 安裝,要在上面的腳本中設(shè)置 prefix = ‘subdirectory_name’。
然后通知 Lighttpd 你的虛擬主機是什么:
$HTTP["host"] =~ "example.com" {server.error-handler-404 = "/index.php"magnet.attract-physical-path-to = ( "/etc/lighttpd/cake.lua" )server.document-root = "/var/www/cake-1.2/app/webroot/"# Think about getting vim tmp files out of the way toourl.access-deny = ("~", ".inc", ".sh", "sql", ".sql", ".tpl.php",".xtmpl", "Entries", "Repository", "Root",".ctp", "empty") }點燃它
讓我們再來看看 CakePHP 的最佳實踐。 依靠這些配置,再把你的瀏覽器指向 http://example.com/ 或者http://example.com/cake_install/ 。 現(xiàn)在,將會看到 CakePHP 的默認主頁,并有一條告知你當前數(shù)據(jù)庫配置狀態(tài)的消息。
恭喜!你已經(jīng)完成了 建立第一個 CakePHP 應(yīng)用程序的 課程。
沒能正常工作?如果你看到了關(guān)于時區(qū)錯誤的信息,取消 app/Config/core.php 中如下這一行的注釋
/*** Uncomment this line and correct your server timezone to fix* any date & time related errors.*/date_default_timezone_set('UTC');轉(zhuǎn)載于:https://www.cnblogs.com/matchless/archive/2012/12/28/2837677.html
總結(jié)
以上是生活随笔為你收集整理的CakePHP 2.x CookBook 中文版 第二章 安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hibernate 高级映射 --张国亮
- 下一篇: Ubuntu配置上位机Blackfin开