• SAE平台的文件I/O处理


          用过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->delete("count.txt")){
    5 echo "ok";
    6 }else{
    7 echo "no";
    8 }

    详情参见KVDB服务文档 ,count.txt是键值...

    参考文档:SAE平台文档

  • 相关阅读:
    mac下完全卸载程序的方法
    Mac下检测NSTableView的滑动事件的方法
    一行代码起动全屏
    Unsupported compiler '4.0' selected for architecture 'i386'类错误解决办法
    编译错误“The run destination My Mac 64bit is not valid for Running the scheme '***',解决办法
    ios项目中导入百度地图SDK出错的问题
    Unable to resolve target 'android9'解决办法
    ios保存录制好的视频到相簿的方法
    NSTableView系列之代码创建(不用nib)
    谈内链优化不是每个站点都能做的
  • 原文地址:https://www.cnblogs.com/HKUI/p/3182557.html
Copyright © 2020-2023  润新知