Annotation of embedaddon/php/ext/standard/tests/file/include_streams.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Stream wrappers in include_path
3: --FILE--
4: <?php
5: $data1 = $data2 = $data3 = $data4 = $data5 = $data6 = <<<'EOD'
6: <?php echo __FILE__ . "\n";?>
7:
8: EOD;
9: /*<?*/
10:
11: class mystream
12: {
13: public $path;
14: public $mode;
15: public $options;
16:
17: public $position;
18: public $varname;
19:
20: function url_stat($path, $flags) {
21: return array();
22: }
23:
24: function stream_stat() {
25: return array();
26: }
27:
28: function stream_open($path, $mode, $options, &$opened_path)
29: {
30: $this->path = $path;
31: $this->mode = $mode;
32: $this->options = $options;
33:
34: $split = parse_url($path);
35: if ($split["host"] !== b"GLOBALS" ||
36: empty($split["path"]) ||
37: empty($GLOBALS[substr($split["path"],1)])) {
38: return false;
39: }
40: $this->varname = substr($split["path"],1);
41:
42: if (strchr($mode, 'a'))
43: $this->position = strlen($GLOBALS[$this->varname]);
44: else
45: $this->position = 0;
46:
47: return true;
48: }
49:
50: function stream_read($count)
51: {
52: $ret = substr($GLOBALS[$this->varname], $this->position, $count);
53: $this->position += strlen($ret);
54: return $ret;
55: }
56:
57: function stream_tell()
58: {
59: return $this->position;
60: }
61:
62: function stream_eof()
63: {
64: return $this->position >= strlen($GLOBALS[$this->varname]);
65: }
66:
67: function stream_seek($offset, $whence)
68: {
69: switch($whence) {
70: case SEEK_SET:
71: if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) {
72: $this->position = $offset;
73: return true;
74: } else {
75: return false;
76: }
77: break;
78: case SEEK_CUR:
79: if ($offset >= 0) {
80: $this->position += $offset;
81: return true;
82: } else {
83: return false;
84: }
85: break;
86: case SEEK_END:
87: if (strlen($GLOBALS[$this->varname]) + $offset >= 0) {
88: $this->position = strlen($GLOBALS[$this->varname]) + $offset;
89: return true;
90: } else {
91: return false;
92: }
93: break;
94: default:
95: return false;
96: }
97: }
98:
99: }
100:
101: if (!stream_wrapper_register("test", "mystream")) {
102: die("test wrapper registration failed");
103: }
104:
105: echo file_get_contents("test://GLOBALS/data1");
106: include("test://GLOBALS/data1");
107: include_once("test://GLOBALS/data2");
108: include_once("test://GLOBALS/data2");
109: $include_path = get_include_path();
110: set_include_path($include_path . PATH_SEPARATOR . "test://GLOBALS");
111: echo file_get_contents("data3", true);
112: include("data3");
113: include_once("data4");
114: include_once("data4");
115: set_include_path("test://GLOBALS" . PATH_SEPARATOR . $include_path);
116: echo file_get_contents("data5", true);
117: include("data5");
118: include_once("data6");
119: include_once("data6");
120: ?>
121: --EXPECT--
122: <?php echo __FILE__ . "\n";?>
123: test://GLOBALS/data1
124: test://GLOBALS/data2
125: <?php echo __FILE__ . "\n";?>
126: test://GLOBALS/data3
127: test://GLOBALS/data4
128: <?php echo __FILE__ . "\n";?>
129: test://GLOBALS/data5
130: test://GLOBALS/data6
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>