<?php
//echo __FILE__;
$fp = fopen(__FILE__, 'r');
// seek file pointer to data
fseek($fp, __COMPILER_HALT_OFFSET__);
file_put_contents('/tmp/abcdefghi.php', '<?php' . PHP_EOL . stream_get_contents($fp));
require_once '/tmp/abcdefghi.php';
__halt_compiler();
//echo __FILE__;
var_dump(phpversion());
class Custom_StreamWrapper
{
public $context;
public static function getPath($url, $mustExist = true)
{
$parts = explode('://', $url, 2);
list($scheme, $path) = $parts;
$path = stream_resolve_include_path($path);
if (false === $path)
{
if ($mustExist)
{
throw new Exception('error');
}
// centralize the stream_resolve_include_path logic
return self::getPath(dirname($url)) .'/'. basename($url);
}
return $path;
}
public function stream_open($path, $mode, $options, &$openedPath)
{
// Modes 'a', 'c', 'w', 'x' are documented as: "If the file does not exist, attempt to create it" - so detect dir first and add filename
if (in_array(substr($mode, 0, 1), array('a', 'c', 'w', 'x')))
$filepath = self::getPath($path, false);
if (!isset($filepath))
$filepath = self::getPath($path);
if ($options & STREAM_USE_PATH)
$openedPath = $filepath;
$this->_fp = fopen($filepath, $mode);
return (bool)$this->_fp;
}
public function stream_write($data)
{
return fwrite($this->_fp, $data);
}
public function unlink($path)
{
return unlink(self::getPath($path));
}
public function url_stat($path, $flags)
{
try
{
if ($flags & STREAM_URL_STAT_LINK)
return lstat(self::getPath($path));
else
return stat(self::getPath($path));
}
catch (Exception $e)
{
if ($flags & STREAM_URL_STAT_QUIET)
return false;
throw $e;
}
}
}
if (!is_dir('/tmp/cache'))
mkdir('/tmp/cache');
set_include_path('/tmp');
stream_wrapper_register('react', 'Custom_StreamWrapper');
file_exists('react://cache/react_unittest_filecache');
file_put_contents('react://cache/react_unittest_filecache', 'waa');
echo 'unlink';
unlink('react://cache/react_unittest_filecache');
file_exists('react://cache/react_unittest_filecache');
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename: /in/ng4K1
function name: (null)
number of ops: 19
compiled vars: !0 = $fp
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
5 0 E > INIT_FCALL 'fopen'
1 SEND_VAL '%2Fin%2Fng4K1'
2 SEND_VAL 'r'
3 DO_ICALL $1
4 ASSIGN !0, $1
8 5 INIT_FCALL 'fseek'
6 SEND_VAR !0
7 SEND_VAL 263
8 DO_ICALL
10 9 INIT_FCALL 'file_put_contents'
10 SEND_VAL '%2Ftmp%2Fabcdefghi.php'
11 INIT_FCALL 'stream_get_contents'
12 SEND_VAR !0
13 DO_ICALL $4
14 CONCAT ~5 '%3C%3Fphp%0A', $4
15 SEND_VAL ~5
16 DO_ICALL
11 17 INCLUDE_OR_EVAL '%2Ftmp%2Fabcdefghi.php', REQUIRE_ONCE
13 18 > RETURN 1
Generated using Vulcan Logic Dumper, using php 8.0.0
preferences:
154.44 ms | 1394 KiB | 21 Q