streamWrapper::dir_readdir

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

streamWrapper::dir_readdirЧтение записи из дескриптора директории

Описание

public function streamWrapper::dir_readdir(): string|bool

Этот метод вызывается в процессе выполнения readdir().

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Должна возвращать строку (string), представляющую имя следующего файла, либо false, если следующего файла нет.

Внимание

Возвращение значения true или false будет иметь тот же эффект, что и сигнал об отсутствии следующего файла. Однако возвращение значения true не рекомендуется, и вместо этого следует использовать значение false для сигнализации об этом состоянии.

Замечание:

Возвращаемое значение не логического типа будет преобразовано в строку (string).

Ошибки

Вызывает ошибку уровня E_WARNING, если вызов к этому методу не удался (например, не реализован).

Примеры

Пример #1 Получение списка файлов из tar-архивов

<?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 ", E_USER_NOTICE);
            return false;
        }
        if (!is_file($path)) {
            trigger_error("$path не является файлом", E_USER_NOTICE);
            return false;
        }

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

    public function dir_readdir() {
        // Извлечение заголовка
        $header      = fread($this->fp, 512);
        $data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1filetype/a100link/a100linkedfile", $header);

        // Убираем лишние пробелы в имени файла и его размере
        $filename    = trim($data["filename"]);

        // Нет файла? Значит мы дошли до конца архива
        if (!$filename) {
            return false;
        }

        $octal_bytes = trim($data["size"]);
        // Размер файла определён в восьмеричной системе
        $bytes       = octdec($octal_bytes);

        // tar округляет размеры файлов, чтобы они были
        // кратными 512 байтам (с заполнением нулями)
        $rest        = $bytes % 512;
        if ($rest > 0) {
            $bytes      += 512 - $rest;
        }

        // Перемещаемся внутри файла
        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 "Перемотка в начало..\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() - Получает элемент каталога по его дескриптору

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top