lob.php
来自「开源邮件管理系统」· PHP 代码 · 共 265 行
PHP
265 行
<?php// +----------------------------------------------------------------------+// | PHP version 5 |// +----------------------------------------------------------------------+// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, |// | Stig. S. Bakken, Lukas Smith |// | All rights reserved. |// +----------------------------------------------------------------------+// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |// | API as well as database abstraction for PHP applications. |// | This LICENSE is in the BSD license style. |// | |// | Redistribution and use in source and binary forms, with or without |// | modification, are permitted provided that the following conditions |// | are met: |// | |// | Redistributions of source code must retain the above copyright |// | notice, this list of conditions and the following disclaimer. |// | |// | Redistributions in binary form must reproduce the above copyright |// | notice, this list of conditions and the following disclaimer in the |// | documentation and/or other materials provided with the distribution. |// | |// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |// | Lukas Smith nor the names of his contributors may be used to endorse |// | or promote products derived from this software without specific prior|// | written permission. |// | |// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |// | POSSIBILITY OF SUCH DAMAGE. |// +----------------------------------------------------------------------+// | Author: Lukas Smith <smith@pooteeweet.org> |// +----------------------------------------------------------------------+//// $Id: LOB.php,v 1.34 2006/10/25 11:52:21 lsmith Exp $/** * @package MDB2 * @category Database * @author Lukas Smith <smith@pooteeweet.org> */require_once 'MDB2.php';/** * MDB2_LOB: user land stream wrapper implementation for LOB support * * @package MDB2 * @category Database * @author Lukas Smith <smith@pooteeweet.org> */class MDB2_LOB{ /** * contains the key to the global MDB2 instance array of the associated * MDB2 instance * * @var integer * @access protected */ var $db_index; /** * contains the key to the global MDB2_LOB instance array of the associated * MDB2_LOB instance * * @var integer * @access protected */ var $lob_index; // {{{ stream_open() /** * open stream * * @param string specifies the URL that was passed to fopen() * @param string the mode used to open the file * @param int holds additional flags set by the streams API * @param string not used * * @return bool * @access public */ function stream_open($path, $mode, $options, &$opened_path) { if (!preg_match('/^rb?\+?$/', $mode)) { return false; } $url = parse_url($path); if (empty($url['host'])) { return false; } $this->db_index = (int)$url['host']; if (!isset($GLOBALS['_MDB2_databases'][$this->db_index])) { return false; } $db =& $GLOBALS['_MDB2_databases'][$this->db_index]; $this->lob_index = (int)$url['user']; if (!isset($db->datatype->lobs[$this->lob_index])) { return false; } return true; } // }}} // {{{ stream_read() /** * read stream * * @param int number of bytes to read * * @return string * @access public */ function stream_read($count) { if (isset($GLOBALS['_MDB2_databases'][$this->db_index])) { $db =& $GLOBALS['_MDB2_databases'][$this->db_index]; $db->datatype->_retrieveLOB($db->datatype->lobs[$this->lob_index]); $data = $db->datatype->_readLOB($db->datatype->lobs[$this->lob_index], $count); $length = strlen($data); if ($length == 0) { $db->datatype->lobs[$this->lob_index]['endOfLOB'] = true; } $db->datatype->lobs[$this->lob_index]['position'] += $length; return $data; } } // }}} // {{{ stream_write() /** * write stream, note implemented * * @param string data * * @return int * @access public */ function stream_write($data) { return 0; } // }}} // {{{ stream_tell() /** * return the current position * * @return int current position * @access public */ function stream_tell() { if (isset($GLOBALS['_MDB2_databases'][$this->db_index])) { $db =& $GLOBALS['_MDB2_databases'][$this->db_index]; return $db->datatype->lobs[$this->lob_index]['position']; } } // }}} // {{{ stream_eof() /** * Check if stream reaches EOF * * @return bool * @access public */ function stream_eof() { if (!isset($GLOBALS['_MDB2_databases'][$this->db_index])) { return true; } $db =& $GLOBALS['_MDB2_databases'][$this->db_index]; $result = $db->datatype->_endOfLOB($db->datatype->lobs[$this->lob_index]); if (version_compare(phpversion(), "5.0", ">=") && version_compare(phpversion(), "5.1", "<") ) { return !$result; } return $result; } // }}} // {{{ stream_seek() /** * Seek stream, not implemented * * @param int offset * @param int whence * * @return bool * @access public */ function stream_seek($offset, $whence) { return false; } // }}} // {{{ stream_stat() /** * return information about stream * * @access public */ function stream_stat() { if (isset($GLOBALS['_MDB2_databases'][$this->db_index])) { $db =& $GLOBALS['_MDB2_databases'][$this->db_index]; return array( 'db_index' => $this->db_index, 'lob_index' => $this->lob_index, ); } } // }}} // {{{ stream_close() /** * close stream * * @access public */ function stream_close() { if (isset($GLOBALS['_MDB2_databases'][$this->db_index])) { $db =& $GLOBALS['_MDB2_databases'][$this->db_index]; if (isset($db->datatype->lobs[$this->lob_index])) { $db->datatype->_destroyLOB($db->datatype->lobs[$this->lob_index]); unset($db->datatype->lobs[$this->lob_index]); } } } // }}}}// register streams wrapperif (!stream_wrapper_register("MDB2LOB", "MDB2_LOB")) { MDB2::raiseError(); return false;}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?