mirror of
https://github.com/php/php-src.git
synced 2024-10-22 08:47:29 +00:00
539f67ed8f
Local user streams must not be able to open(), URLs if allow_url_include is off Implemented new function stream_is_local() [ - stream_wrapper_register() extended with additional optional argument "flags" of type long. This time only one flag is implemented - STREAM_IS_URL, that means that userstream wrapper is remote (URL). By default stream is local. - stream_is_local() is a new function that accepts stream and tell if this stream is local or remote (URL) ]
83 lines
1.5 KiB
PHP
Executable File
83 lines
1.5 KiB
PHP
Executable File
--TEST--
|
|
User streams and include()
|
|
--INI--
|
|
allow_url_fopen=1
|
|
allow_url_include=0
|
|
--FILE--
|
|
<?php
|
|
class test {
|
|
private $data = '<?php echo "Hello World\n";?>';
|
|
private $pos;
|
|
|
|
function stream_open($path, $mode, $options, &$opened_path)
|
|
{
|
|
if (strchr($mode, 'a'))
|
|
$this->pos = strlen($this->data);
|
|
else
|
|
$this->po = 0;
|
|
|
|
return true;
|
|
}
|
|
|
|
function stream_read($count)
|
|
{
|
|
$ret = substr($this->data, $this->pos, $count);
|
|
$this->pos += strlen($ret);
|
|
return $ret;
|
|
}
|
|
|
|
function stream_tell()
|
|
{
|
|
return $this->pos;
|
|
}
|
|
|
|
function stream_eof()
|
|
{
|
|
return $this->pos >= strlen($this->data);
|
|
}
|
|
|
|
function stream_seek($offset, $whence)
|
|
{
|
|
switch($whence) {
|
|
case SEEK_SET:
|
|
if ($offset < $this->data && $offset >= 0) {
|
|
$this->pos = $offset;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
break;
|
|
case SEEK_CUR:
|
|
if ($offset >= 0) {
|
|
$this->pos += $offset;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
break;
|
|
case SEEK_END:
|
|
if (strlen($this->data) + $offset >= 0) {
|
|
$this->pos = strlen($this->data) + $offset;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
stream_register_wrapper("test1", "test", STREAM_IS_URL);
|
|
stream_register_wrapper("test2", "test");
|
|
echo @file_get_contents("test1://hello"),"\n";
|
|
@include "test1://hello";
|
|
echo @file_get_contents("test2://hello"),"\n";
|
|
@include "test2://hello";
|
|
--EXPECT--
|
|
<?php echo "Hello World\n";?>
|
|
<?php echo "Hello World\n";?>
|
|
Hello World
|