標籤:語句 提升 post php tin 傳統 讀寫 操作 上傳
<?php function sae_write($file,$content){ file_put_contents(SAE_TMP_PATH."/".$file,$content); } function sae_read($file){ return file_get_contents(SAE_TMP_PATH."/".$file); } ?>
<?php sae_write("1.txt","test"); $rs=sae_read("1.txt"); print_r($rs); ?>
當處理上傳圖片時,原圖被POST上來之後,可直接 move_uploaded_file 到 Storage 下。
而當需要對上傳上來的圖片添加浮水印時,一般是先處理該圖然後儲存到支援臨時讀寫的TmpFS下,再把這個檔案寫入到Storage中,但是這時不能夠再使用 move_uploaded_file (bool move_uploaded_file( string $filename, string $destination) )函數了,因為如果 $filename 非通過 HTTP 的 HTTP POST 上傳時,視為該 $filename 非法,函數將不執行任何操作返回 flase。
可簡單有以下陳述式完成:
file_put_contents($filaname, file_get_contents($tmpfile));
================
TmpFS
因為平台安全性的考慮,SAE限制了使用者對於本地IO的使用,但這樣對於一些傳統的PHP項目,也許帶來了很多不便,因為它們都或多或少的有對本地IO的操作,像Smarty的編譯模板。為瞭解決這個問題,SAE提供了TmpFS功能。TmpFS允許開發人員通過標準的IO函數臨時讀寫本地IO,這樣方便了很多非SAE項目的移植。
特別注意:
臨時檔案的生存周期等同於PHP請求,也就是當該PHP請求完成執行時,所有寫入TmpFS的臨時檔案都會被銷毀
TmpFS是本地臨時檔案,不是共用儲存,而SAE是全分布式環境,所以不同請求之間無法通過TmpFS共用操作檔案
TmpFS操作的檔案限於SAE_TMP_PATH目錄內,而不同App的SAE_TMP_PATH是不同的
TmpFS的檔案為純記憶體儲存
應用情境
使用者的可持久化儲存,請使用Storage或者MySQL儲存,而緩衝儲存請使用Memcache服務儲存,TmpFS是滿足使用者的一個請求的臨時檔案的讀寫需求。比如抓取一個URL的圖片,判斷一下大小,再決定是否寫入Storage。需要在本地組建檔案的情況大致分以下幾種:
緩衝
設定檔
靜態檔案
臨時檔案
使用指南
例子:
appname: saetest
appversion: 1
在一個php檔案中:
file_put_contents( SAE_TMP_PATH . ‘/mycode.txt‘ , ‘dummy test‘ ); echo file_get_contents( SAE_TMP_PATH . ‘/mycode.txt‘ ); // will echo dummy test;
如果是兩個獨立的php檔案:
a.php file_put_contents( SAE_TMP_PATH . ‘/mycode.txt‘ , ‘dummy test‘ ); b.php echo file_get_contents( SAE_TMP_PATH . ‘/mycode.txt‘ ); // 出錯啦,檔案已經不存在了...
說到這裡,大家應該明白,用它做緩衝不但不會帶來效能提升,反而會帶來額外的開銷。
SAE臨時檔案讀寫例子 SAE_TMP_PATH