@ 2015-12-01T08:30:22Z <?php
class StringStreamWrapper {
const PROTOCOL = "stringstream";
private $stringstream;
private $position;
private $stringlength;
public function stream_open($path, $mode, $options, &$opened_path) {
$contextOptions = stream_context_get_options($this->context);
if (!isset($contextOptions[self::PROTOCOL]['string']))
return false;
$this->position = 0;
// this is our stream!
$this->stringstream = $contextOptions[self::PROTOCOL]['string'];
$this->stringlength = strlen($this->stringstream);
return true;
}
public function stream_read($len) {
$data = substr($this->stringstream, $this->position, $len);
$this->position += strlen($data);
return $data;
}
public function stream_write($data){
$l = strlen($data);
$this->stringstream = substr($this->stringstream, 0, $this->position) . $data . substr($this->stringstream, $this->position += $l);
$this->stringlength = strlen($this->stringstream);
return $l;
}
public function stream_seek($offset, $whence = SEEK_SET) {
if ($whence == SEEK_CUR) {
$this->position += $offset;
}
else if ($whence == SEEK_END) {
$this->position = $this->stringlength + $offset;
}
else {
$this->position = $offset;
}
return true;
}
public function stream_tell() {
return $this->position;
}
public function stream_eof() {
return ($this->position >= $this->stringlength);
}
public function stream_stat() {
return array(
7 => $this->stringlength,
'size' => $this->stringlength,
);
}
static public function Open($string) {
$context = stream_context_create(array(self::PROTOCOL => array('string' => &$string)));
return fopen(self::PROTOCOL . "://",'r', false, $context);
}
}
stream_wrapper_register(StringStreamWrapper::PROTOCOL, "StringStreamWrapper");
class replace_nullchar_filter extends php_user_filter {
function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = str_replace("\0", "", $bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
stream_filter_register('replacenullchar', 'replace_nullchar_filter');
class StringStreamWrapperFixed {
public static function bug68532fixed() {
if (defined('BUG68532FIXED'))
return BUG68532FIXED;
return version_compare(PHP_VERSION, '5.6.5', '>=') ||
(version_compare(PHP_VERSION, '5.5.21', '>=') && version_compare(PHP_VERSION, '5.6.0', '<'));
}
public static function Open($string) {
ZLog::Write(LOGLEVEL_DEBUG, "StringStreamWrapper::Open(): len = ".strlen($string));
if (self::bug68532fixed()) {
$stream = fopen('php://temp', 'r+');
} else {
$stream = tmpfile();
}
fwrite($stream, $string);
rewind($stream);
return $stream;
}
}
#######################################
$testString = 'test';
echo "base64_encode = " . base64_encode($testString).PHP_EOL;
#######################################
$stream = fopen('php://memory','r+');
fwrite($stream, $testString);
rewind($stream);
stream_filter_append($stream, 'convert.base64-encode');
echo "memoryStream 1 = " . stream_get_contents($stream).PHP_EOL;
#######################################
$stream = fopen('php://memory','r+');
fwrite($stream, $testString);
rewind($stream);
stream_filter_append($stream, 'replacenullchar');
stream_filter_append($stream, 'convert.base64-encode');
echo "memoryStream 2 = " . stream_get_contents($stream).PHP_EOL;
#######################################
$stream = StringStreamWrapper::Open($testString);
stream_filter_append($stream, 'convert.base64-encode');
echo "StringStreamWrapper 1 = " . stream_get_contents($stream).PHP_EOL;
#######################################
$stream = StringStreamWrapper::Open($testString);
stream_filter_append($stream, 'replacenullchar');
stream_filter_append($stream, 'convert.base64-encode');
echo "StringStreamWrapper 2 = " . stream_get_contents($stream).PHP_EOL;
#######################################
$stream = StringStreamWrapperFixed::Open($testString);
stream_filter_append($stream, 'convert.base64-encode');
echo "StringStreamWrapperFixed 1 = " . stream_get_contents($stream).PHP_EOL;
#######################################
$stream = StringStreamWrapperFixed::Open($testString);
stream_filter_append($stream, 'replacenullchar');
stream_filter_append($stream, 'convert.base64-encode');
echo "StringStreamWrapperFixed 2 = " . stream_get_contents($stream).PHP_EOL;
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for git.master , git.master_jit , rfc.property-hooks Deprecated: Return type of replace_nullchar_filter::filter($in, $out, &$consumed, $closing) should either be compatible with php_user_filter::filter($in, $out, &$consumed, bool $closing): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/bkHmm on line 74
base64_encode = dGVzdA==
memoryStream 1 = dGVzdA==
memoryStream 2 = dGVzdA==
Deprecated: Creation of dynamic property StringStreamWrapper::$context is deprecated in /in/bkHmm on line 68
StringStreamWrapper 1 = dGVzdA==
Deprecated: Creation of dynamic property StringStreamWrapper::$context is deprecated in /in/bkHmm on line 68
StringStreamWrapper 2 = dGVzdA==
Fatal error: Uncaught Error: Class "ZLog" not found in /in/bkHmm:95
Stack trace:
#0 /in/bkHmm(140): StringStreamWrapperFixed::Open('test')
#1 {main}
thrown in /in/bkHmm on line 95
Process exited with code 255 . This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches Archived branches Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:dark mode live preview
39.57 ms | 402 KiB | 8 Q