zoukankan      html  css  js  c++  java
  • SAE临时文件读写例子 SAE_TMP_PATH

     SAE处理文件上传

    $upload_path=SAE_TMP_PATH.'/test.jpg';
    move_uploaded_file($_FILES['file']["tmp_name"],$upload_path);
    $content=file_get_contents($upload_path);
    <?php  
    function sae_write($file,$content){  
      file_put_contents(SAE_TMP_PATH."/".$file,$content);  
    }  
    function sae_read($file){  
      return file_get_contents(SAE_TMP_PATH."/".$file);  
    }  
    ?>  
    <?php sae_write("1.txt","test"); $rs=sae_read("1.txt"); print_r($rs); ?>

    当处理上传图片时,原图被POST上来之后,可直接 move_uploaded_file 到 Storage 下。

    而当需要对上传上来的图片添加水印时,一般是先处理该图然后保存到支持临时读写的TmpFS下,再把这个文件写入到Storage中,但是这时不能够再使用 move_uploaded_file (bool move_uploaded_file( string $filename, string $destination) )函数了,因为如果 $filename 非通过 HTTP 的 HTTP POST 上传时,视为该 $filename 非法,函数将不执行任何操作返回 flase。

    可简单有以下语句完成:

    file_put_contents($filaname, file_get_contents($tmpfile));  
    


    ================
    TmpFS

    因为平台安全性的考虑,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' ); // 出错啦,文件已经不存在了...  

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

      

  • 相关阅读:
    设计模式之适配器模式(Decorator)
    可复用面向对象软件的基础
    dpkg命令的用法
    UML类图几种关系的总结
    Java多线程并发编程之原子变量与非阻塞同步机制
    Java内部类总结
    多线程并发编程之构建自定义同步工具
    多线程并发编程之显示锁ReentrantLock和读写锁
    多线程并发编程之变量
    汇编语言学习系列 冒泡排序实现
  • 原文地址:https://www.cnblogs.com/shaoing/p/6239983.html
Copyright © 2011-2022 走看看