1--TEST--
2bug 40459 - Test whether the constructor of the user-space stream wrapper is called when stream functions are called
3--INI--
4allow_url_fopen=1
5--FILE--
6<?php
7// Test whether the constructor of the user-space stream wrapper is called when stream functions are called
8class testwrapper {
9	private $constructorCalled = false;
10	function __construct() {
11		$this->constructorCalled = true;
12	}
13
14	function stream_open($path, $mode, $options, &$opened_path)
15	{
16		echo $this->constructorCalled ? 'yes' : 'no';
17	  	return true;
18	}
19
20	function url_stat($url, $flags)
21	{
22		echo $this->constructorCalled ? 'yes' : 'no';
23		return array();
24	}
25
26	function unlink($url)
27	{
28		echo $this->constructorCalled ? 'yes' : 'no';
29	}
30
31	function rename($from, $to)
32	{
33		echo $this->constructorCalled ? 'yes' : 'no';
34	}
35
36	function mkdir($dir, $mode, $options)
37	{
38		echo $this->constructorCalled ? 'yes' : 'no';
39	}
40
41	function rmdir($dir, $options)
42	{
43		echo $this->constructorCalled ? 'yes' : 'no';
44	}
45
46	function dir_opendir($url, $options)
47	{
48		echo $this->constructorCalled ? 'yes' : 'no';
49		return TRUE;
50	}
51	function stream_metadata()
52	{
53		echo $this->constructorCalled ? 'yes' : 'no';
54		return TRUE;
55	}
56}
57
58stream_wrapper_register('test', 'testwrapper', STREAM_IS_URL);
59
60echo 'stream_open: ';
61fopen('test://test', 'r');
62echo "\n";
63
64echo 'url_stat: ';
65stat('test://test');
66echo "\n";
67
68echo 'dir_opendir: ';
69opendir('test://test');
70echo "\n";
71
72echo 'rmdir: ';
73rmdir('test://test');
74echo "\n";
75
76echo 'mkdir: ';
77mkdir('test://test');
78echo "\n";
79
80echo 'rename: ';
81rename('test://test', 'test://test2');
82echo "\n";
83
84echo 'unlink: ';
85unlink('test://test');
86echo "\n";
87
88echo 'touch: ';
89touch('test://test', time());
90echo "\n";
91
92
93
94?>
95==DONE==
96--EXPECT--
97stream_open: yes
98url_stat: yes
99dir_opendir: yes
100rmdir: yes
101mkdir: yes
102rename: yes
103unlink: yes
104touch: yes
105==DONE==
106