phpday 2025 - Call For Papers

stream_wrapper_register

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

stream_wrapper_registerRegistra una envoltura de URL implementada como una clase de PHP

Descripción

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

Permite implementar sus propios gestores de protocolo y flujos para usarlos con todas las demás funciones de sistema de archivos (tales como fopen(), fread() etc.).

Parámetros

protocol

El nombre de la envoltura a ser registrada.

classname

El nombre de la clase que implementa protocol.

flags

Debería ser establecido a STREAM_IS_URL si protocol es un protocolo de URL. Por defecto es 0, flujo local.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

stream_wrapper_register() devolverá false si protocol ya tiene un gestor.

Historial de cambios

Versión Descripción
5.2.4 Añadido el parámetro flags.

Ejemplos

Ejemplo #1 Cómo registrar una envoltura de flujo

<?php
$existed
= in_array("var", stream_get_wrappers());
if (
$existed) {
stream_wrapper_unregister("var");
}
stream_wrapper_register("var", "VariableStream");
$mivar = "";

$fp = fopen("var://mivar", "r+");

fwrite($fp, "línea1\n");
fwrite($fp, "línea2\n");
fwrite($fp, "línea3\n");

rewind($fp);
while (!
feof($fp)) {
echo
fgets($fp);
}
fclose($fp);
var_dump($mivar);

if (
$existed) {
stream_wrapper_restore("var");
}

?>

El resultado del ejemplo sería:

línea1
línea2
línea3
string(24) "línea1
línea2
línea3
"

Ver también

add a note

User Contributed Notes 2 notes

up
10
cellog at php dot net
19 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
19 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.
To Top