SAE平台的文件I/O处理惩罚

    添加时间:2013-7-10 点击量:

          用过SAE平台的伴侣应当知道,出于平台安然性的推敲,SAE限制了用户对于本地IO的应用。但如许对于一些传统的PHP项目,也许带来了很多不便,因为它们都或多或少的有对本地IO的操纵,像Smarty的编译模板。为懂得决这个题目,SAE供给了TmpFS功能。TmpFS容许开辟者经由过程标准的IO函数姑且读写本地IO,如许便利了很多非SAE项目标移植。


            然则TmpFS是不敷的,从名称来看是姑且文件体系,它的生命周期同于PHP恳求,也就是当该PHP恳求完成履行时,所有写入TmpFS的姑且文件都邑被烧毁。TmpFS是本地姑且文件,不是共享存储,而SAE是全分布式景象,所以不合恳求之间无法经由过程TmpFS共享操纵文件,具体可参照SAE平台文档申明。


     示例:比如我想用TmpFS做个计数器(当然也可以用SAE供给的counter办事)


    代码如下:



     1 <?php
    
    2 ¥file=SAE_TMP_PATH./test.txt;
    3 if(!file_exists¥file)){
    4 file_put_contents¥file,1);
    5 echo 1;
    6 }else{
    7 ¥n=file_get_contents¥file);
    8 ¥n++;
    9 echo ¥n;
    10 file_put_contents¥file¥n);
    11
    12 }
    13
    14
    15 ?>


    发明底子进不了else里履行,因为姑且文件体系跟着每一次的履行停止就已经不存在了,所以每次代码开端时断定(又是一个新的php恳求了),那个姑且文件是不存在了.


    就是说零时文件不克不及共享与两个文件或者一个文件的不应时候恳求之间。


        其实细读SAE文档,不难发明SAE供给的Wrappers里


      KVDB -- saekv://


         saekv://用来读写KVDB 首要用来保存持久存储的数据,最常用的场景是保存设备文件


    这项可以满足我们对持久保存文件的创建批改请求


    在应用这项办事前必须先开启KVDB办事才行。


    下面是计数器的测试代码:



     1 <?php
    
    2 ¥file=saekv://count.txt;
    3 if(!file_exists¥file)){
    4 file_put_contents¥file,1);
    5 echo 1;
    6 }else{
    7
    8 ¥n=file_get_contents¥file);
    9 echo ¥n;
    10 ¥n++;
    11 file_put_contents¥file¥n);
    12
    13
    14 }


    如许就可以了。


    同时删除文件也有两种体式格式


    一种就是php的原生删除体式格式unlink(¥file)就行


    还有一种就是经由过程SAE供给的kvdb数据库删除体式格式:


    代码:



    1 ¥file=saekv://count.txt;
    
    2 ¥kv=new SaeKV();
    3 ¥kv->init();
    4 if¥kv->(count.txt)){
    5 echo ok;
    6 }else{
    7 echo no;
    8 }


    详情拜见KVDB办事文档 ,count.txt是键值...


    参考文档:SAE平台文档



    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: