由于数据安全性等原因,SAE不支持本地写入文件.但是SAE提供了TmpFS临时文件和Wrapper两种方式来解决这个问题。
1.对于不需要保存的临时文件可以使用TmpFS服务进行临时存储,请注意临时文件在当前PHP脚本执行结束后立即销毁,不能跨脚本使用。
2.对于需要保存的文件,可以通过保存到Memcache中或Storage中(需要初始化)代替本地文件读写.通过使用SAE预置的PHP Wapper类可以非常方便地对本地读写进行修改。
例如:
本地读写file_put_contents( PATH.'/mycode.txt','dummy test');
可以通过在PATH前加'saemc://'即可把文件写到Memcache中,即file_put_contents( 'saemc://'.PATH.'/mycode.txt','dummy test'); 这种方式对于本地读写其他函数如file_get_contents,fopen,fwrite等也同样适用,例如要想读去上面的文件只需要file_get_contents( 'saemc://'.PATH.'/mycode.txt','dummy test');即可
同样也可以通过在PATH前加'saestor://'.$DOMAIN.'/'的方式把文件保存到Storage中。但是请注意Storage的存与取其实都是网络读写的过程,比本地读写要慢很多,所以建议对于模板这种读取比较频繁又可以快速生成的文件保存到Memcache里,不然会严重影响性能。
很多微博应用会有生成图片然后发布到微博的功能,其中生成的图片必须保存到Storage里.如果简单的使用'saestor://'修改原来的本地读 写逻辑同样会遇到Storage读写效率低的问题,建议把流程修改为先把图片保存为临时文件然后分别上传到Storage和微博中,这样可以减少一次 Storage的读取过程节省大量时间。