3v4l.org

run code in 300+ PHP versions simultaneously
<?php class VariableStream { var $position; var $varname; function stream_open($path, $mode, $options, &$opened_path) { $url = parse_url($path); $this->varname = $url["host"]; $this->position = 0; return true; } function stream_read($count) { $p=&$this->position; $ret = substr($GLOBALS[$this->varname], $p, $count); $p += strlen($ret); return $ret; } function stream_write($data){ $v=&$GLOBALS[$this->varname]; $l=strlen($data); $p=&$this->position; $v = substr($v, 0, $p) . $data . substr($v, $p += $l); return $l; } function stream_stat(){ $v=&$GLOBALS[$this->varname]; return array( -1, /*dev*/ 0, /*ino*/ 0, /*mode*/ 1, /*nlink*/ 0, /*uid*/ 0, /*gid*/ 0, /*rdev*/ strlen($v), /*size*/ 0, /*atime*/ 0, /*mtime*/ 0, /*ctime*/ -1, /*blksize*/ -1, /*blocks*/); } function stream_tell() { return $this->position; } function stream_eof() { return $this->position >= strlen($GLOBALS[$this->varname]); } function stream_seek($offset, $whence) { $l=strlen($GLOBALS[$this->varname]); $p=&$this->position; switch ($whence) { case SEEK_SET: $newPos = $offset; break; case SEEK_CUR: $newPos = $p + $offset; break; case SEEK_END: $newPos = $l + $offset; break; default: return false; } $ret = ($newPos >=0 && $newPos <=$l); if ($ret) $p=$newPos; return $ret; } } stream_wrapper_register("var", "VariableStream") or die("Failed to register protocol"); function test_parse($lang) { global $inivar; $inivar = 'standard_lang='.$lang; $arr = parse_ini_file('var://inivar'); var_dump($arr['standard_lang']); } test_parse('en'); test_parse('de'); test_parse('no'); test_parse('es'); test_parse('yes');

preferences:
29.43 ms | 408 KiB | 5 Q