PHP 封装自己的协议

  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) ."\n";
126 echo ‘The value of variable ,$myvar,is :‘ .$myvar ."\n";
127 echo ‘The position of the cursor is :‘ .ftell($fp) ."\n";
128 echo ‘Is at the end of the file :‘ .(feof($fp) ? ‘true‘:‘false‘) ."\n";
129 if(fseek($fp,-16,SEEK_END))
130 {
131     echo ‘Now,the position is :‘ .ftell($fp);
132 }
时间: 2025-01-07 00:49:00

PHP 封装自己的协议的相关文章

使用Swift的代理,闭包来封装一个公用协议减少垃圾代码

iOS开发中,如果不进行适当的封装,使用协议或者继承类来进行开发,你就会遇到传说中的ViewController(以后简称VC) Hell的问题…… 比如说,我们先声网App中为了调用接口,做简单的判断,会有如下的垃圾代码(前辈遗留下来的): override func viewDidLoad() { super.viewDidLoad() var color = UIColor(red: 153/255, green: 204/255, blue: 204/255, alpha: 1) sel

TCP/IP协议原理与应用笔记09:数据通信---封装(邮政系统层次结构:便于理解OSI网络模型)

1. 数据通信----封装: 2. 协议数据单元: PDU:对等层数据通信的单元. 比如Source端的应用层 和 Destination端的应用层是对等层(L7),这个时候L7 data 就是这两个应用层的PDU(协议数据单元). 比如Source端的表示层 和 Destination端的表示层是对等层(L6),这个时候L7 data  H6就是这两个表示层的PDU(协议数据单元). 3. 案例:邮政系统层次结构事例

如何将TS源流重新封装并通过P2P协议传输在安卓终端和苹果终端播放

什么是TS流 TS流(TransportStream)即在MPEG-2系统中,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流.根据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS)和节目流(PS:ProgramStream). 也可以从另外一个层面来理解TS流. TS是MPEG2中提出的一种流媒体的封装格式,适合流媒体播放.在MPEG2中支持了2种媒体播放格式:本地播放的PS流(program Stream),网络播放的流媒体格式TS流

【读书笔记】计算机网络1章:课程介绍、协议、分层

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 本章讲述了这门课程的大致情况,讲述了协议.协议层等基本概念. 目标和动机 课程的主要目标就是介绍计算

协议系列之TCP/IP协议

根据前面介绍的几种协议,将IP协议.TCP协议.UDP协议组合起来,于是便有了TCP/IP协议.现在很多的应用的通信都是建立在TCP/IP协议的基础上,运用非常广泛,很有必要对其学习一下. 打个不太恰当的比方,TCP/IP协议可以看成是邮局与邮递员的关系(实际TCP/IP协议族会包含四层,应用层.传输层.网络层.链路层).这个协议族中的IP协议定位到哪台计算机,而具体到这台计算机的哪个端口(应用程序)就需要TCP协议,一个属于网络层,一个属于传输层,互相依赖,提供有效的解决通信问题的措施.这就好

信息安全技术及应用 互联网安全协议

一.互联网安全协议概述 1.1 互联网协议体系 TCP/IP协议的体系结构 IP数据报格式及TCP/UDP报文段格式 Web技术构成:HTTP协议.HTML标记语言. TCP/IP协议栈中安全机制的相对位置:网络层.运输层和应用层. 1.2 互联网安全协议 1.将安全机制放置在网络层:如IPSec协议,好处是对最终用户和应用程序透明. 2.将安全机制放置在运输层:如SSL协议,好处是对最终用户和应用程序透明. 3.将安全机制放置在应用层:好处是与应用有关的安全服务被嵌入到特定的应用程序中,可根据

HTTP协议:(1)HTTP请求和相关API

1.HTTP请求的知识 TCP/IP协议,关注的是客户端与服务器端之间数据是否传输成功! HTTP协议,是在TCP/IP协议之上封装的一层协议,关注的是数据传输的格式是否规范. 1.1.HTTP请求的示例 HTTP请求由四部分组成:请求行.请求头.一个空行和实体内容(可选). HTTP请求的组成: |--请求行 |--请求头 |--(一个空行) |--实体内容(只有POST请求时才有) HTTP请求的一个示例: GET /myweb/hello HTTP/1.1               --

聊聊HTTPS和SSL/TLS协议

原文地址:http://www.techug.com/https-ssl-tls 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”)3. 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别)4. 大致了解 CA 证书的用途 考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下.如果你自认为不是菜鸟,请略过本章节,直接去看“

[转载] 基于Dubbo的Hessian协议实现远程调用

转载自http://shiyanjun.cn/archives/349.html Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行远程调用,也就是说,服务调用方需要使用Java语言来基于Dubbo调用提供方服务,限制了服务调用方.同时,使用Dubbo的Hessian协议实现提供方服务,而调用方可以使用标准的Hessian接口来调用,原生的Hessian协议已经支持多语言客户端调用,支持语言如下所示: Java:http://h