如何在 SAE 下操作本地IO

飘逸的风13年前 (2012-12-01)程序8656
因为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' ); // 出错啦,文件已经不存在了...
说到这里,大家应该明白,用它做缓存不但不会带来性能提升,反而会带来额外的开销。

如果使用PHP输入流 php://input 来保存文件(比如xheditor编辑器则使用输入流来保存临时文件),则有以下使用方法:
if(isset($_SERVER['HTTP_CONTENT_DISPOSITION'])&&preg_match('/attachment;\s+name="(.+?)";\s+filename="(.+?)"/i',$_SERVER['HTTP_CONTENT_DISPOSITION'],$info)) {
    $filename = date("YmdHis");
    $localname=urldecode($info[2]);
    $fileInfo=pathinfo($localname);
    $extension=$fileInfo['extension']; // 获取扩展名
    $tempfilename=SAE_TMP_PATH.'/'.$filename.'.tmp'; // 存放在TmpFS中临时文件
    // 把读取的数据写入到临时文件中
    file_put_contents($tempfilename,file_get_contents("php://input"));
    
    $bytes=filesize($tempfilename); // 获取临时文件大小,可以进行大小检测
    
    // 写入到Storage中
    file_put_contents('saestor://upload/'.$filename.'.'.$extension,file_get_contents($tempfilename));
    $targetpath="/upload/".$filename.'.'.$extension;
    echo $targetpath;
}


相关文章

php soap带验证

Server端 <?php class Server { private $authenticated = false;   public function auth($...

Javascript 正则表达式使用手册

一.正则表达式匹配常用语法 “+”字符:规定表达式字符出现一次或多次。 “*”字符:规定表达式字符出现零次或多次。 “?”字符:规定表达式字符出现零次或一次。 ^ 匹配的是字符的开头 ,匹配的...

emlog百度分享插件[提供下载]

emlog百度分享插件[提供下载]

emlog百度分享插件下载地址:bdshare.zip 百度分享概况: 引入社会化流量 用户浏览网站内容时产生的分享行为可以增加网站内容在腾讯空间、新浪微博和人人网等社会化网站的曝光机会...

emlog SyntaxHighlighter 代码高亮插件[提供下载,更新至1.2]

emlog SyntaxHighlighter 代码高亮插件[提供下载,更新至1.2]

emlog SyntaxHighlighter 代码高亮插件,可以把代码贴在代码框中,确定后自动生成高亮代码。 注:本插件已升级,修复在代码很长换行的时候左边的行数不增加问题;插入代码里有HTML标...

ecshop搜索热门关键字的调用

码关键字的设定在:后台-商店设置-显示设置--首页搜索的关键词 {if $searchkeywords} {$lang.hot_search} :  {foreach from...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。