不太清楚你是想問什么?
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、網絡空間、營銷軟件、網站建設、殷都網站維護、網站推廣。
如果是要上傳PHP代碼,在你的管理應用,然后代碼管理,就可以直接上傳代碼了
如果你是想導入mysql數據庫中的數據,那在sae新建一個數據庫,然后使用它的phpadmin,把你本地的sql直接導入就行,將來在你的數據庫配置文件中,要把那些配置項使用sae提供的常量,這些你百度下,都會有的
?php
// 連主庫
$link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
// 連從庫
// $link=mysql_connect(SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
if($link)
{
mysql_select_db(SAE_MYSQL_DB,$link);
//your code goes here
}
//創建一個數據庫表
function _create_table($sql){
mysql_query($sql) or die('創建表失敗,錯誤信息:'.mysql_error());
return "創建表成功";
}
//插入數據
function _insert_data($sql){
if(!mysql_query($sql)){
return 0; //插入數據失敗
}else{
if(mysql_affected_rows()0){
return 1; //插入成功
}else{
return 2; //沒有行受到影響
}
}
}
//刪除數據
function _delete_data($sql){
if(!mysql_query($sql)){
return 0; //刪除失敗
}else{
if(mysql_affected_rows()0){
return 1; //刪除成功
}else{
return 2; //沒有行受到影響
}
}
}
//修改數據
function _update_data($sql){
if(!mysql_query($sql)){
return 0; //更新數據失敗
}else{
if(mysql_affected_rows()0){
return 1; //更新成功;
}else{
return 2; //沒有行受到影響
}
}
}
function _select_data($sql){
$ret = mysql_query($sql) or die('SQL語句有錯誤,錯誤信息:'.mysql_error());
return $ret;
}
function _drop_table($sql){
mysql_query($sql) or die('刪除表失敗,錯誤信息:'.mysql_error());
return "刪除表成功";
}
?
首次聽說SAE是在叢磊大牛在兩年多前的一次小范圍講座中,但是真正開始使用SAE則是在2013年9月。當時自己的個人網站使用的還是傳統的虛擬主機服務,運營商的不作為和服務器的頻繁抽風導致我的小站幾乎無法訪問。忍無可忍的我再次想到了SAE。說起來自己也是學計算機的學生,應該沿著IT發展趨勢以實際行動擁抱云計算。但是SAE畢竟不是虛擬主機,而是PaaS服務。這里簡單寫一篇短文,介紹一下自己的用PHP開發網站遷移到SAE的經歷過程中總結的一些小經驗。
以文章或類文章內容為主的網站,或者說CMS,通常的架構是PHP處理程序+MySQL數據庫+前端模板。PHP處理程序對數據庫進行讀寫操作,并將處理后的數據套用前端模板呈現給Web用戶。但是這類程序部署或遷移到SAE時會主要遇到兩個問題,一是存儲空間的域名和程序空間的不同,二是程序空間不可寫。這就使得以前直接生成靜態頁面的程序無法直接使用了,也會使得在程序空間生成緩存數據的程序無法直接使用了。怎么解決這些問題呢?
一、生成靜態頁面?
由于程序空間不可寫,生成靜態頁面只能將頁面創建到KVDB、MemCache(以下簡稱MC)和Storage中。但是前兩者是不能被Web用戶直接訪問的,而Storage空間的域名和主域名不同,直接將頁面跳轉到Storage空間無疑對Web用戶不太友好。因此,需要結合URL重寫功能和PHP程序來完成這一任務。
1、PHP程序+Storage存儲
簡單來說,就是Web用戶訪問一個URL,但是該URL并不存在,通過URL重寫轉移到某個PHP程序,比如show.php吧,然后將URL中的path作為參數傳遞給show.php。show.php以該path到Storage中找到相應的靜態頁面,然后加載該文件并顯示出來。但是這里用header功能跳轉到該頁面是沒有意義的,URL將又轉到Storage空間的域名了。因此,需要使用Storage服務的read方法,將文件讀取出來,再在show.php中顯示出來。
需要說明的是,Storage的流出是要計費的,而show.php讀取后再以HTTP方式在用戶的瀏覽器中顯示出來還是需要計費的,個人猜想這樣做會造成網站內容部分的雙重計費(個人猜測未經證實,請大家指正)。而MySQL、KVDB和MC是按照請求數量計費的。考慮到Storage的流出計費是150云豆/GB,而另外三種中最貴的MySQL的請求計費是150云豆/百萬次,因此,當平均每次請求的流量(1G/100萬),即約1.05KB時,使用MySQL就更便宜的了。然而,現在網頁的源文件動不動就超過1KB了,所以不一定非得生成靜態。同時,生成靜態后的網頁也不便于更新或更改風格。
2、PHP程序+KVDB或MC
和前面的類似,無非就是將生成的靜態頁面以值的形式存儲在KVDB或MC中。這種存儲和Storage相比,計費的方式發生了變化,是按照請求次數計費的。KVDB是50云豆/百萬次,MC是25云豆/百萬次。但是需要注意的是,MC的存儲費用相當昂貴,是200云豆/GB?天,而KVDB、MySQL和Storage的存儲費用都是5云豆/GB?天。因此,當網站內容稍微多一點點的時候,使用KVDB要比MC更合適。
MySQL和KVDB的計費相比,MySQL的請求費用是KVDB的3倍。但是使用MySQL不需要生成靜態頁面,使用KVDB時相當于讀取MySQL后生成的靜態頁面存儲在KVDB中,多占用了一份存儲空間(別告訴我說準備將數據只存儲在KVDB中,真要是SAE的KVDB再癱瘓一次,那網站就麻煩大了)。
因此,我的網站在實現方式上,首頁和列表頁等頻繁訪問的頁面中通過MySQL查詢的結果存儲在KVDB中,減少對數據庫的查詢請求操作。而其他頁面不再緩存,直接從數據庫中讀取,這樣做可以更好的更新頁面中的訪問量等動態信息。如果考慮進行進一步優化,可以統計頁面的訪問量,將訪問量較大的頁面存儲到KVDB中。反正現在PHP的CPU時間是不計費的,多增加幾個條件判斷語句也沒啥^_^
二、緩存
接下來討論緩存的問題。網站中經常會有一些數據需要運行時加載而不是直接寫到程序代碼里,這樣可以便于在網站后臺直接進行設置而不是每次都修改程序代碼文件。典型的,比如網站欄目列表、頁面顯示的一些配置、網站的一些全局配置等。這些配置雖然存儲在MySQL中,但是通常還是生成緩存文件在運行時加載。這里使用KVDB和MC都可以。KVDB每次請求貴但是存儲很廉價。MC每次請求便宜一半但是存儲則為40倍。具體怎么選擇看用戶了。這里需要說明的是,既然按照請求次數計費而不是按照流量計費,那么最合適的優化方法是將全站所有頁面都通用的數據存儲到一個緩存中,這樣就極大程度減少了因為請求數量造成的計費。
三、模板
模板文件應該放到什么地方呢?因為程序空間不能寫,而KVDB和MC不能直接由用戶上傳和修改,因此要想通過網站后臺方便地修改模板,還是應該將模板文件放到Storage中。我的做法是,將模板文件放到Storage中,需要修改時,在網站后臺的編輯器中修改,或者在本地修改后使用Cyberduck上傳。否則,每次修改模板都得重新部署代碼實在是太麻煩了。
模板直接放到Storage中也不便使用,因為讀取Storage要比讀取KVDB/MC要慢。特別是模板這種每個頁面都會用到的文件,還是應該以緩存的方式使用。我的做法是,將模板文件放在Storage中,然后讀取它,將其中的一些模板標記改為相應的PHP代碼,存儲到KVDB中。
但是,這種嵌入了PHP代碼的“編譯”后的模板怎樣執行呢?KVDB提供的get方法只能得到值,因為這些值不全都是PHP代碼,畢竟還有html的標簽,不能被evel。所以,需要使用KVDB的wrapper,以include的方式加載它。PHP中的include是可以有返回值的,可以據此判斷是否成功地加載了緩存。如果不成功,可以重新生成緩存再加載。如果重新生成還不成功,為了網站的正常運行,可以從Storage中加載模板原文件再進行處理。這樣可以保證即使部分服務出現故障時網站依然可以最大程度保持正常訪問。
綜上,我的網站遷移到SAE后的實現思路就是:
1、頻繁訪問的頁面存入KVDB,不頻繁訪問的頁面只存儲在數據庫,頁面均動態生成,用AppConfig實現偽靜態。
2、通用緩存盡可能存儲到一個KVDB或MC的鍵值中。
3、模板源文件放到Storage中,模板標簽預處理為PHP代碼后緩存到KVDB或MC中
4、通過include加載緩存,并在include返回異常時重新生成緩存并加載,如果重新生成緩存的過程發生異常則不再使用緩存而直接輸出。
我的個人網站已遷移到SAE中,除去上次SAE故障導致KVDB出現異常之外,一直穩定運行。歡迎大家圍觀和留言。由于使用SAE也不過半年,才疏學淺。文中的錯誤還請大家批評指正。
你可以把php代碼放到sae空間去,運行就行,但SAE 的php和mysql 環境某些功能不能使用,但不影響絕大部分程序的運行。
?php
//初始話mysql連接
$mysql = new SaeMysql();
$sql = "SELECT * FROM `user` LIMIT 10";
//執行sql
$data = $mysql-getData( $sql );
//獲取name參數,并過濾掉html xml php標記
$name = strip_tags( $_REQUEST['name'] );
//age參數格式化為整型
$age = intval( $_REQUEST['age'] );
//構造插入語句
$sql = "INSERT INTO `user` ( `name` , `age` , `regtime` ) VALUES ( '" . $mysql-escape( $name ) . "' , '" . intval( $age ) . "' , NOW() ) ";
//執行插入語句
$mysql-runSql( $sql );
//判斷執行是否成功
if( $mysql-errno() != 0 )
{
die( "Error:" . $mysql-errmsg() );
}
//關閉數據庫連接
$mysql-closeDb();
?