streamWrapper
PHP Manual

streamWrapper::dir_readdir

(PHP 4 >= 4.3.2, PHP 5)

streamWrapper::dir_readdirRead entry from directory handle

Descrizione

public string streamWrapper::dir_readdir ( void )

This method is called in response to readdir().

Elenco dei parametri

Questa funzione non contiene parametri.

Valori restituiti

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

Nota:

The return value will be casted to string.

Errori/Eccezioni

Emits E_WARNING if call to this method fails (i.e. not implemented).

Esempi

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->fp512);
        
$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$bytesSEEK_CUR);

        return 
$filename;
    }

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

    public function 
dir_rewinddir() {
        return 
fseek($this->fp0SEEK_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);
?>

Il precedente esempio visualizzerĂ  qualcosa simile a:

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"

Vedere anche:


streamWrapper
PHP Manual