首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

streamWrapper::dir_readdir

(PHP 4 >= 4.3.2, PHP 5, PHP 7)

streamWrapper::dir_readdir - 从目录句柄中读取条目

描述

代码语言:javascript
复制
public string streamWrapper::dir_readdir ( void )

响应readdir()调用此方法。

参数

该函数没有参数。

返回值

应该返回表示下一个文件名的字符串,或者FALSE没有下一个文件。

注意:返回值将被转换为字符串。

错误/异常

E_WARNING如果对此方法的调用失败(即未实现),则发出。

示例

示例#1从tar档案中列出文件

代码语言:javascript
复制
<?php
class?streamWrapper?{
????protected?$fp;

????public?function?dir_opendir($path,?$options)?{
????????$url?=?parse_url($path);

????????$path?=?$url["host"]?.?$url["path"];

????????if?(!is_readable($path))?{
????????????trigger_error("$path?isn't?readable?for?me",?E_USER_NOTICE);
????????????return?false;
????????}
????????if?(!is_file($path))?{
????????????trigger_error("$path?isn't?a?file",?E_USER_NOTICE);
????????????return?false;
????????}

????????$this->fp?=?fopen($path,?"rb");
????????return?true;
????}

????public?function?dir_readdir()?{
????????//?Extract?the?header?for?this?entry
????????$header??????=?fread($this->fp,?512);
????????$data?=?unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1filetype/a100link/a100linkedfile",?$header);

????????//?Trim?the?filename?and?filesize
????????$filename????=?trim($data["filename"]);

????????//?No?filename??We?are?the?end?of?the?archive
????????if?(!$filename)?{
????????????return?false;
????????}

????????$octal_bytes?=?trim($data["size"]);
????????//?Filesize?is?defined?in?octects
????????$bytes???????=?octdec($octal_bytes);

????????//?tar?rounds?up?filesizes?up?to?multiple?of?512?bytes?(zero?filled)
????????$rest????????=?$bytes?%?512;
????????if?($rest?>?0)?{
????????????$bytes??????+=?512?-?$rest;
????????}

????????//?Seek?over?the?file
????????fseek($this->fp,?$bytes,?SEEK_CUR);

????????return?$filename;
????}

????public?function?dir_closedir()?{
????????return?fclose($this->fp);
????}

????public?function?dir_rewinddir()?{
????????return?fseek($this->fp,?0,?SEEK_SET);
????}
}

stream_wrapper_register("tar",?"streamWrapper");
$handle?=?opendir("tar://example.tar");
while?(false?!==?($file?=?readdir($handle)))?{
????var_dump($file);
}

echo?"Rewinding..\n";
rewind($handle);
var_dump(readdir($handle));

closedir($handle);
?>

上面的例子会输出类似于:

代码语言:javascript
复制
string(13) "construct.xml"
string(16) "dir-closedir.xml"
string(15) "dir-opendir.xml"
string(15) "dir-readdir.xml"
string(17) "dir-rewinddir.xml"
string(9) "mkdir.xml"
string(10) "rename.xml"
string(9) "rmdir.xml"
string(15) "stream-cast.xml"
string(16) "stream-close.xml"
string(14) "stream-eof.xml"
string(16) "stream-flush.xml"
string(15) "stream-lock.xml"
string(15) "stream-open.xml"
string(15) "stream-read.xml"
string(15) "stream-seek.xml"
string(21) "stream-set-option.xml"
string(15) "stream-stat.xml"
string(15) "stream-tell.xml"
string(16) "stream-write.xml"
string(10) "unlink.xml"
string(12) "url-stat.xml"
Rewinding..
string(13) "construct.xml"

另请参阅

  • readdir() - 从目录句柄中读取条目

← streamWrapper::dir_opendir

streamWrapper::dir_rewinddir →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com