|
|
1.1 misho 1: --TEST--
2: local user streams must not be able to open() url's
3: --INI--
4: allow_url_fopen=1
5: allow_url_include=0
6: --FILE--
7: <?php
8: class test {
9: private $data = '<?php echo "Hello World\n";?>';
10: private $pos;
11: private $stream = null;
12:
13: function stream_open($path, $mode, $options, &$opened_path)
14: {
15: if (strpos($path, "test2://") === 0) {
16: $this->stream = fopen("test1://".substr($path, 8), $mode);
17: return !empty($this->stream);
18: }
19: if (strchr($mode, 'a'))
20: $this->pos = strlen($this->data);
21: else
22: $this->po = 0;
23:
24: return true;
25: }
26:
27: function stream_read($count)
28: {
29: if (!empty($this->stream)) {
30: return fread($this->stream, $count);
31: }
32: $ret = substr($this->data, $this->pos, $count);
33: $this->pos += strlen($ret);
34: return $ret;
35: }
36:
37: function stream_tell()
38: {
39: if (!empty($this->stream)) {
40: return ftell($this->stream);
41: }
42: return $this->pos;
43: }
44:
45: function stream_eof()
46: {
47: if (!empty($this->stream)) {
48: return feof($this->stream);
49: }
50: return $this->pos >= strlen($this->data);
51: }
52:
53: function stream_seek($offset, $whence)
54: {
55: if (!empty($this->stream)) {
56: return fseek($this->stream, $offset, $whence);
57: }
58: switch($whence) {
59: case SEEK_SET:
60: if ($offset < $this->data && $offset >= 0) {
61: $this->pos = $offset;
62: return true;
63: } else {
64: return false;
65: }
66: break;
67: case SEEK_CUR:
68: if ($offset >= 0) {
69: $this->pos += $offset;
70: return true;
71: } else {
72: return false;
73: }
74: break;
75: case SEEK_END:
76: if (strlen($this->data) + $offset >= 0) {
77: $this->pos = strlen($this->data) + $offset;
78: return true;
79: } else {
80: return false;
81: }
82: break;
83: default:
84: return false;
85: }
86: }
87:
88: }
89:
90: stream_register_wrapper("test1", "test", STREAM_IS_URL);
91: stream_register_wrapper("test2", "test");
92: echo @file_get_contents("test1://hello"),"\n";
93: @include "test1://hello";
94: echo @file_get_contents("test2://hello"),"\n";
95: include "test2://hello";
96: --EXPECTF--
97: <?php echo "Hello World\n";?>
98: <?php echo "Hello World\n";?>
99:
100: Warning: fopen(): test1:// wrapper is disabled in the server configuration by allow_url_include=0 in %sinclude_userstream_002.php on line 10
101:
102: Warning: fopen(test1://hello): failed to open stream: no suitable wrapper could be found in %sinclude_userstream_002.php on line 10
103:
104: Warning: include(test2://hello): failed to open stream: "test::stream_open" call failed in %sinclude_userstream_002.php on line 89
105:
106: Warning: include(): Failed opening 'test2://hello' for inclusion (include_path='%s') in %sinclude_userstream_002.php on line 89