note 99283 added to stream.streamwrapper.example-1
| From: | pfe dot skh at gmail dot com | Date: | Sun, 08 Aug 2010 16:47:22 +0000 |
| Subject: | note 99283 added to stream.streamwrapper.example-1 | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-171470@lists.php.net to get a copy of this message | ||
Example of stream used with databases :
Requirement :
A MySQL database with a table named data structured as follow :
CREATE TABLE IF NOT EXISTS
data (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
data varchar(255) NOT NULL,
when_inserted datetime NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Now with the stream implementation :
<?php
class DBStream {
private $_pdo;
private $_ps;
private $_rowId = 0;
function stream_open($path, $mode, $options, &$opath)
{
$url = parse_url($path);
$url['path'] = substr($url['path'], 1);
try{
$this->_pdo = new
PDO("mysql:host={$url['host']};dbname={$url['path']}",
$url['user'], isset($url['pass'])? $url['pass'] : '',
array());
} catch(PDOException $e){ return false; }
switch ($mode){
case 'w' :
$this->_ps = $this->_pdo->prepare('INSERT INTO data VALUES(null, ?,
NOW())');
break;
case 'r' :
$this->_ps = $this->_pdo->prepare('SELECT id, data FROM data WHERE id
> ? LIMIT 1');
break;
default : return false;
}
return true;
}
function stream_read()
{
$this->_ps->execute(array($this->_rowId));
if($this->_ps->rowCount() == 0) return false;
$this->_ps->bindcolumn(1, $this->_rowId);
$this->_ps->bindcolumn(2, $ret);
$this->_ps->fetch();
return $ret;
}
function stream_write($data)
{
$this->_ps->execute(array($data));
return strlen($data);
}
function stream_tell()
{
return $this->_rowId;
}
function stream_eof()
{
$this->_ps->execute(array($this->_rowId));
return (bool) $this->_ps->rowCount();
}
function stream_seek($offset, $step)
{
//No need to be implemented
}
}
stream_register_wrapper('db', 'DBStream');
$fr = fopen('db://testuser@localhost/testdb', 'r');
$fw = fopen('db://testuser:testpassword@localhost/testdb', 'w');
//The two forms above are accepted : for the former, the default password "" will be used
$alg = hash_algos();
$al = $alg[array_rand($alg)];
$data = hash($al, rand(rand(0, 9), rand(10, 999))); // Some random data to be written
fwrite($fw, $data); // Writing the data to the wrapper
while($a = fread($fr, 256)){ //A loop for reading from the wrapper
echo $a . '<br />';
}
?>
Hope it helps, cheers ;)
----
Server IP: 69.147.83.197
Probable Submitter: 41.230.237.193
----
Manual Page -- http://www.php.net/manual/en/stream.streamwrapper.example-1.php
Edit -- https://master.php.net/note/edit/99283
Del: integrated -- https://master.php.net/note/delete/99283/integrated
Del: useless -- https://master.php.net/note/delete/99283/useless
Del: bad code -- https://master.php.net/note/delete/99283/bad+code
Del: spam -- https://master.php.net/note/delete/99283/spam
Del: non-english -- https://master.php.net/note/delete/99283/non-english
Del: in docs -- https://master.php.net/note/delete/99283/in+docs
Del: other reasons-- https://master.php.net/note/delete/99283
Reject -- https://master.php.net/note/reject/99283
Search -- https://master.php.net/manage/user-notes.php