《PHP應(yīng)用:ThinkPHP的SAE開發(fā)相關(guān)注意事項詳解》要點:
本文介紹了PHP應(yīng)用:ThinkPHP的SAE開發(fā)相關(guān)注意事項詳解,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:thinkphp教程
本文詳細(xì)講述了ThinkPHP的SAE開發(fā)相關(guān)注意事項.分享給大家供大家參考,具體如下:PHP學(xué)習(xí)
ThinkPHP的SAE開發(fā)和標(biāo)準(zhǔn)版本的ThinkPHP基本一樣,你無需了解SAE的接口用法,ThinkPHP的SAE引擎已經(jīng)自動為你整合了SAE的接口,只要掌握ThinkPHP開發(fā),你就能輕松掌握基于ThinkPHP的SAE開發(fā).PHP學(xué)習(xí)
下面是我們給出的一些利用SAE引擎開發(fā)過程的一些注意事項,能夠幫助你更好的完成SAE的開發(fā)和部署.PHP學(xué)習(xí)
配置PHP學(xué)習(xí)
SAE引擎運行時擁有SAE自己的慣例配置和專有配置,因此配置文件加載順序為:PHP學(xué)習(xí)
慣例配置->項目配置->SAE慣例配置->SAE專有配置PHP學(xué)習(xí)
SAE慣例配置和SAE專有配置中的配置項將會覆蓋項目配置.
SAE慣例配置:位于 引擎目錄/Sae/Conf/convention_sae.php,其中定義了程序在SAE上運行時固定的數(shù)據(jù)庫連接配置項.
SAE專有配置:位于項目的Conf目錄下,文件名為config_sae.php,大家可以將針對SAE的配置寫到其中.PHP學(xué)習(xí)
注:SAE慣例配置和SAE專有配置是針對SAE環(huán)境的獨有配置,在本地運行時將不會加載.PHP學(xué)習(xí)
數(shù)據(jù)庫PHP學(xué)習(xí)
開發(fā)者不需要在項目配置文件(config.php)中定義和SAE相關(guān)的數(shù)據(jù)庫配置項,只需要定義本地調(diào)試時連接的數(shù)據(jù)庫即可.代碼提交到SAE時無需修改任何配置項也能運行,因為SAE慣例配置會自動覆蓋你的項目配置文件中的數(shù)據(jù)庫配置.PHP學(xué)習(xí)
代碼在SAE上運行時會進(jìn)行分布式數(shù)據(jù)庫連接,并讀寫分離.PHP學(xué)習(xí)
緩存PHP學(xué)習(xí)
在SAE開發(fā)過程中,你仍然可以使用ThinkPHP內(nèi)置的緩存方法進(jìn)行處理.下面是SAE引擎使用不同的緩存方法在本地和SAE平臺下的區(qū)別(注意這個區(qū)別SAE引擎會自動判斷處理):PHP學(xué)習(xí)
緩存方法 | 本地運行 | SAE平臺 |
S緩存 | 默認(rèn)使用File方式實現(xiàn) | 固定使用Memcache實現(xiàn),所以在SAE下 DATA_CACHE_TYPE配置項將失效.你如果需要使用SAE提供的Mecache服務(wù),直接使用S函數(shù)就可以 |
F緩存 | 使用File實現(xiàn) | 使用KVDB實現(xiàn) |
靜態(tài)緩存 | 生成靜態(tài)Html文件 | 靜態(tài)文件存入KVDB中 |
SQL隊列 | 支持File、Xcache和APC方式 | 使用KVDB存儲 |
新版的ThinkPHP支持SQL緩存隊列功能,我們可以配置DB_SQL_BUILD_CACHE 開啟SQL語句解析緩存.在SAE平臺下固定使用KVDB存儲SQL緩存,因此DB_SQL_BUILD_QUEUE配置項將不起作用.并且在SAE下運行時會用Counter服務(wù)記錄SQL緩存列隊出隊次數(shù),在Counter的管理后臺PHP學(xué)習(xí)
http://sae.sina.com.cn/?m=counterPHP學(xué)習(xí)
如果你看到計算器名稱為think_queue_out_times 的數(shù)值很大,說明你設(shè)置的隊列個數(shù)太小,需要調(diào)整DB_SQL_BUILD_LENGTH 配置項.PHP學(xué)習(xí)
文件上傳PHP學(xué)習(xí)
文件上傳仍然使用UploadFile擴(kuò)展類庫上傳文件,使用方法不變.同樣的代碼在本地運行時將會上傳到指定的目錄,在SAE上運行時就會自動使用Storage服務(wù),將文件上傳到指定的Storage中.首先你需要在SAE平臺上創(chuàng)建一個Storage的domain用于存放上傳的文件:PHP學(xué)習(xí)
http://sae.sina.com.cn/?m=storagePHP學(xué)習(xí)
這里可以建立多個domain.而我們的文件會上傳到哪個domain,是由上傳路徑的第一個目錄名稱決定的.如:PHP學(xué)習(xí)
$upload->savePath = './Public/Uploads/';
會上傳到名為Public的domain.你也不用在這個domain下創(chuàng)建Uploads文件夾,SAE的Storage服務(wù)會為你自動創(chuàng)建.PHP學(xué)習(xí)
圖片地址的問題:PHP學(xué)習(xí)
我們使用UploadFile類上傳圖片,在本地和在SAE下圖片的瀏覽地址是不一樣的.比如有張圖片地址為 "/Public/upload/1.jpg" , /Public 是一個模板替換變量, 他會被替換為Public文件夾所在目錄的地址, 我們可以通過瀏覽器的查看源代碼功能查看被替換后是什么效果. 可以看見, 替換后為 "/Public/upload/1.jpg" . 但是在SAE上圖片并沒有在Public/upload目錄下,而是在storage中. 我們需要將 /Public/替換為storage的域名,在SAE上才能正常顯示.PHP學(xué)習(xí)
我們在SAE專有配置Conf/config_sae.php文件中 定義如下代碼:PHP學(xué)習(xí)
<?php return array( 'TMPL_PARSE_STRING'=>array( '/Public/upload'=>sae_storage_root('Public').'/upload' ) );
這樣,在SAE上會把 /Public/upload 替換為storage的地址, 在SAE上圖片也能正常顯示.PHP學(xué)習(xí)
文件刪除問題:PHP學(xué)習(xí)
因為上傳的文件在本地和SAE存放的地方不一樣,所以我們不能直接用unlink刪除文件.SAE版ThinkPHP新增sae_unlink函數(shù)實現(xiàn)兼容.如:PHP學(xué)習(xí)
sae_unlink('./Public/Uploads/xxx.jpg');
在本地運行時,會刪除Public/Uploads文件夾下的圖片.而在SAE上運行時,會刪除domain為Public的Storage中的圖片.此函數(shù)會刪除哪個domian的文件也是由路徑的第一個目錄名稱決定的.PHP學(xué)習(xí)
圖片處理PHP學(xué)習(xí)
SAE引擎在圖片處理方面也做了自動處理,在本地和SAE平臺的區(qū)別如下:PHP學(xué)習(xí)
圖片功能 | 本地運行 | SAE平臺 |
縮略圖 | 調(diào)用Image類庫處理 | 自動使用SaeImage服務(wù) |
驗證碼 | 調(diào)用Image類庫處理 | 自動使用SaeVcode服務(wù) |
你完全不用去學(xué)習(xí)怎么用SaeImage生成縮略圖,也不用學(xué)習(xí)SaeVcode服務(wù)怎么用,你還是按照以前的方式使用ThinkPHP進(jìn)行驗證碼和縮略圖功能就可以了.PHP學(xué)習(xí)
使用驗證碼的時候需要注意,在本地運行時驗證碼默認(rèn)為數(shù)字形式,而在SAE上運行時驗證碼為數(shù)字+字母形式,而且存在字母大小寫問題.如果你希望驗證碼區(qū)分大小寫的話,需要將驗證碼統(tǒng)一轉(zhuǎn)化為大寫后進(jìn)行匹配.PHP學(xué)習(xí)
如:PHP學(xué)習(xí)
if(md5(strtoupper($_POST['verify']))!=$_SESSION['verify']){ //驗證錯誤處理代碼 }
日志記錄PHP學(xué)習(xí)
SAE版ThinkPHP同樣實現(xiàn)了生成系統(tǒng)日志功能,在本地運行會將日志記錄到項目的項目的Runtime/Logs文件夾下,而在SAE上運行會將日志記錄到SAE平臺的日志中心:PHP學(xué)習(xí)
http://sae.sina.com.cn/?m=applogPHP學(xué)習(xí)
請在搜索框選擇中的下拉菜單處選擇“debug”進(jìn)行查看.PHP學(xué)習(xí)
Trace信息PHP學(xué)習(xí)
建議在開發(fā)程序時配置SHOW_PAGE_TRACE=>true 開啟頁面Trace信息.開啟后,代碼在SAE環(huán)境下運行時會顯示一些SAE獨有的Trace信息,有助于我們開發(fā).你可能會到以下trace信息.PHP學(xué)習(xí)
模板緩存:Trace信息名稱為“[SAE]模板緩存”PHP學(xué)習(xí)
在SAE下不會將模板編譯緩存生成在Runtime目錄下,而是存放在Memcache中.如果你想查看模板編譯后的緩存,這里顯示的就是模板緩存在Memcache中的緩存名稱.你可以在SAE的memcache服務(wù)管理平臺輸入緩存名稱得到緩存內(nèi)容:PHP學(xué)習(xí)
http://sae.sina.com.cn/?m=mcmngPHP學(xué)習(xí)
注:你看得的緩存內(nèi)容,都是以一串?dāng)?shù)字開始,這數(shù)字和緩存內(nèi)容無關(guān),是記錄的緩存生成時間.PHP學(xué)習(xí)
核心緩存:Trace信息名稱為“[SAE]核心緩存”PHP學(xué)習(xí)
它記錄的是核心編譯緩存在Memcache中的緩存名稱.如果你要獲得核心編譯緩存,比如我們要用核心編譯緩存代替入口文件的時候.你可以在SAE的Memcache服務(wù)管理平臺 輸入這里記錄的緩存名稱獲得.PHP學(xué)習(xí)
注:PHP學(xué)習(xí)
在開啟調(diào)試時不會生成核心編譯緩存,如果你獲得核心編譯緩存,請先關(guān)閉調(diào)試.PHP學(xué)習(xí)
緩存內(nèi)容開頭的數(shù)字是記錄的緩存生成時間,請將數(shù)字去掉后再作為入口文件.PHP學(xué)習(xí)
靜態(tài)緩存:Trace信息名稱為“[SAE]靜態(tài)緩存”PHP學(xué)習(xí)
它記錄了生成的靜態(tài)緩存在KVDB中的名稱. 目前SAE管理平臺沒有能直接輸入KVDB名稱獲得內(nèi)容的地方,大家需要自己寫程序獲取內(nèi)容.PHP學(xué)習(xí)
注:此Trace信息是在生成靜態(tài)緩存的時候才會出現(xiàn).如果你訪問到的頁面沒有執(zhí)行生成靜態(tài)緩存的操作時,將不會有此條Trace信息.PHP學(xué)習(xí)
隱藏index.phpPHP學(xué)習(xí)
SAE不支持.htaccess文件,但我們可以使用SAE提供的AppConfig服務(wù)實現(xiàn)偽靜態(tài).PHP學(xué)習(xí)
在你項目的根目錄建立config.yaml文件,代碼為:PHP學(xué)習(xí)
handle: - rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"
這樣就可以隱藏入口了.PHP學(xué)習(xí)
比如這樣的地址 http://serverName/index.php/Blog/read/id/1也能通過PHP學(xué)習(xí)
http://serverName/Blog/read/id/1訪問.PHP學(xué)習(xí)
代碼橫跨性建議PHP學(xué)習(xí)
SAE版ThinkPHP,是具有橫跨性的,請不要破壞它的橫跨性.比如,不要在項目配置文件中寫和SAE數(shù)據(jù)庫相關(guān)配置項. 自己寫代碼時,也要盡量做到橫跨性,這樣就可以讓同樣的代碼既能在SAE下運行,也能在普通環(huán)境下運行, 使你在本地調(diào)試完后上傳到SAE也不用修改任何代碼就能運行.PHP學(xué)習(xí)
下面是一些保持代碼橫跨性的建議:PHP學(xué)習(xí)
(1)盡量少使用原生的SAE服務(wù)PHP學(xué)習(xí)
能使用ThinkPHP自帶函數(shù)替代的,盡量使用ThinkPHP自帶函數(shù).比如要使用SAE的KVDB服務(wù),在ThinkPHP中完全可以用F函數(shù)代替.如果要使用SAE的Memcache服務(wù),都使用S函數(shù)實現(xiàn). 這樣就不會導(dǎo)致你的代碼從SAE轉(zhuǎn)移到普通環(huán)境后性能很低.PHP學(xué)習(xí)
個別SAE服務(wù)無法使用ThinkPHP自帶函數(shù)代替的,才考慮使用原生的SAE服務(wù).PHP學(xué)習(xí)
(2)利用IS_SAE常量PHP學(xué)習(xí)
ThinkPHP的SAE引擎增加了IS_SAE常量,能判斷代碼運行環(huán)境是普通環(huán)境還是SAE環(huán)境.如果你有段代碼在普通環(huán)境和在SAE環(huán)境下實現(xiàn)方式不同,你可以使用IS_SAE進(jìn)行判斷后做不同處理或者加載不同的文件.PHP學(xué)習(xí)
(3)利用SAE專有文件PHP學(xué)習(xí)
在SAE慣例配置中,我們可以看見除了配置了固定的數(shù)據(jù)庫配置項,還有一個SAE_SPECIALIZED_FILES配置項,它定義了系統(tǒng)專有文件.目前已經(jīng)定義了UploadFile類和Image類的SAE專有文件,所以當(dāng)我們的代碼 import(“@.ORG.UploadFile”) 在本地運行時會按普通方式導(dǎo)入項目下Lib/ORG/UploadFile.class.php文件, 而在SAE上運行是系統(tǒng)檢查到UploadFile.class.php有SAE專有文件,它導(dǎo)入的是SAE_SPECIALIZED_FILES配置項中定義的文件地址.這樣實現(xiàn)了普通環(huán)境和SAE環(huán)境下同樣的代碼導(dǎo)入了不同類庫,而類的調(diào)用方法都是一樣的,只是現(xiàn)實方法不同,這樣就能保證了代碼的橫跨性.PHP學(xué)習(xí)
你也可以自己建立SAE專有文件,你可以將專有文件放在和普通文件同級目錄,這樣不用定義SAE_SPECIALIZED_FILE配置項,系統(tǒng)也能識別專有文件.比如我們在Image.class.php的文件的同級目錄如果定義了一個名為Image_sae.class.php 的文件,則系統(tǒng)SAE上運行時,導(dǎo)入Image.class.php文件時會改為導(dǎo)入Image_sae.class.php文件.PHP學(xué)習(xí)
如果一個類庫既定義了同級目錄下的專有文件,也在SAE_SPECIALIZED_FILE配置項中有定義,則會優(yōu)先導(dǎo)入同級目錄下的專有文件.建議大家如果需要建立專有文件時,在普通文件同級目錄下建立.PHP學(xué)習(xí)
如果導(dǎo)入的類庫沒有SAE專有文件,在SAE下運行時也會導(dǎo)入普通文件.PHP學(xué)習(xí)
我們可以利用SAE專有文件,針對普通環(huán)境和SAE環(huán)境封裝不同的類庫,但類庫的使用方法都是相同的,從而讓類庫的客戶端代碼具有橫跨性.PHP學(xué)習(xí)
(4)利用SAE專有配置PHP學(xué)習(xí)
當(dāng)遇到SAE和普通環(huán)境配置需要不一樣時,你可以把普通環(huán)境的配置寫到項目配置文件Conf/config.php中,而 將SAE需要用的配置寫到SAE專有配置Conf/config_sae.php中.PHP學(xué)習(xí)
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》.PHP學(xué)習(xí)
希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助.PHP學(xué)習(xí)
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/3112.html