sae 本地 php,如何在 SAE 下操作本地IO

因为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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值