用過SAE平台的朋友應該知道,出於平台安全性的考慮,SAE限制了用戶對於本地IO的使用。但這樣對於一些傳統的PHP項目,也許帶來了很多不便,因為它們都或多或少的有對本地IO的操作,像Smarty的編譯模板。為了解決這個問題,SAE提供了TmpFS功能。TmpFS允許開發者通過標准的IO函數臨時讀寫本地IO,這樣方便了很多非SAE項目的移植。
但是TmpFS是不夠的,從名稱來看是臨時文件系統,它的生命周期同於PHP請求,也就是當該PHP請求完成執行時,所有寫入TmpFS的臨時文件都會被銷毀。TmpFS是本地臨時文件,不是共享存儲,而SAE是全分布式環境,所以不同請求之間無法通過TmpFS共享操作文件,具體可參照SAE平台文檔說明。
示例:比如我想用TmpFS做個計數器(當然也可以用SAE提供的counter服務)
代碼如下:
<? =SAE_TMP_PATH."/test.txt" (!( (,1 1 } =( ++ (, ?>
發現根本進不了else裡執行,因為臨時文件系統隨著每一次的執行結束就已經不存在了,所以每次代碼開始時判斷(又是一個新的php請求了),那個臨時文件是不存在了.
就是說零時文件不能共享與兩個文件或者一個文件的不同時間請求之間。
其實細讀SAE文檔,不難發現SAE提供的Wrappers裡
KVDB -- saekv://
saekv://用來讀寫KVDB 主要用來保存持久存儲的數據,最常用的場景是保存配置文件
這項可以滿足我們對持久保存文件的創建修改要求
在使用這項服務前必須先才行。
下面是計數器的測試代碼:
<? ="saekv://count.txt" (!( (,1 1 } =( ++ (, }
這樣就可以了。
同時刪除文件也有兩種方式
一種就是php的原生刪除方式unlink($file)就行
還有一種就是通過SAE提供的kvdb數據庫刪除方式:
代碼:
="saekv://count.txt" = -> (->delete("count.txt" "ok" } "no" }
詳情參見KVDB服務文檔 ,count.txt是鍵值...
參考文檔:SAE平台文檔