El ejemplo de abajo implementa un gestor de protocolo var:// que permite el acceso a la lectura/escritura de una variable global nominada usando un flujo de sistema de archivos estándar tal como fread(). El protocolo var:// implementado abajo, dada la URL "var://foo", leerá/escribirá información hacia/desde $GLOBALS["foo"].
Ejemplo #1 Un Flujo para leer/escribir variables globales
<?php
class FlujoVariable {
    var $posición;
    var $nombre;
    function stream_open($ruta, $modo, $opciones, &$ruta_abierta)
    {
        $url = parse_url($ruta);
        $this->nombre = $url["host"];
        $this->posición = 0;
        return true;
    }
    function stream_read($cuenta)
    {
        $ret = substr($GLOBALS[$this->nombre], $this->posición, $cuenta);
        $this->posición += strlen($ret);
        return $ret;
    }
    function stream_write($data)
    {
        $izquierda = substr($GLOBALS[$this->nombre], 0, $this->posición);
        $derecha = substr($GLOBALS[$this->nombre], $this->posición + strlen($data));
        $GLOBALS[$this->nombre] = $izquierda . $data . $derecha;
        $this->posición += strlen($data);
        return strlen($data);
    }
    function stream_tell()
    {
        return $this->posición;
    }
    function stream_eof()
    {
        return $this->posición >= strlen($GLOBALS[$this->nombre]);
    }
    function stream_seek($índice, $dónde)
    {
        switch ($dónde) {
            case SEEK_SET:
                if ($índice < strlen($GLOBALS[$this->nombre]) && $índice >= 0) {
                     $this->posición = $índice;
                     return true;
                } else {
                     return false;
                }
                break;
            case SEEK_CUR:
                if ($índice >= 0) {
                     $this->posición += $índice;
                     return true;
                } else {
                     return false;
                }
                break;
            case SEEK_END:
                if (strlen($GLOBALS[$this->nombre]) + $índice >= 0) {
                     $this->posición = strlen($GLOBALS[$this->nombre]) + $índice;
                     return true;
                } else {
                     return false;
                }
                break;
            default:
                return false;
        }
    }
    function stream_metadata($ruta, $opción, $var)
    {
        if($opción== STREAM_META_TOUCH) {
            $url = parse_url($ruta);
            $varname = $url["host"];
            if(!isset($GLOBALS[$varname])) {
                $GLOBALS[$varname] = '';
            }
            return true;
        }
        return false;
    }
}
stream_wrapper_register("var", "FlujoVariable")
    or die("Error al registrar el protocolo");
$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);
?>
El resultado del ejemplo sería:
línea1 línea2 línea3 string(24) "línea1 línea2 línea3 "