溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ThinkPHP中SAE開發(fā)注意事項(xiàng)有哪些

發(fā)布時(shí)間:2021-09-01 10:09:41 來源:億速云 閱讀:121 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下ThinkPHP中SAE開發(fā)注意事項(xiàng)有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體如下:

ThinkPHP的SAE開發(fā)和標(biāo)準(zhǔn)版本的ThinkPHP基本一樣,你無需了解SAE的接口用法,ThinkPHP的SAE引擎已經(jīng)自動(dòng)為你整合了SAE的接口,只要掌握ThinkPHP開發(fā),你就能輕松掌握基于ThinkPHP的SAE開發(fā)。

下面是我們給出的一些利用SAE引擎開發(fā)過程的一些注意事項(xiàng),能夠幫助你更好的完成SAE的開發(fā)和部署。

配置

SAE引擎運(yùn)行時(shí)擁有SAE自己的慣例配置和專有配置,因此配置文件加載順序?yàn)椋?/p>

慣例配置->項(xiàng)目配置->SAE慣例配置->SAE專有配置

SAE慣例配置和SAE專有配置中的配置項(xiàng)將會(huì)覆蓋項(xiàng)目配置。
SAE慣例配置:位于 引擎目錄/Sae/Conf/convention_sae.php,其中定義了程序在SAE上運(yùn)行時(shí)固定的數(shù)據(jù)庫(kù)連接配置項(xiàng)。
SAE專有配置:位于項(xiàng)目的Conf目錄下,文件名為config_sae.php,大家可以將針對(duì)SAE的配置寫到其中。

注:SAE慣例配置和SAE專有配置是針對(duì)SAE環(huán)境的獨(dú)有配置,在本地運(yùn)行時(shí)將不會(huì)加載。

數(shù)據(jù)庫(kù)

開發(fā)者不需要在項(xiàng)目配置文件(config.php)中定義和SAE相關(guān)的數(shù)據(jù)庫(kù)配置項(xiàng),只需要定義本地調(diào)試時(shí)連接的數(shù)據(jù)庫(kù)即可。代碼提交到SAE時(shí)無需修改任何配置項(xiàng)也能運(yùn)行,因?yàn)镾AE慣例配置會(huì)自動(dòng)覆蓋你的項(xiàng)目配置文件中的數(shù)據(jù)庫(kù)配置。

代碼在SAE上運(yùn)行時(shí)會(huì)進(jìn)行分布式數(shù)據(jù)庫(kù)連接,并讀寫分離。

緩存

在SAE開發(fā)過程中,你仍然可以使用ThinkPHP內(nèi)置的緩存方法進(jìn)行處理。下面是SAE引擎使用不同的緩存方法在本地和SAE平臺(tái)下的區(qū)別(注意這個(gè)區(qū)別SAE引擎會(huì)自動(dòng)判斷處理):

緩存方法本地運(yùn)行SAE平臺(tái)
S緩存默認(rèn)使用File方式實(shí)現(xiàn)固定使用Memcache實(shí)現(xiàn),所以在SAE下 DATA_CACHE_TYPE配置項(xiàng)將失效。你如果需要使用SAE提供的Mecache服務(wù),直接使用S函數(shù)就可以
F緩存使用File實(shí)現(xiàn)使用KVDB實(shí)現(xiàn)
靜態(tài)緩存生成靜態(tài)Html文件靜態(tài)文件存入KVDB中
SQL隊(duì)列支持File、Xcache和APC方式使用KVDB存儲(chǔ)

新版的ThinkPHP支持SQL緩存隊(duì)列功能,我們可以配置DB_SQL_BUILD_CACHE 開啟SQL語句解析緩存。在SAE平臺(tái)下固定使用KVDB存儲(chǔ)SQL緩存,因此DB_SQL_BUILD_QUEUE配置項(xiàng)將不起作用。并且在SAE下運(yùn)行時(shí)會(huì)用Counter服務(wù)記錄SQL緩存列隊(duì)出隊(duì)次數(shù),在Counter的管理后臺(tái)

http://sae.sina.com.cn/?m=counter

如果你看到計(jì)算器名稱為think_queue_out_times 的數(shù)值很大,說明你設(shè)置的隊(duì)列個(gè)數(shù)太小,需要調(diào)整DB_SQL_BUILD_LENGTH 配置項(xiàng)。

文件上傳

文件上傳仍然使用UploadFile擴(kuò)展類庫(kù)上傳文件,使用方法不變。同樣的代碼在本地運(yùn)行時(shí)將會(huì)上傳到指定的目錄,在SAE上運(yùn)行時(shí)就會(huì)自動(dòng)使用Storage服務(wù),將文件上傳到指定的Storage中。首先你需要在SAE平臺(tái)上創(chuàng)建一個(gè)Storage的domain用于存放上傳的文件:

http://sae.sina.com.cn/?m=storage

這里可以建立多個(gè)domain。而我們的文件會(huì)上傳到哪個(gè)domain,是由上傳路徑的第一個(gè)目錄名稱決定的。如:

$upload->savePath = './Public/Uploads/';

會(huì)上傳到名為Public的domain。你也不用在這個(gè)domain下創(chuàng)建Uploads文件夾,SAE的Storage服務(wù)會(huì)為你自動(dòng)創(chuàng)建。

圖片地址的問題:

我們使用UploadFile類上傳圖片,在本地和在SAE下圖片的瀏覽地址是不一樣的。比如有張圖片地址為 "/Public/upload/1.jpg" , /Public 是一個(gè)模板替換變量, 他會(huì)被替換為Public文件夾所在目錄的地址, 我們可以通過瀏覽器的查看源代碼功能查看被替換后是什么效果。 可以看見, 替換后為 "/Public/upload/1.jpg" 。 但是在SAE上圖片并沒有在Public/upload目錄下,而是在storage中。 我們需要將 /Public/替換為storage的域名,在SAE上才能正常顯示。

我們?cè)赟AE專有配置Conf/config_sae.php文件中 定義如下代碼:

<?php
return array(
 'TMPL_PARSE_STRING'=>array(
   '/Public/upload'=>sae_storage_root('Public').'/upload'
 )
);

這樣,在SAE上會(huì)把 /Public/upload 替換為storage的地址, 在SAE上圖片也能正常顯示。

文件刪除問題:

因?yàn)樯蟼鞯奈募诒镜睾蚐AE存放的地方不一樣,所以我們不能直接用unlink刪除文件。SAE版ThinkPHP新增sae_unlink函數(shù)實(shí)現(xiàn)兼容。如:

sae_unlink('./Public/Uploads/xxx.jpg');

在本地運(yùn)行時(shí),會(huì)刪除Public/Uploads文件夾下的圖片。而在SAE上運(yùn)行時(shí),會(huì)刪除domain為Public的Storage中的圖片。此函數(shù)會(huì)刪除哪個(gè)domian的文件也是由路徑的第一個(gè)目錄名稱決定的。

圖片處理

SAE引擎在圖片處理方面也做了自動(dòng)處理,在本地和SAE平臺(tái)的區(qū)別如下:

圖片功能本地運(yùn)行SAE平臺(tái)
縮略圖調(diào)用Image類庫(kù)處理自動(dòng)使用SaeImage服務(wù)
驗(yàn)證碼調(diào)用Image類庫(kù)處理自動(dòng)使用SaeVcode服務(wù)

你完全不用去學(xué)習(xí)怎么用SaeImage生成縮略圖,也不用學(xué)習(xí)SaeVcode服務(wù)怎么用,你還是按照以前的方式使用ThinkPHP進(jìn)行驗(yàn)證碼和縮略圖功能就可以了。

使用驗(yàn)證碼的時(shí)候需要注意,在本地運(yùn)行時(shí)驗(yàn)證碼默認(rèn)為數(shù)字形式,而在SAE上運(yùn)行時(shí)驗(yàn)證碼為數(shù)字+字母形式,而且存在字母大小寫問題。如果你希望驗(yàn)證碼區(qū)分大小寫的話,需要將驗(yàn)證碼統(tǒng)一轉(zhuǎn)化為大寫后進(jìn)行匹配。

如:

if(md5(strtoupper($_POST['verify']))!=$_SESSION['verify']){
 //驗(yàn)證錯(cuò)誤處理代碼
}

日志記錄

SAE版ThinkPHP同樣實(shí)現(xiàn)了生成系統(tǒng)日志功能,在本地運(yùn)行會(huì)將日志記錄到項(xiàng)目的項(xiàng)目的Runtime/Logs文件夾下,而在SAE上運(yùn)行會(huì)將日志記錄到SAE平臺(tái)的日志中心:

http://sae.sina.com.cn/?m=applog

請(qǐng)?jiān)谒阉骺蜻x擇中的下拉菜單處選擇“debug”進(jìn)行查看。

Trace信息

建議在開發(fā)程序時(shí)配置SHOW_PAGE_TRACE=>true 開啟頁(yè)面Trace信息。開啟后,代碼在SAE環(huán)境下運(yùn)行時(shí)會(huì)顯示一些SAE獨(dú)有的Trace信息,有助于我們開發(fā)。你可能會(huì)到以下trace信息。

模板緩存:Trace信息名稱為“[SAE]模板緩存”

在SAE下不會(huì)將模板編譯緩存生成在Runtime目錄下,而是存放在Memcache中。如果你想查看模板編譯后的緩存,這里顯示的就是模板緩存在Memcache中的緩存名稱。你可以在SAE的memcache服務(wù)管理平臺(tái)輸入緩存名稱得到緩存內(nèi)容:

http://sae.sina.com.cn/?m=mcmng

注:你看得的緩存內(nèi)容,都是以一串?dāng)?shù)字開始,這數(shù)字和緩存內(nèi)容無關(guān),是記錄的緩存生成時(shí)間。

核心緩存:Trace信息名稱為“[SAE]核心緩存”

它記錄的是核心編譯緩存在Memcache中的緩存名稱。如果你要獲得核心編譯緩存,比如我們要用核心編譯緩存代替入口文件的時(shí)候。你可以在SAE的Memcache服務(wù)管理平臺(tái) 輸入這里記錄的緩存名稱獲得。

注:

在開啟調(diào)試時(shí)不會(huì)生成核心編譯緩存,如果你獲得核心編譯緩存,請(qǐng)先關(guān)閉調(diào)試。

緩存內(nèi)容開頭的數(shù)字是記錄的緩存生成時(shí)間,請(qǐng)將數(shù)字去掉后再作為入口文件。

靜態(tài)緩存:Trace信息名稱為“[SAE]靜態(tài)緩存”

它記錄了生成的靜態(tài)緩存在KVDB中的名稱。 目前SAE管理平臺(tái)沒有能直接輸入KVDB名稱獲得內(nèi)容的地方,大家需要自己寫程序獲取內(nèi)容。

注:此Trace信息是在生成靜態(tài)緩存的時(shí)候才會(huì)出現(xiàn)。如果你訪問到的頁(yè)面沒有執(zhí)行生成靜態(tài)緩存的操作時(shí),將不會(huì)有此條Trace信息。

隱藏index.php

SAE不支持.htaccess文件,但我們可以使用SAE提供的AppConfig服務(wù)實(shí)現(xiàn)偽靜態(tài)。

在你項(xiàng)目的根目錄建立config.yaml文件,代碼為:

handle:
- rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"

這樣就可以隱藏入口了。

比如這樣的地址 http://serverName/index.php/Blog/read/id/1也能通過

http://serverName/Blog/read/id/1訪問。

代碼橫跨性建議

SAE版ThinkPHP,是具有橫跨性的,請(qǐng)不要破壞它的橫跨性。比如,不要在項(xiàng)目配置文件中寫和SAE數(shù)據(jù)庫(kù)相關(guān)配置項(xiàng)。 自己寫代碼時(shí),也要盡量做到橫跨性,這樣就可以讓同樣的代碼既能在SAE下運(yùn)行,也能在普通環(huán)境下運(yùn)行, 使你在本地調(diào)試完后上傳到SAE也不用修改任何代碼就能運(yùn)行。

下面是一些保持代碼橫跨性的建議:

(1)盡量少使用原生的SAE服務(wù)

能使用ThinkPHP自帶函數(shù)替代的,盡量使用ThinkPHP自帶函數(shù)。比如要使用SAE的KVDB服務(wù),在ThinkPHP中完全可以用F函數(shù)代替。如果要使用SAE的Memcache服務(wù),都使用S函數(shù)實(shí)現(xiàn)。 這樣就不會(huì)導(dǎo)致你的代碼從SAE轉(zhuǎn)移到普通環(huán)境后性能很低。

個(gè)別SAE服務(wù)無法使用ThinkPHP自帶函數(shù)代替的,才考慮使用原生的SAE服務(wù)。

(2)利用IS_SAE常量

ThinkPHP的SAE引擎增加了IS_SAE常量,能判斷代碼運(yùn)行環(huán)境是普通環(huán)境還是SAE環(huán)境。如果你有段代碼在普通環(huán)境和在SAE環(huán)境下實(shí)現(xiàn)方式不同,你可以使用IS_SAE進(jìn)行判斷后做不同處理或者加載不同的文件。

(3)利用SAE專有文件

在SAE慣例配置中,我們可以看見除了配置了固定的數(shù)據(jù)庫(kù)配置項(xiàng),還有一個(gè)SAE_SPECIALIZED_FILES配置項(xiàng),它定義了系統(tǒng)專有文件。目前已經(jīng)定義了UploadFile類和Image類的SAE專有文件,所以當(dāng)我們的代碼 import(“@.ORG.UploadFile”) 在本地運(yùn)行時(shí)會(huì)按普通方式導(dǎo)入項(xiàng)目下Lib/ORG/UploadFile.class.php文件, 而在SAE上運(yùn)行是系統(tǒng)檢查到UploadFile.class.php有SAE專有文件,它導(dǎo)入的是SAE_SPECIALIZED_FILES配置項(xiàng)中定義的文件地址。這樣實(shí)現(xiàn)了普通環(huán)境和SAE環(huán)境下同樣的代碼導(dǎo)入了不同類庫(kù),而類的調(diào)用方法都是一樣的,只是現(xiàn)實(shí)方法不同,這樣就能保證了代碼的橫跨性。

你也可以自己建立SAE專有文件,你可以將專有文件放在和普通文件同級(jí)目錄,這樣不用定義SAE_SPECIALIZED_FILE配置項(xiàng),系統(tǒng)也能識(shí)別專有文件。比如我們?cè)贗mage.class.php的文件的同級(jí)目錄如果定義了一個(gè)名為Image_sae.class.php 的文件,則系統(tǒng)SAE上運(yùn)行時(shí),導(dǎo)入Image.class.php文件時(shí)會(huì)改為導(dǎo)入Image_sae.class.php文件。

如果一個(gè)類庫(kù)既定義了同級(jí)目錄下的專有文件,也在SAE_SPECIALIZED_FILE配置項(xiàng)中有定義,則會(huì)優(yōu)先導(dǎo)入同級(jí)目錄下的專有文件。建議大家如果需要建立專有文件時(shí),在普通文件同級(jí)目錄下建立。

如果導(dǎo)入的類庫(kù)沒有SAE專有文件,在SAE下運(yùn)行時(shí)也會(huì)導(dǎo)入普通文件。

我們可以利用SAE專有文件,針對(duì)普通環(huán)境和SAE環(huán)境封裝不同的類庫(kù),但類庫(kù)的使用方法都是相同的,從而讓類庫(kù)的客戶端代碼具有橫跨性。

(4)利用SAE專有配置

當(dāng)遇到SAE和普通環(huán)境配置需要不一樣時(shí),你可以把普通環(huán)境的配置寫到項(xiàng)目配置文件Conf/config.php中,而 將SAE需要用的配置寫到SAE專有配置Conf/config_sae.php中。

以上是“ThinkPHP中SAE開發(fā)注意事項(xiàng)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI