note 77055 added to function.stream-wrapper-register
| From: | fordiman at gmail dot com | Date: | Mon, 13 Aug 2007 12:32:17 +0000 |
| Subject: | note 77055 added to function.stream-wrapper-register | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-129440@lists.php.net to get a copy of this message | ||
Updated for PHP 5, and optimized for readability, low line count, and minimum memory use:
<?php
class VariableStream {
private $position;
private $varname;
public function stream_open($path, $mode, $options, &$opened_path) {
$url = parse_url($path);
$this->varname = $url["host"];
$this->position = 0;
return true;
}
public function stream_read($count) {
$p=&$this->position;
$ret = substr($GLOBALS[$this->varname], $p, $count);
$p += strlen($ret);
return $ret;
}
public 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;
}
public function stream_tell() {
return $this->position;
}
public function stream_eof() {
return $this->position >= strlen($GLOBALS[$this->varname]);
}
public 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");
$myvar = "";
$fp = fopen("var://myvar", "r+");
fwrite($fp, "line1\n");
fwrite($fp, "line2\n");
fwrite($fp, "line3\n");
rewind($fp);
while (!feof($fp)) {
echo fgets($fp);
}
fclose($fp);
var_dump($myvar);
?>
----
Server IP: 209.41.74.194
Probable Submitter: 141.152.239.249
----
Manual Page -- http://www.php.net/manual/en/function.stream-wrapper-register.php
Edit -- https://master.php.net/note/edit/77055
Del: integrated -- https://master.php.net/note/delete/77055/integrated
Del: useless -- https://master.php.net/note/delete/77055/useless
Del: bad code -- https://master.php.net/note/delete/77055/bad+code
Del: spam -- https://master.php.net/note/delete/77055/spam
Del: non-english -- https://master.php.net/note/delete/77055/non-english
Del: in docs -- https://master.php.net/note/delete/77055/in+docs
Del: other reasons-- https://master.php.net/note/delete/77055
Reject -- https://master.php.net/note/reject/77055
Search -- https://master.php.net/manage/user-notes.php