<?php
echo __FILE__;
if (strlen(__FILE__) < 20)
{
$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';
return;
}
__halt_compiler();
echo __FILE__;
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');
preferences:
38.37 ms | 402 KiB | 5 Q