整體介紹:
Aliyun Cloud Engine (以下簡稱ACE)提供基於PHP 5.3.5的運行環境(Runtime Environment),支援標準的關係型資料庫、Memcache、Cron、Session、storage,同時增加一些進階特性來滿足開發人員的需求。ACE選擇PHP作為首選支援語言,主要是因為目前國內的開發人員以使用PHP語言的比重最大,未來會考慮支援持Node.js,ASP.net,Python和Java等。
ACE的PHP Runtime和官方標準PHP環境幾乎完全一樣,99%的代碼可以不加任何修改完美的運行在ACE環境中。ACE出於安全和效能的考慮,對標準PHP進行了一些擴充和改進。ACE的PHP會隨著官方的版本升級而升級,當官方版本升級時,我們會評估其重要程度,並根據ACE自身特點合并到我們的Runtime中。
限制:
ACE平台為保證應用安全性和穩定性,對各類服務設定了一些限制和配額,使用者在使用前應當仔細閱讀,避免使用中出現問題:
1.資源限制
memory_limit : 指令碼可分配的記憶體 預設:32M
post_max_size: post資料大小 預設:10M
upload_max_filesize 上傳檔案大小 預設:4M
2.禁用函數
出於安全性的考慮,ACE禁用了一些php函數,禁用的標準主要有四點::
1) 出於對安全性的考慮
2)出於對資源管理的考慮
3) 不常用的API
4) 我們提供更好替代方案的API
詳細的限制列表請參考:安全禁用函數列表
3.解決方案
安全禁用函數的具體影響以及解決方案:
1) 檔案快取
CE本地檔案讀寫受限制,雖然通過上面的檔案讀寫同步可以實現,但是考慮到效率問題,建議在檔案快取上面再部署一層全文memcache緩衝結構。
2) Memcache緩衝
//串連
$mem = new Memcache(); //建立memcache對象,內部會訪問agent擷取地址及ID
$mem->init();
//儲存資料
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
//替換資料
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
//儲存數組
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
//刪除資料
$mem->delete('key1');
$val = $mem->get('key1');
//關閉串連
$mem->close();
?>
3) 儲存服務
由於不能直接寫本地檔案,move_uploaded_file 方法已不能正常使用,改用ACE提供方法支援
move_uploaded_file($tmp_name, $filename)
替換為:
$ce = new CEStorage();
$result = $ce->upload($tmp_name, $filename);
#$rs1 = $ce->errmsg(); 輸出錯誤資訊
#$rs2 = $ce->errno();
$result 為返回的附件檔案路徑,形如: www.domain.com/ACE_bucket/$filename
該路徑可直接存取。