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