• PHP stream_wrapper_register


      1 <?php
      2 /**
      3  * 引用:http://php.net/manual/en/function.stream-wrapper-register.php
      4  * 把变量当成文件读写的协议
      5  *
      6  * Class VariableStream
      7  */
      8 class VariableStream
      9 {
     10     private $postition;   // 当前的位置
     11     private $varname;     // 变量的名字
     12 
     13     /**
     14      * 打开
     15      *
     16      * @param $path
     17      * @param $mode
     18      * @param $options
     19      * @param $opened_path
     20      * @return bool
     21      */
     22     public function stream_open($path, $mode, $options, &$opened_path)
     23     {
     24         $url = parse_url($path);
     25 
     26         $this->varname   = $url['host'];
     27         $this->postition = 0;
     28 
     29         return true;
     30     }
     31 
     32     /**
     33      * 读取
     34      *
     35      * @param $count
     36      * @return string
     37      */
     38     public function stream_read($count)
     39     {
     40 
     41         $p   = $this->postition;
     42         $ret = substr($GLOBALS[$this->varname], $p,$count);
     43         $p  += $count;
     44         return $ret;
     45     }
     46 
     47     /**
     48      * 写入
     49      *
     50      * @param $data
     51      * @return int
     52      */
     53     public function stream_write($data)
     54     {
     55         $v = &$GLOBALS[$this->varname];
     56         $l = strlen($data);
     57         $p = &$this->postition;
     58         $v = substr($v,0,$p) .$data.substr($v,$p+=$l);
     59 
     60         return $l;
     61     }
     62 
     63     /**
     64      * 返回位置
     65      *
     66      * @return mixed
     67      */
     68     public function stream_tell()
     69     {
     70         return $this->postition;
     71     }
     72 
     73     /**
     74      * 寻位
     75      *
     76      * @param $offset
     77      * @param $whence
     78      * @return bool
     79      */
     80     public function stream_seek($offset, $whence)
     81     {
     82         $dp = $p = &$this->postition;
     83         $l  = strlen($GLOBALS[$this->varname]);
     84 
     85         switch($whence)
     86         {
     87             case SEEK_SET:
     88                 $p = 0;
     89                 break;
     90             case SEEK_END:
     91                 $p = $l;
     92                 break;
     93             default:
     94                 return false;
     95         }
     96         $p += $offset;
     97         $ret = ($p >= 0 || $p <= $l);
     98         if(!$ret)
     99             $this->postition = $dp;
    100         return $ret;
    101     }
    102 
    103     public function stream_eof()
    104     {
    105         return strlen($GLOBALS[$this->varname])== $this->postition;
    106     }
    107 }
    108 
    109 // 撤销已注册的同名协议
    110 if(in_array('var',stream_get_wrappers()))
    111 {
    112     stream_wrapper_unregister('var');
    113 }
    114 // 注册自己的协议
    115 stream_wrapper_register('var','VariableStream') or die('Failed to register protocol');
    116 
    117 $myvar = "";
    118 $fp = fopen('var://myvar','r+');
    119 if(!$fp){
    120     die('Failed to open the file!');
    121 }
    122 $str = "Hello the world!";
    123 fwrite($fp,$str,strlen($str));
    124 
    125 echo 'The length of the string is ' .strlen($myvar) ."
    ";
    126 echo 'The value of variable ,$myvar,is :' .$myvar ."
    ";
    127 echo 'The position of the cursor is :' .ftell($fp) ."
    ";
    128 echo 'Is at the end of the file :' .(feof($fp) ? 'true':'false') ."
    ";
    129 if(fseek($fp,-16,SEEK_END))
    130 {
    131     echo 'Now,the position is :' .ftell($fp);
    132 }
    学习记录,方便复习
  • 相关阅读:
    List集合之Vector分析
    List集合之ArrayList分析
    Linux下的tar压缩解压缩命令详解
    第五次会议(4.7)
    第四次会议(3.31)
    第三次会议(3.17)
    第二次会议(3.9)
    第一次会议(3.1)
    团队的Kick off
    Parse error: syntax error, unexpected T_ENDFOREACH in..报错处理
  • 原文地址:https://www.cnblogs.com/jingjingdidunhe/p/6346884.html
Copyright © 2020-2023  润新知