激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - ThinkPHP的SAE開發相關注意事項詳解

ThinkPHP的SAE開發相關注意事項詳解

2021-03-09 16:159SiR PHP教程

這篇文章主要介紹了ThinkPHP的SAE開發相關注意事項,結合實例形式較為詳細的分析了thinkPHP針對SAE開發的相關數據庫、緩存、文件、圖片、日志等操作注意事項,具有一定參考借鑒價值,需要的朋友可以參考下

本文詳細講述了ThinkPHP的SAE開發相關注意事項。分享給大家供大家參考,具體如下:

ThinkPHP的SAE開發和標準版本的ThinkPHP基本一樣,你無需了解SAE的接口用法,ThinkPHP的SAE引擎已經自動為你整合了SAE的接口,只要掌握ThinkPHP開發,你就能輕松掌握基于ThinkPHP的SAE開發。

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

配置

SAE引擎運行時擁有SAE自己的慣例配置和專有配置,因此配置文件加載順序為:

慣例配置->項目配置->SAE慣例配置->SAE專有配置

SAE慣例配置和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引擎會自動判斷處理):

 

緩存方法 本地運行 SAE平臺
S緩存 默認使用File方式實現 固定使用Memcache實現,所以在SAE下 DATA_CACHE_TYPE配置項將失效。你如果需要使用SAE提供的Mecache服務,直接使用S函數就可以
F緩存 使用File實現 使用KVDB實現
靜態緩存 生成靜態Html文件 靜態文件存入KVDB中
SQL隊列 支持File、Xcache和APC方式 使用KVDB存儲

 

新版的ThinkPHP支持SQL緩存隊列功能,我們可以配置DB_SQL_BUILD_CACHE 開啟SQL語句解析緩存。在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,是由上傳路徑的第一個目錄名稱決定的。如:

?
1
$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文件中 定義如下代碼:

?
1
2
3
4
5
6
<?php
return array(
 'TMPL_PARSE_STRING'=>array(
   '/Public/upload'=>sae_storage_root('Public').'/upload'
 )
);

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

文件刪除問題:

因為上傳的文件在本地和SAE存放的地方不一樣,所以我們不能直接用unlink刪除文件。SAE版ThinkPHP新增sae_unlink函數實現兼容。如:

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

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

圖片處理

SAE引擎在圖片處理方面也做了自動處理,在本地和SAE平臺的區別如下:

 

圖片功能 本地運行 SAE平臺
縮略圖 調用Image類庫處理 自動使用SaeImage服務
驗證碼 調用Image類庫處理 自動使用SaeVcode服務

 

你完全不用去學習怎么用SaeImage生成縮略圖,也不用學習SaeVcode服務怎么用,你還是按照以前的方式使用ThinkPHP進行驗證碼和縮略圖功能就可以了。

使用驗證碼的時候需要注意,在本地運行時驗證碼默認為數字形式,而在SAE上運行時驗證碼為數字+字母形式,而且存在字母大小寫問題。如果你希望驗證碼區分大小寫的話,需要將驗證碼統一轉化為大寫后進行匹配。

如:

?
1
2
3
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文件,代碼為:

?
1
2
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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产免费一级淫片a级中文 99国产精品自拍 | 国产成人av一区 | 国产成人aⅴ | 亚洲3atv精品一区二区三区 | 看黄在线 | 国产成人高清在线 | 91色一区二区三区 | 欧美成人激情 | 伦理三区 | 激情亚洲一区二区三区 | 斗破苍穹在线免费 | 精品成人国产在线观看男人呻吟 | 国产精品一区二区日韩 | 欧美一级全黄 | 激情在线视频 | 国产精品成人一区二区三区吃奶 | 黄色毛片观看 | 免费一级欧美大片视频在线 | 国产精品一区2区3区 | 97精品视频在线观看 | 蜜桃网站在线观看 | 爽爽视频免费看 | 毛片在哪里看 | 黄色免费入口 | 成人国产精品一区 | 免费网站看v片在线a | 手机av免费在线 | 中午日产幕无线码1区 | 免费久久久久 | 久草视频福利在线观看 | av懂色| 一级在线观看视频 | 手机国产乱子伦精品视频 | 成人福利免费在线观看 | 一区二区三区日韩在线观看 | 久久蜜臀一区二区三区av | 国产精品二区高清在线 | 狠狠一区 | 久久宗合色 | 亚洲欧美日韩精品久久 | 视频一区国产精品 |