SAE临时文件读写例子

| | 2012/03/18 09:18 , mdy
PHP , 评论(0) , 阅读(10676) , Via 本站原创
Tags: ,


当处理上传图片时,原图被POST上来之后,可直接 move_uploaded_file 到 Storage 下。

而当需要对上传上来的图片添加水印时,一般是先处理该图然后保存到支持临时读写的TmpFS下,再把这个文件写入到Storage中,但是这时不能够再使用 move_uploaded_file (bool move_uploaded_file( string $filename, string $destination) )函数了,因为如果 $filename 非通过 HTTP 的 HTTP POST 上传时,视为该 $filename 非法,函数将不执行任何操作返回 flase。

可简单有以下语句完成:
  

================
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文件中:
  
如果是两个独立的php文件:
  
说到这里,大家应该明白,用它做缓存不但不会带来性能提升,反而会带来额外的开销。