PHP 8.6.0 Beta 1 is available for testing

stream_wrapper_register

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

stream_wrapper_registerРегистрирует URL-обёртку, которую реализовали как PHP-класс

Описание

function stream_wrapper_register(string $protocol, string $class, int $flags = 0): bool

Функция регистрирует пользовательские обработчики протоколов и потоков для работы с функциями fopen() , fread() и другими функциями, которые работают с файловой системой.

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

protocol

Название регистрируемой обёртки. Допустимые имена протоколов содержат только буквы, цифры, точки (.), плюсы (+) или дефисы (-).

class

Название класса, который реализует протокол из параметра protocol.

flags

В параметр передают флаг STREAM_IS_URL , если параметр protocol — URL-протокол. Значение по умолчанию равно 0 — локальный поток.

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

Функция возвращает true , если выполнилась успешно, или false , если возникла ошибка.

Функция stream_wrapper_register() вернёт значение false , если для протокола protocol уже зарегистрировали обработчик.

Примеры

Пример #1 Пример регистрации обёртки потока

<?php
$existed = in_array("var", stream_get_wrappers());
if ($existed) {
 stream_wrapper_unregister("var");
}
stream_wrapper_register("var", "VariableStream");
$myvar = "";
$fp = fopen("var://myvar", "r+");
fwrite($fp, "line1\n");
fwrite($fp, "line2\n");
fwrite($fp, "line3\n");
rewind($fp);
while (!feof($fp)) {
 echo fgets($fp);
}
fclose($fp);
var_dump($myvar);
if ($existed) {
 stream_wrapper_restore("var");
}
?>

Результат выполнения приведённого примера:

line1
line2
line3
string(18) "line1
line2
line3
"

Смотрите также

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

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

up
10
cellog at php dot net
21 years ago
If you plan to use your wrapper in a require_once you need to define stream_stat(). If you plan to allow any other tests like is_file()/is_dir(), you have to define url_stat().
stream_stat() must define the size of the file, or it will never be included. url_stat() must define mode, or is_file()/is_dir()/is_executable(), and any of those functions affected by clearstatcache() simply won't work.
It's not documented, but directories must be a mode like 040777 (octal), and files a mode like 0100666. If you wish the file to be executable, use 7s instead of 6s. The last 3 digits are exactly the same thing as what you pass to chmod. 040000 defines a directory, and 0100000 defines a file. It would be really helpful to add this to the official manual!
up
2
jhannus at php dot net
21 years ago
It is worth noting that if your wrapper supports stream_flush() then when you flcose() your stream this function will be called prior to closing the stream.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /