stream_wrapper_register () porotcol kapsamı nedir?

0 Cevap

Hi I am wondering what is the scope of custom wrapper created by this function stream_wrapper_register(). The reason I am asking is because I created a custom wrapper but whenever I try to include contents inside a function they are not displayed.

İşte benim kod:

<?php

class VariableStream {
var $position;
var $varname;

function stream_open($path, $mode, $options, &$opened_path)
{
    $url = parse_url($path);
    $this->varname = $url["host"];
    $this->position = 0;

    return true;
}

function stream_read($count)
{
    $ret = substr($GLOBALS[$this->varname], $this->position, $count);
    $this->position += strlen($ret);
    return $ret;
}

function stream_write($data)
{
    $left = substr($GLOBALS[$this->varname], 0, $this->position);
    $right = substr($GLOBALS[$this->varname], $this->position + strlen($data));
    $GLOBALS[$this->varname] = $left . $data . $right;
    $this->position += strlen($data);
    return strlen($data);
}

function stream_tell()
{
    return $this->position;
}


function stream_eof()
{
    return $this->position >= strlen($GLOBALS[$this->varname]);
}

function stream_seek($offset, $whence)
{
    switch ($whence) {
        case SEEK_SET:
            if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) {
                 $this->position = $offset;
                 return true;
            } else {
                 return false;
            }
            break;

        case SEEK_CUR:
            if ($offset >= 0) {
                 $this->position += $offset;
                 return true;
            } else {
                 return false;
            }
            break;

        case SEEK_END:
            if (strlen($GLOBALS[$this->varname]) + $offset >= 0) {
                 $this->position = strlen($GLOBALS[$this->varname]) + $offset;
                 return true;
            } else {
                 return false;
            }
            break;

        default:
            return false;
    }
}
}

stream_wrapper_register("var", "VariableStream")
or die("Failed to register protocol");

$myvar = "Test contents";
include("var://myvar");
?>

Bu kod çalışıyor ama ben bu son bölümünü değiştirdiğinizde:

function test()
{
$myvar = "Test contents";
include("var://myvar");
}

test();

Içeriği görüntülenir değildir.

0 Cevap