ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SAE平台的文件I/O处理

2021-07-02 18:55:04  阅读:193  来源: 互联网

标签:文件 PHP 本地 平台 SAE IO 临时文件 TmpFS


SAE.ico用过SAE平台的朋友应该知道,出于平台安全性的考虑,SAE限制了用户对于本地IO的使用。但这样对于一些传统的PHP项目,也许带来了很多不便,因为它们都或多或少的有对本地IO的操作,像Smarty的编译模板。为了解决这个问题,SAE提供了TmpFS功能。TmpFS允许开发者通过标准的IO函数临时读写本地IO,这样方便了很多非SAE项目的移植。

      用过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 }

 

 

 

   

标签:文件,PHP,本地,平台,SAE,IO,临时文件,TmpFS
来源: https://blog.51cto.com/u_10182395/2972199

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有