Alpha2新功能之TMPFS

为什么需要TMPFS

出于性能和分布式结构的考虑,SAE环境上是不允许写本地文件的.

就是说,你不能用php在当前目录生成文件.

需要在本地生成文件的情况大致分以下几种:

  • 缓存
  • 配置文件
  • 静态文件
  • 临时文件

对于缓存来说,我们推荐使用memcached.它基于内存,速度也非常快.

而配置文件,我们建议您在本地做好基础配置(如数据库信息之类),直接通过SDK发布;而需要动态配置的部分,则放置在数据库中.

接下来是静态文件,这部分文件您可以放置到Storage中,存放到Storage还有个好处就是可以通过getUrl方法直接获取到下载链接.

以上几种情况都可以通过我们提供的替代方案解决,但是临时文件却始终是个问题.

像Smarty的编译模板,当然,还有为数众多的函数,只支持文件名参数.

为了解决这个问题,TmpFS就闪亮登场了.

TMPFS的特点

在Alpha2上,我们提供了一个新的常量:SAE_TMP_PATH(在”预定义变量”页面最下方).你可以往这个目录下写入临时文件.

不过特别需要注意的是,这里的临时文件有着特别的生命周期,当前页面的请求执行完以后,这个文件就会被删除.

用代码示范下吧:

在一个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'  ); // 出错啦,文件已经不存在了...

说到这里,大家应该明白,用它做缓存不但不会带来性能提升,反而会带来额外的开销.

那么在什么地方需要用TMPFS呢?

取得一张图片的宽和高等信息

$f = new SaeFetchurl();
$img = $f->fetch('a url of a img');
file_put_contents( SAE_TMP_PATH . '/tmp.jpg' , $img );
print_r( getimagesize( SAE_TMP_PATH . '/tmp.jpg'  ) );

Comment

  • Trackback are closed
  • Comments (9)
    • yangball
    • 02/03. 2010 1:56下午

    为什么我申请两天邀请码了,为什么还没发过来的?我等N久了。。。。

  1. me too

  2. 求有码

  3. 想问下这个blog是运行在sae上面吗 :)

  4. 问下 如何删除项目中的某个文件呢?

  5. an image…
    (同求邀请…)

    • 王灵文
    • 02/06. 2010 12:11上午

    每天刷,连续一个多月,这周一终于开放邀请码申请了。这周天天申请,天天看邮箱,唉,都没有邀请码。也不知道如何确定用户的。虽然心有点凉了,可还是没办法,希望sae能活起来

    • jwstudio
    • 02/20. 2010 7:21下午

    求邀请

  6. 那么,对于Smarty的支持如何?按照页面请求完毕缓存文件便删除的描述来看,Smarty内置的缓存程序,是没有起作用(可能是反作用)了。

    另外我有看Smarty的内置写文件的位置,有两个地方,一个是编译、一个是缓存,缓存写可以自定义到其他途径(如缓存到数据库),不过编译方面,写入可以替换(在core文件中)但是读入的方式就要修改smarty类了。
    这里可以看出,要将smarty本身的缓存和编译的读写完全重写,可以但是会修改到smarty核心文件,这里不知道SAE团队会怎么考虑呢?

    不太支持smarty?还是希望修改个特殊版的smarty呢?

Comment are closed.