note 99283 added to stream.streamwrapper.example-1

From: 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

« previous php.notes (#171470) next »