streamWrapper::dir_readdir

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

streamWrapper::dir_readdirRead entry from directory handle

说明

public streamWrapper::dir_readdir(): string|bool

This method is called in response to readdir().

参数

此函数没有参数。

返回值

Should return string representing the next filename, or false if there is no next file.

警告

Returning true or false will have the same effect of signaling there is no next file. However, returning true is discouraged and false should be used to signal this condition instead.

注意:

A non-boolean return value will be casted to string.

错误/异常

调用此方法失败将给出 E_WARNING(未实现)。

示例

示例 #1 Listing files from tar archives

<?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);
?>

以上示例的输出类似于:

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"

参见

添加备注

用户贡献的备注

此页面尚无用户贡献的备注。
To Top