文字

streamWrapper::dir_readdir

(PHP 4 >= 4.3.2, PHP 5)

streamWrapper::dir_readdirRead entry from directory handle

说明

public string streamWrapper::dir_readdir ( void )

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

以上例程的输出类似于:

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() - 从目录句柄中读取条目
上一篇: 下一篇: