3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php class VariableStream { var $position; var $varname; function stream_open($path, $mode, $options, &$opened_path) { echo "opening\n"; $url = parse_url($path); $this->varname = $url["host"]; $this->position = 0; return true; } function stream_read($count) { echo "reading\n"; $ret = substr($GLOBALS[$this->varname], $this->position, $count); $this->position += strlen($ret); return $ret; } function stream_write($data) { echo "writing\n"; $left = substr($GLOBALS[$this->varname], 0, $this->position); $right = substr($GLOBALS[$this->varname], $this->position + strlen($data)); $GLOBALS[$this->varname] = $left . $data . $right; $this->position += strlen($data); return strlen($data); } function stream_tell() { echo "telling\n"; return $this->position; } function stream_eof() { echo "eoffing\n"; return $this->position >= strlen($GLOBALS[$this->varname]); } function stream_seek($offset, $whence) { echo "seeking\n"; if ($whence === SEEK_SET && $offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) { $this->position = $offset; return true; } if ($whence === SEEK_CUR && $offset >= 0) { $this->position += $offset; return true; } if ($whence === SEEK_END && strlen($GLOBALS[$this->varname]) + $offset >= 0) { $this->position = strlen($GLOBALS[$this->varname]) + $offset; return true; } return false; } function stream_metadata($path, $option, $var) { echo "metaing\n"; if ($option === STREAM_META_TOUCH) { $url = parse_url($path); $varname = $url["host"]; if (! isset($GLOBALS[$varname])) { $GLOBALS[$varname] = ''; } return true; } return false; } function stream_stat() { echo "stating\n"; return array( 0, // device number 0, // inode number 0, // inode protection mode 0, // number of links 0, // userid of owner 0, // groupid of owner 0, // device type, if inode device strlen($GLOBALS[$this->varname]), // size in bytes time(), // atime - time of last access time(), // mtime - time of last modification time(), // ctime - time of creation -1, // block size of filesystem I/O -1 // number of 512-byte blocks allocated ); } } stream_wrapper_register("var", "VariableStream"); $myvar = "fooey"; $v = include 'var://myvar'; var_dump($v);
Output for 5.3.0 - 5.6.28, 7.0.0 - 7.1.0
opening stating stating reading eoffing reading eoffing fooeyint(1)
Output for hhvm-3.13.2
Warning: include(var://myvar): File not found in /in/RTG9j on line 101 bool(false)
Output for hhvm-3.10.0 - 3.12.0
Warning: File not found: var://myvar in /in/RTG9j on line 101 bool(false)
Output for 5.1.3 - 5.2.17
opening reading eoffing reading eoffing fooeyint(1)
Output for 5.0.0 - 5.1.2
Strict Standards: var: Deprecated. Please use the public/private/protected modifiers in /in/RTG9j on line 4 Strict Standards: var: Deprecated. Please use the public/private/protected modifiers in /in/RTG9j on line 5 opening reading eoffing reading eoffing fooeyint(1)
Output for 4.3.9 - 4.4.9
opening seeking telling reading eoffing reading eoffing reading eoffing fooeyint(1)
Output for 4.3.2 - 4.3.8
opening seeking telling reading eoffing reading eoffing reading eoffing reading eoffing fooeyint(1)
Output for 4.3.0 - 4.3.1
Fatal error: Call to undefined function: stream_wrapper_register() in /in/RTG9j on line 97