本文詳細講述了ThinkPHP的SAE開發相關注意事項。分享給大家供大家參考,具體如下:
ThinkPHP的SAE開發和標準版本的ThinkPHP基本上一樣,你無需了解SAE的接口用法,ThinkPHP的SAE引擎已經自動為你整合了SAE的接口,只要掌握ThinkPHP開發,你就能輕鬆掌握基於ThinkPHP的SAE開發。
下面是我們給出的一些利用SAE引擎開發流程的一些注意事項,能夠幫助你更好的完成SAE的開發和部署。
配置
SAE引擎運行時擁有SAE自己的慣例配置和專有配置,因此配置文件加載順序為:
慣例配置->項目配置->SAE慣例配置->SAE專有配置
SAEAE配置和SAE專有配置中的配置項目將會覆寫專案配置。
SAE慣例配置:位於 引擎目錄/Sae/Conf/convention_sae.php,其中定義了程式在SAE上執行時固定的資料庫連線配置項目。
SAE專有設定:位於專案的Conf目錄下,檔案名稱為config_sae.php,大家可以將針對SAE的設定寫到其中。
註:SAE慣例配置和SAE專有配置是針對SAE環境的獨特配置,在本地運行時將不會載入。
資料庫
開發者不需要在專案設定檔(config.php)中定義和SAE相關的資料庫設定項,只需要定義本地偵錯時連接的資料庫即可。當程式碼提交到SAE時無需修改任何配置項目也能運行,因為SAE慣例配置會自動覆蓋你的專案設定檔中的資料庫配置。
程式碼在SAE上運作時會進行分散式資料庫連接,並讀寫分離。
快取
在SAE開發過程中,你仍然可以使用ThinkPHP內建的快取方法來處理。以下是SAE引擎使用不同的快取方法在本地和SAE平台下的差異(注意這個差異SAE引擎會自動判斷處理):
新版的ThinkPHP支援SQL快取佇列功能,我們可以設定DB_SQL_BUILD_CACHE 開啟語句解析快取。在SAE平台下固定使用KVDB儲存SQL緩存,因此DB_SQL_BUILD_QUEUE配置項目將無法運作。並且在SAE下運行時會用Counter服務記錄SQL緩存列隊出隊次數,在Counter的管理後台
http://sae.sina.com.cn/?m=counter
如果你看到計算器名稱為think_queue_out_times 的數值很大,表示你設定的佇列個數太小,需要調整DB_SQL_BUILD_LENGTH 配置項目。
文件上傳
文件上傳仍然使用UploadFile擴充類別庫上傳文件,使用方法不變。同樣的程式碼在本機執行時將會上傳到指定的目錄,在SAE上執行時就會自動使用Storage服務,將檔案上傳到指定的Storage。首先你需要在SAE平台上建立一個Storage的domain用來存放上傳的檔案:
http://sae.sina.com.cn/?m=storage
這裡可以建立多個domain。而我們的檔案會上傳到哪個domain,是由上傳路徑的第一個目錄名稱決定的。如:
$upload->savePath = './Public/Uploads/';
會上傳到名為Public的domain。你也不用在這個domain下建立Uploads資料夾,SAE的Storage服務會為你自動建立。
圖片地址的問題:
我們使用UploadFile類別上傳圖片,在本地和在SAE下圖片的瀏覽地址是不一樣的。例如有張圖片地址為"/Public/upload/1.jpg" , /Public 是一個模板替換變量, 他會被替換為Public資料夾所在目錄的地址, 我們可以透過瀏覽器的查看源代碼功能查看被替換後是什麼效果。 可以看見, 替換後為 "/Public/upload/1.jpg" 。 但在SAE上圖片並沒有在Public/upload目錄下,而是在storage中。 我們需要將 /Public/替換為storage的域名,在SAE上才能正常顯示。
我們在SAE專有設定Conf/config_sae.php檔案定義如下程式碼:
<?php return array( 'TMPL_PARSE_STRING'=>array( '/Public/upload'=>sae_storage_root('Public').'/upload' ) );
這樣,在SAE上會替換為正常/upload 為storage的位址, 在SAE上圖片也能正常顯示。
檔案刪除問題:
因為上傳的檔案在本地和SAE存放的地方不一樣,所以我們無法直接用unlink刪除檔案。 SAE版ThinkPHP新增sae_unlink函數實作相容。如:
sae_unlink('./Public/Uploads/xxx.jpg');
在本地運行時,會刪除Public/Uploads資料夾下的圖片。而在SAE上執行時,會刪除domain為Public的Storage中的圖片。此函數會刪除哪個domian的檔案也是由路徑的第一個目錄名稱決定的。
圖片處理
SAE引擎在圖片處理方面也做了自動處理,在本地和SAE平台的區別如下:
你完全不用去学习怎么用SaeImage生成缩略图,也不用学习SaeVcode服务怎么用,你还是按照以前的方式使用ThinkPHP进行验证码和缩略图功能就可以了。
使用验证码的时候需要注意,在本地运行时验证码默认为数字形式,而在SAE上运行时验证码为数字+字母形式,而且存在字母大小写问题。如果你希望验证码区分大小写的话,需要将验证码统一转化为大写后进行匹配。
如:
if(md5(strtoupper($_POST['verify']))!=$_SESSION['verify']){ //验证错误处理代码 }
日志记录
SAE版ThinkPHP同样实现了生成系统日志功能,在本地运行会将日志记录到项目的项目的Runtime/Logs文件夹下,而在SAE上运行会将日志记录到SAE平台的日志中心:
http://sae.sina.com.cn/?m=applog
请在搜索框选择中的下拉菜单处选择“debug”进行查看。
Trace信息
建议在开发程序时配置SHOW_PAGE_TRACE=>true 开启页面Trace信息。开启后,代码在SAE环境下运行时会显示一些SAE独有的Trace信息,有助于我们开发。你可能会到以下trace信息。
模板缓存:Trace信息名称为“[SAE]模板缓存”
在SAE下不会将模板编译缓存生成在Runtime目录下,而是存放在Memcache中。如果你想查看模板编译后的缓存,这里显示的就是模板缓存在Memcache中的缓存名称。你可以在SAE的memcache服务管理平台输入缓存名称得到缓存内容:
http://sae.sina.com.cn/?m=mcmng
注:你看得的缓存内容,都是以一串数字开始,这数字和缓存内容无关,是记录的缓存生成时间。
核心缓存:Trace信息名称为“[SAE]核心缓存”
它记录的是核心编译缓存在Memcache中的缓存名称。如果你要获得核心编译缓存,比如我们要用核心编译缓存代替入口文件的时候。你可以在SAE的Memcache服务管理平台 输入这里记录的缓存名称获得。
注:
在开启调试时不会生成核心编译缓存,如果你获得核心编译缓存,请先关闭调试。
缓存内容开头的数字是记录的缓存生成时间,请将数字去掉后再作为入口文件。
静态缓存:Trace信息名称为“[SAE]静态缓存”
它记录了生成的静态缓存在KVDB中的名称。 目前SAE管理平台没有能直接输入KVDB名称获得内容的地方,大家需要自己写程序获取内容。
注:此Trace信息是在生成静态缓存的时候才会出现。如果你访问到的页面没有执行生成静态缓存的操作时,将不会有此条Trace信息。
隐藏index.php
SAE不支持.htaccess文件,但我们可以使用SAE提供的AppConfig服务实现伪静态。
在你项目的根目录建立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,是具有横跨性的,请不要破坏它的横跨性。比如,不要在项目配置文件中写和SAE数据库相关配置项。 自己写代码时,也要尽量做到横跨性,这样就可以让同样的代码既能在SAE下运行,也能在普通环境下运行, 使你在本地调试完后上传到SAE也不用修改任何代码就能运行。
下面是一些保持代码横跨性的建议:
(1)尽量少使用原生的SAE服务
能使用ThinkPHP自带函数替代的,尽量使用ThinkPHP自带函数。比如要使用SAE的KVDB服务,在ThinkPHP中完全可以用F函数代替。如果要使用SAE的Memcache服务,都使用S函数实现。 这样就不会导致你的代码从SAE转移到普通环境后性能很低。
个别SAE服务无法使用ThinkPHP自带函数代替的,才考虑使用原生的SAE服务。
(2)利用IS_SAE常量
ThinkPHP的SAE引擎增加了IS_SAE常量,能判断代码运行环境是普通环境还是SAE环境。如果你有段代码在普通环境和在SAE环境下实现方式不同,你可以使用IS_SAE进行判断后做不同处理或者加载不同的文件。
(3)利用SAE专有文件
在SAE惯例配置中,我们可以看见除了配置了固定的数据库配置项,还有一个SAE_SPECIALIZED_FILES配置项,它定义了系统专有文件。目前已经定义了UploadFile类和Image类的SAE专有文件,所以当我们的代码 import(“@.ORG.UploadFile”) 在本地运行时会按普通方式导入项目下Lib/ORG/UploadFile.class.php文件, 而在SAE上运行是系统检查到UploadFile.class.php有SAE专有文件,它导入的是SAE_SPECIALIZED_FILES配置项中定义的文件地址。这样实现了普通环境和SAE环境下同样的代码导入了不同类库,而类的调用方法都是一样的,只是现实方法不同,这样就能保证了代码的横跨性。
你也可以自己建立SAE專有文件,你可以將專有文件放在和普通文件同級目錄,這樣不用定義SAE_SPECIALIZED_FILE配置項,系統也能識別專有文件。例如我們在Image.class.php的文件的同級目錄如果定義了一個名為Image_sae.class.php 的文件,則系統SAE上運行時,導入Image.class.php檔案時會改為導入Image_sae.class .php文件。
如果一個類別庫既定義了同級目錄下的專有文件,也在SAE_SPECIALIZED_FILE配置項目中有定義,則會優先導入同級目錄下的專有文件。建議大家如果需要建立專有文件時,在普通文件同級目錄下建立。
如果導入的類別庫沒有SAE專有文件,在SAE下運行時也會導入普通文件。
我們可以利用SAE專有文件,針對普通環境和SAE環境封裝不同的類別庫,但類別庫的使用方法都是相同的,從而讓類別庫的客戶端程式碼具有橫跨性。
(4)利用SAE專有配置
當遇到SAE和普通環境配置需要不一樣時,你可以把普通環境的配置寫到專案設定檔Conf/config.php中,而將SAE需要用的配置寫入到SAE專有設定Conf/config_sae.php中。
希望本文所述對大家以ThinkPHP框架為基礎的PHP程式設計有所幫助。
更多ThinkPHP的SAE開發相關注意事項詳解相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具