©
本文档使用
php.cn手册 发布
(PHP 4 >= 4.3.2, PHP 5)
streamWrapper::dir_readdir — Read entry from directory handle
This method is called in response to readdir() .
此函数没有参数。
Should return string representing the next filename, or
FALSE
if there is no next file.
Note:
The return value will be casted to string .
调用此方法失败将给出
E_WARNING
(未实现)。
Example #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 );
?>
以上例程的输出类似于:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|