3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php class FooWrapper { protected $opened = false; public function stream_close() { if (!$this->opened) { throw new RuntimeException("Closing an unopened stream"); } $this->opened = false; } public function stream_open($path, $mode, $options, &$opened_path) { if ($this->opened) { throw new Exception("opened already"); } if ($path == "foo://foo") { throw new Exception("Foo"); } $this->opened = true; return true; } public function stream_read($count) { return str_repeat('f', $count); } } stream_wrapper_register("foo", "FooWrapper"); try { $foo = fopen("foo://foo", "r"); } catch (Exception $e) { var_dump($e); } try { $f = fopen("foo://bar", "r"); var_dump(fread($f, 10)); fclose($f); } catch (Exception $e) { var_dump($e); }
based on nrh1L
Output for 5.4.0 - 7.2.0
Warning: fopen(foo://foo): failed to open stream: "FooWrapper::stream_open" call failed in /in/SZfHt on line 29 object(Exception)#2 (7) { ["message":protected]=> string(3) "Foo" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(9) "/in/SZfHt" ["line":protected]=> int(16) ["trace":"Exception":private]=> array(2) { [0]=> array(4) { ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "->" ["args"]=> array(4) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" [2]=> int(0) [3]=> NULL } } [1]=> array(4) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(5) "fopen" ["args"]=> array(2) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" } } } ["previous":"Exception":private]=> NULL } Warning: fread(): FooWrapper::stream_eof is not implemented! Assuming EOF in /in/SZfHt on line 36 string(10) "ffffffffff"
Output for 5.3.3 - 5.3.29
Warning: fopen(foo://foo): failed to open stream: "FooWrapper::stream_open" call failed in /in/SZfHt on line 29 object(Exception)#2 (7) { ["message":protected]=> string(3) "Foo" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(9) "/in/SZfHt" ["line":protected]=> int(16) ["trace":"Exception":private]=> array(2) { [0]=> array(4) { ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "->" ["args"]=> array(4) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" [2]=> int(4) [3]=> NULL } } [1]=> array(4) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(5) "fopen" ["args"]=> array(2) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" } } } ["previous":"Exception":private]=> NULL } Warning: fread(): FooWrapper::stream_eof is not implemented! Assuming EOF in /in/SZfHt on line 36 string(10) "ffffffffff"
Output for 5.3.0 - 5.3.2
Warning: fopen(foo://foo): failed to open stream: "FooWrapper::stream_open" call failed in /in/SZfHt on line 0 object(Exception)#2 (7) { ["message":protected]=> string(3) "Foo" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(9) "/in/SZfHt" ["line":protected]=> int(16) ["trace":"Exception":private]=> array(2) { [0]=> array(4) { ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "->" ["args"]=> array(4) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" [2]=> int(4) [3]=> NULL } } [1]=> array(4) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(5) "fopen" ["args"]=> array(2) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" } } } ["previous":"Exception":private]=> NULL } Warning: fread(): FooWrapper::stream_eof is not implemented! Assuming EOF in /in/SZfHt on line 36 string(10) "ffffffffff"
Output for 5.0.5 - 5.2.17
Warning: fopen(foo://foo): failed to open stream: "FooWrapper::stream_open" call failed in /in/SZfHt on line 40 object(Exception)#2 (6) { ["message:protected"]=> string(3) "Foo" ["string:private"]=> string(0) "" ["code:protected"]=> int(0) ["file:protected"]=> string(9) "/in/SZfHt" ["line:protected"]=> int(16) ["trace:private"]=> array(2) { [0]=> array(4) { ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "->" ["args"]=> array(4) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" [2]=> int(4) [3]=> NULL } } [1]=> array(4) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(5) "fopen" ["args"]=> array(2) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" } } } } Warning: fread(): FooWrapper::stream_eof is not implemented! Assuming EOF in /in/SZfHt on line 36 string(10) "ffffffffff"
Output for 5.0.3 - 5.0.4
Warning: fopen(foo://foo): failed to open stream: "FooWrapper::stream_open" call failed in /in/SZfHt on line 40 object(Exception)#2 (6) { ["message:protected"]=> string(3) "Foo" ["string:private"]=> string(0) "" ["code:protected"]=> int(0) ["file:protected"]=> string(9) "/in/SZfHt" ["line:protected"]=> int(16) ["trace:private"]=> array(3) { [0]=> array(5) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(16) ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "::" } [1]=> array(6) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "->" ["args"]=> array(4) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" [2]=> int(4) [3]=> NULL } } [2]=> array(4) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(5) "fopen" ["args"]=> array(2) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" } } } } Warning: fread(): FooWrapper::stream_eof is not implemented! Assuming EOF in /in/SZfHt on line 36 string(10) "ffffffffff"
Output for 5.0.0 - 5.0.2
Warning: fopen(foo://foo): failed to open stream: "FooWrapper::stream_open" call failed in /in/SZfHt on line 40 object(Exception)#2 (6) { ["message:protected"]=> string(3) "Foo" ["string:private"]=> string(0) "" ["code:protected"]=> int(0) ["file:protected"]=> string(9) "/in/SZfHt" ["line:protected"]=> int(16) ["trace:private"]=> array(2) { [0]=> array(6) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(11) "stream_open" ["class"]=> string(10) "FooWrapper" ["type"]=> string(2) "->" ["args"]=> array(4) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" [2]=> int(4) [3]=> NULL } } [1]=> array(4) { ["file"]=> string(9) "/in/SZfHt" ["line"]=> int(29) ["function"]=> string(5) "fopen" ["args"]=> array(2) { [0]=> string(9) "foo://foo" [1]=> string(1) "r" } } } } Warning: fread(): FooWrapper::stream_eof is not implemented! Assuming EOF in /in/SZfHt on line 36 string(10) "ffffffffff"
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/SZfHt on line 4
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.4.1
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/SZfHt on line 4
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/SZfHt on line 4
Process exited with code 255.