1. SAE上傳本地文件到storage,php
這個是做不到的
舉個例子,假如一個url就可實現文件上傳
那麼可以隨意枚舉訪問者本地文件,進行上傳了
這有悖於網路安全
比如,只要訪問網站首頁,就會默認把這個文件上傳,會有很多人中招的
C:\Users\Administrator\Desktop\1.jpg
2. SAE的雲存儲類
●MySQL:MySQL是SAE上的MySQL服務和普通MySQL服務幾乎一樣,所以如果你已經熟悉了MySQL的常規使用的話,會感到很簡單。
SAE平台為每個App幾乎支持所有的MySQL特性,以方便您用習慣的方式來操作資料庫。需要注意的是SAE的MySQL 資料庫服務需要顯式開啟或禁用。開啟MySQL資料庫服務後,您不但可以通過phpmyadmin來創建資料庫和數據表,還可以自由地導入導出資料庫中的數據。SAE的PHP環境提供了標準的MYSQL,MYSQLI和PDO模塊(基於MySQLnd),您可以直接使用這三個模塊來操作您的資料庫, 您還可以使用預定義常量來連接資料庫,我們也不排除未來調整資料庫埠的可能。另外SAE也提供了SaeMysql類,我們推薦您使用這個類來操作MySQL資源。MySQL還可以通過授權的方式支持跨應用調用,從而達到應用間數據共享和單應用多資料庫管理等目的。同時,為了防止個別用戶的攻擊和濫用,SAE還設置了服務限制和配額,保證絕大多數開發者在公有雲平台上的正常使用。
●Storage:Storage是SAE為開發者提供的分布式文件存儲服務,用來存放用戶的持久化存儲的文件。
Storage是SAE為開發者提供的分布式文件存儲服務,可以用來存儲持久化的文件。使用該服務用戶需要先在在線管理平台創建Domain(相當於一級子目錄),創建完畢後即可在Storage進行文件的管理。 用戶可以通過兩種方式操作其中的數據:一是通過cyberck將用戶文件上傳至Storage存儲中,然後通過在線管理平台將該文件導入到MySQL中;二是通過sae_std_lib下的SaeStor的API進行文件的讀寫操作。因為SAE平台限制使用本地IO,所以強烈建議開發者將所有需要持久化的文件操作都通過Storage實現。
●Memcache:Memcache是SAE為開發者提供的分布式緩存服務,用來以共享的方式緩存用戶的小數據。
用戶首先需要在在線管理平台上創建Memcache,然後通過標準的memcache*函數讀寫Memcache。使用Memcache服務不僅可以快速進行數據響應,而且可以減輕後端存儲的壓力。
●KVDB:KVDB是SAE開發的分布式key-value數據存儲服務,用來支持公有雲計算平台上的海量key-value存儲。
KVDB支持的存儲容量很大,對每個用戶支持100G的存儲空間,可存儲10億條記錄,用戶可用來存放如好友關系等簡單數據。 另外,KVDB的性能和可靠性都很高,據我們內部測試,讀寫均可達到10w gps,而且KVDB採用一主多從的分布式架構,支持KVDB的熱備和定期冷備,發生宕機時還可以自動切換到正常工作的DB上。
●Counter:Counter是SAE為開發者提供的計數器服務,用來實現高並發情景下的計數功能。
Counter是SAE為開發者提供的計數器服務,用來實現高並發情景下的計數功能。用戶可以在控制面板或程序中創建計數器,通過SaeCounter的API對計數器進行加減和統計設置。 Counter簡化了計數應用的開發,開發者可以輕松實現高並發情景下的計數功能(如兔年春晚投票、廣告渠道訪問計數等應用),同時還可以使用Counter的統計功能輕松實現數據匯總。
●Rank:Rank排行榜服務是SAE開發的用於在分布式環境下統計排名的服務。
Rank服務是SAE開發的用於分布式環境下的統計排名服務,允許每個用戶建立多個排行榜,其中每個排行榜都支持類似key-value的鍵值對操作。用戶不僅可以以O(logn)的時間復雜度獲取指定key的排名,還可以獲取到前N名的列表(時間復雜度為O(n))。排行榜服務的特點是可靠、快速,可以用於實時排名(如游戲積分排名、軟體下載排名),同時排行榜支持過期時間設置,這樣方便進行周排名和月排名。另外,使用排行榜服務無需通過控制面板開通或關閉,可以直接使用排行榜API操作。 特別注意:Rank服務並不存放用戶的所有數據,只以一定比率的冗餘存放TopN的數據,這樣帶來一個影響,就是如果數據存在激增/減的話,可能影響排名結果的准確性。為了保證激增導致的數據准確性問題,可以定期從數據重新導入新的准確數據。
3. 如何通過Storage 取文件
sae既然封裝了存儲路徑 而且這個路徑還不在主機伺服器上 你就不能直接用http協議直接訪問storage中的文件 但是你可以通過一個php頁面把storage中的文件讀出來在發送給前端
4. 修改PHP程序,index.phpcat=1 這種,加一個index.phplan=0,加個lan參數怎麼加
問題不太明白,不過感覺你可以先通過GET方式獲取到cat和lan兩個參數的值,然後再在資料庫里做查詢(如果資料庫里沒有lan欄位,估計你要加一個了),不知道你用的是不是mvc框架,如果是mvc框架,你可以把參數獲取到控制層里,如果不是mvc框架,直接GET到index.php里再做判斷、查詢,應該就可以了
5. 如何使用SAE的Storage
1以下是圖片上傳代碼:
<form method="post" enctype="multipart/form-data" action=" ">
<input name="photo" type="file" style="cursor:pointer;"/>
<input type="submit" value="提交" name="import"
style="cursor:pointer;"/> </form>
2接受處理:
$s2 = new SaeStorage();
$name_b =$_FILES['photo']['name'];
$url =
$s2->upload('photo',$name_b,$_FILES['photo']['tmp_name']);//此處的photo為你的storage域名,可以自定義
echo $url;
此處得到的$url即為你上傳圖片在sae的storage中的url地址。
3url並調用微博api發布圖片微博:
$c = new SaeTClientV2( WB_AKEY , WB_SKEY ,
$_SESSION['oauth2']['oauth_token']);
$ret = $c->upload_url_text( $text,$url); //發送微博
if ( isset($ret['error_code']) && $ret['error_code'] > 0 ) {
echo "<p>發送失敗,錯誤:{$ret['error_code']}:{$ret['error']}</p>";
} else {
echo "<p>發送成功</p>";
}
此處為利用新浪微博sdk發布帶有圖片的微博,需要注意的是upload_url_text介面需要申請高級許可權才可以使用。不過簡單描述一下申請理由一般都會申請成功的哦。
至此,你已經將storage中的圖片發布到微博上了。
6. thinkphp sae 怎麼配置,現在不生成緩存
Sae上出於安全考慮禁用了文件讀寫操作的許可權,所以不能生成緩存文件,就算上傳文件的寫入操作也要使用Sae上的Storage,但這不影響thinkphp在sae下的運行,thinkphp會自動識別是Sae環境,,並以Sae模式運行,緩存將不再以文件形式保存,都將存入Memcache中。所以在Sae上運行的thinkphp項目都必須開啟Memcache服務才能運行
7. thinkphp3.2.3 部署在sae上怎麼使用SeaStorage類
$storage=\SaeStorage();
8. 如何將 WordPress 的 upload 文件夾導入 SAE 的 storage
應用根目錄,創建sae.php,
<?php
/* 在SAE的Storage中新建的Domain名,比如「wordpress」 */
define('SAE_STORAGE',wordpress);
/* 設置文件上傳的路徑和文件路徑的URL,不要更改 */
define('SAE_DIR', 'saestor://'.SAE_STORAGE.'/uploads');
define('SAE_URL', 'http://'.$_SERVER['HTTP_APPNAME'].'-'.SAE_STORAGE.'.stor.sinaapp.com/uploads');
?>
修改wp-includes/functions.php文件,
require( ABSPATH . WPINC . '/option.php' );
前添加
include( ABSPATH . '/sae.php' ); //調用SAE的Storage文件域名設置 //for SAE
注釋掉如下代碼,
//$wrapper = null;
// strip the protocol
//if( wp_is_stream( $target ) ) {
// list( $wrapper, $target ) = explode( '://', $target, 2 );
//}
// from php.net/mkdir user contributed notes
//$target = str_replace( '//', '/', $target );
// put the wrapper back on the target
//if( $wrapper !== null ) {
// $target = $wrapper . '://' . $target;
//}
替換為,
//for SAE begin
// from php.net/mkdir user contributed notes
if ( substr($target, 0, 10) == 'saestor://' ) {
return true;
}
$target = str_replace( '//', '/', $target );
//for SAE end
$basedir = $dir;
的上面添加
// for SAE begin
$dir = SAE_DIR;
$url = SAE_URL;
//for SAE end
/** * Send a HTTP header to limit rendering of pages to same origin iframes.
的上面添加,
// for SAE begin
if ( !function_exists('utf8_encode') ) {
function utf8_encode($str) {
$encoding_in = mb_detect_encoding($str);
return mb_convert_encoding($str, 'UTF-8', $encoding_in);
}
}
//for SAE end
修改wp-admin/includes/file.php,注釋掉如下代碼,
// Set correct file permissions
//$stat = stat( dirname( $new_file ));
//$perms = $stat['mode'] & 0000666;
//@ chmod( $new_file, $perms );
9. 在新浪雲中用SaeStorage的write方法存儲txt文件中文為亂碼怎麼處理
<?php
$str=base64_encode("中文文字信息");
$s->write(...);
?>
讀取後用base64_decode()解碼即可,http://www.hi-docs.com/Search-base64.html
10. 本地寫了個upload的上傳php文件,但是不知道如何遠程訪問SAE的storage
http://apidoc.sinaapp.com/sae/SaeStorage.html 這里有很詳細的文檔