diff options
Diffstat (limited to 'ext/standard/tests/file/include_streams.phpt')
-rw-r--r-- | ext/standard/tests/file/include_streams.phpt | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/ext/standard/tests/file/include_streams.phpt b/ext/standard/tests/file/include_streams.phpt new file mode 100644 index 0000000..e459c6a --- /dev/null +++ b/ext/standard/tests/file/include_streams.phpt @@ -0,0 +1,130 @@ +--TEST-- +Stream wrappers in include_path +--FILE-- +<?php +$data1 = $data2 = $data3 = $data4 = $data5 = $data6 = <<<'EOD' +<?php echo __FILE__ . "\n";?> + +EOD; +/*<?*/ + +class mystream +{ + public $path; + public $mode; + public $options; + + public $position; + public $varname; + + function url_stat($path, $flags) { + return array(); + } + + function stream_stat() { + return array(); + } + + function stream_open($path, $mode, $options, &$opened_path) + { + $this->path = $path; + $this->mode = $mode; + $this->options = $options; + + $split = parse_url($path); + if ($split["host"] !== b"GLOBALS" || + empty($split["path"]) || + empty($GLOBALS[substr($split["path"],1)])) { + return false; + } + $this->varname = substr($split["path"],1); + + if (strchr($mode, 'a')) + $this->position = strlen($GLOBALS[$this->varname]); + else + $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_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; + } + } + +} + +if (!stream_wrapper_register("test", "mystream")) { + die("test wrapper registration failed"); +} + +echo file_get_contents("test://GLOBALS/data1"); +include("test://GLOBALS/data1"); +include_once("test://GLOBALS/data2"); +include_once("test://GLOBALS/data2"); +$include_path = get_include_path(); +set_include_path($include_path . PATH_SEPARATOR . "test://GLOBALS"); +echo file_get_contents("data3", true); +include("data3"); +include_once("data4"); +include_once("data4"); +set_include_path("test://GLOBALS" . PATH_SEPARATOR . $include_path); +echo file_get_contents("data5", true); +include("data5"); +include_once("data6"); +include_once("data6"); +?> +--EXPECT-- +<?php echo __FILE__ . "\n";?> +test://GLOBALS/data1 +test://GLOBALS/data2 +<?php echo __FILE__ . "\n";?> +test://GLOBALS/data3 +test://GLOBALS/data4 +<?php echo __FILE__ . "\n";?> +test://GLOBALS/data5 +test://GLOBALS/data6 |