位置: 编程技术 - 正文

PHP:stream_register_wrapper()的用法_Stream函数

编辑:rootadmin
stream_register_wrapper

推荐整理分享PHP:stream_register_wrapper()的用法_Stream函数,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

(PHP 4 >= 4.3.0, PHP 5)

stream_register_wrapper — 注册一个用 PHP 类实现的 URL 封装协议

说明 boolean stream_register_wrapper ( string $protocol , string $classname )

stream_register_wrapper() 允许用户实现自定义的协议处理器和流,用于所有其它的文件系统函数中(例如 fopen(),fread() 等)。

要实现一个封装协议,需要按照如下定义声明一个包含有一些函数的类。当有人对你的流使用 fopen 时,PHP 将创建一个 classname 的实例并调用该实例的方法。必须严格按照如下的描述实现方法 - 否则将导致不明确的行为。

如果 protocol 已经有了处理协议,则 stream_register_wrapper() 将返回 FALSE。

boolean stream_open ( string $path , string $mode , int $options , string $opened_path )

当你的流对象被创建之后立即会调用此方法。path 指定了传入 fopen() 以及此对象需要取回的 URL。可以用 parse_url() 来将此 URL 分割成几部分。

mode 用来打开文件的模式,和 fopen() 中的一样。你有责任检查 mode 对于所请求的 path 是否合法。

options 保存了通过流 API 设定的附加标志。可以保存以下一个值或者用 OR 合并的多个值。 标志 说明 STREAM_USE_PATH 如果 path 是相对路径,则用 include_path 搜索资源。 STREAM_REPORT_ERRORS 如果设定了本标志,你有责任在打开流时用 trigger_error() 来唤起错误。如果没有设定这个标志,那么你不需要唤起任何错误。

如果成功打开了 path,并且在 options 中设定了 STREAM_USE_PATH,你需要将 opened_path 设定为实际被打开的文件/资源的完整路径。

PHP:stream_register_wrapper()的用法_Stream函数

如果成功打开了所请求的资源,应该返回 TRUE,否则返回 FALSE。

void stream_close ( void )

本方法在流关闭时被调用,使用 fclose()。必须释放被流锁定或分配的任何资源。

string stream_read ( int $count )

当对流进行 fread() 和 fgets() 操作时本方法被调用。必须从当前读写位置以字符串返回最多 count 字节的数据。如果可用数据少于 count 字节,则返回尽可能多的数据。如果没有可供返回的数据,返回 FALSE 或者空字符串。必须用成功读取的字节数去更新流的读写位置。

int stream_write ( string $data )

当对流进行 fwrite() 操作时本方法被调用。必须将 data 储存到你的流使用的底层存储空间去。如果没有足够的空间了,则试着保存尽可能多的字节。应该返回成功被保存入流的字节数,或者没有保存时返回 0。必须用成功写入的字节数去更新流的读写位置。

boolean stream_eof ( void )

当对流进行 feof() 操作时本方法被调用。如果读写位置到了流的尽头或者没有更多数据可读时返回 TRUE,否则返回 FALSE。

int stream_tell ( void )

当对流进行 ftell() 操作时本方法被调用。应该返回流的当前读写位置。

boolean stream_seek ( int $offset , int $whence )

当对流进行 fseek() 操作时本方法被调用。应该根据 offset 和 whence 来更新流的读写位置。这些参数的更多信息见 fseek()。如果位置成功更新了则返回 TRUE,否则返回 FALSE。

boolean stream_flush ( void )

当对流进行 fflush() 操作时本方法被调用。如果你在流中缓存了数据还没有写入底层存储空间时,那现在应该做了。如果缓存数据被成功保存(或没有数据可供保存)时返回 TRUE,当数据无法被保存时返回 FALSE。

下面的例子实现了一个 协议处理器,可以允许使用标准的文件系统流函数来对指定的全局变量进行读写操作,例如 fread()。 协议的实现如下,给出 url " 将可以读写 $GLOBALS["foo"]。

Example #1 读写全局变量的流

classVariableStream{var$position;var$varname;functionstream_open($path,$mode,$options,&$opened_path){$url=parse_url($path);$this->varname=$url["host"];$this->position=0;returntrue;}functionstream_read($count){$ret=substr($GLOBALS[$this->varname],$this->position,$count);$this->position+=strlen($ret);return$ret;}functionstream_write($data){$left=substr($GLOBALS[$this->varname],0,$this->position);$right=substr($GLOBALS[$this->varname],$this->position+strlen($data));$GLOBALS[$this->varname]=$left.$data.$right;$this->position+=strlen($data);returnstrlen($data);}functionstream_tell(){return$this->position;}functionstream_eof(){return$this->position>=strlen($GLOBALS[$this->varname]);}functionstream_seek($offset,$whence){switch($whence){caseSEEK_SET:if($offset<strlen($GLOBALS[$this->varname])&&$offset>=0){$this->position=$offset;returntrue;}else{returnfalse;}break;caseSEEK_CUR:if($offset>=0){$this->position+=$offset;returntrue;}else{returnfalse;}break;caseSEEK_END:if(strlen($GLOBALS[$this->varname])+$offset>=0){$this->position=strlen($GLOBALS[$this->varname])+$offset;returntrue;}else{returnfalse;}break;default:returnfalse;}}}stream_register_wrapper("var","VariableStream")ordie("Failedtoregisterprotocol");$myvar="";$fp=fopen("

PHP:stream_socket_pair()的用法_Stream函数 stream_socket_pair(PHP5=5.1.0)stream_socket_pair创建一对完全一样的网络套接字连接流说明arraystream_socket_pair(int$domain,int$type,int$protocol)stream_socket_pair()创建一对完全

PHP:stream_socket_get_name()的用法_Stream函数 stream_socket_get_name(PHP5)stream_socket_get_name获取本地或者远程的套接字名称说明stringstream_socket_get_name(resource$handle,bool$want_peer)返回给定的本地或者远程套接字

PHP:stream_set_chunk_size()的用法_Stream函数 stream_set_chunk_size(PHP5=5.4.0)stream_set_chunk_size设置资源流区块大小说明intstream_set_chunk_size(resource$fp,int$chunk_size)设置资源流区块大小。参数fp目标资源流。chunk

本文链接地址:https://www.jiuchutong.com/biancheng/280589.html 转载请保留说明!

上一篇:PHP:token_name()的用法_Tokenizer函数

下一篇:PHP:stream_socket_pair()的用法_Stream函数

免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

鄂ICP备2023003026号

网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

友情链接: 武汉网站建设 电脑维修 湖南楚通运网络