Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1998-2004 Manuel Lemos, Tomas V.V.Cox, |// | Stig. S. Bakken, Lukas Smith |// | All rights reserved. |// +----------------------------------------------------------------------+// | MDB 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@backendmedia.com> |// +----------------------------------------------------------------------+//// $Id: LOB.php,v 1.30.4.1 2004/01/08 13:43:03 lsmith Exp $//if(!defined('MDB_LOB_INCLUDED')){define('MDB_LOB_INCLUDED', 1);/*** MDB Large Object (BLOB/CLOB) classes** @package MDB* @category Database* @access private* @author Lukas Smith <smith@backendmedia.com>*/class MDB_LOB{var $database;var $lob;var $data = '';var $position = 0;function create(&$arguments){if(isset($arguments['Data'])) {$this->data = $arguments['Data'];}return(MDB_OK);}function destroy(){$this->data = '';}function endOfLob(){return($this->position >= strlen($this->data));}function readLob(&$data, $length){$length = min($length, strlen($this->data) - $this->position);$data = substr($this->data, $this->position, $length);$this->position += $length;return($length);}};class MDB_LOB_Result extends MDB_LOB{var $result_lob = 0;function create(&$arguments){if(!isset($arguments['ResultLOB'])) {return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,'it was not specified a result Lob identifier','MDB_Error', TRUE));}$this->result_lob = $arguments['ResultLOB'];return(MDB_OK);}function destroy(){$this->database->_destroyResultLob($this->result_lob);}function endOfLob(){return($this->database->endOfResultLob($this->result_lob));}function readLob(&$data, $length){$read_length = $this->database->_readResultLob($this->result_lob, $data, $length);if (MDB::isError($read_length)) {return($read_length);}if($read_length < 0) {return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,'data was read beyond end of data source','MDB_Error', TRUE));}return($read_length);}};class MDB_LOB_Input_File extends MDB_LOB{var $file = 0;var $opened_file = 0;function create(&$arguments){if(isset($arguments['File'])) {if(intval($arguments['File']) == 0) {return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,'it was specified an invalid input file identifier','MDB_Error', TRUE));}$this->file = $arguments['File'];}else{if(isset($arguments['FileName'])) {if((!$this->file = fopen($arguments['FileName'], 'rb'))) {return(PEAR::raiseError(NULL, MDB_ERROR_NOT_FOUND, NULL, NULL,'could not open specified input file ("'.$arguments['FileName'].'")','MDB_Error', TRUE));}$this->opened_file = 1;} else {return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,'it was not specified the input file','MDB_Error', TRUE));}}return(MDB_OK);}function destroy(){if($this->opened_file) {fclose($this->file);$this->file = 0;$this->opened_file = 0;}}function endOfLob() {return(feof($this->file));}function readLob(&$data, $length){if(gettype($data = @fread($this->file, $length))!= 'string') {return(PEAR::raiseError(NULL, MDB_ERROR, NULL, NULL,'could not read from the input file','MDB_Error', TRUE));}return(strlen($data));}};class MDB_LOB_Output_File extends MDB_LOB{var $file = 0;var $opened_file = 0;var $input_lob = 0;var $opened_lob = 0;var $buffer_length = 8000;function create(&$arguments){if(isset($arguments['BufferLength'])) {if($arguments['BufferLength'] <= 0) {return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,'it was specified an invalid buffer length','MDB_Error', TRUE));}$this->buffer_length = $arguments['BufferLength'];}if(isset($arguments['File'])) {if(intval($arguments['File']) == 0) {return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,'it was specified an invalid output file identifier','MDB_Error', TRUE));}$this->file = $arguments['File'];} else {if(isset($arguments['FileName'])) {if((!$this->file = fopen($arguments['FileName'],'wb'))) {return(PEAR::raiseError(NULL, MDB_ERROR_NOT_FOUND, NULL, NULL,'could not open specified output file ("'.$arguments['FileName'].'")','MDB_Error', TRUE));}$this->opened_file = 1;} else {return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,'it was not specified the output file','MDB_Error', TRUE));}}if(isset($arguments['LOB'])) {if(!is_object($arguments['LOB'])) {$this->destroy();return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,'it was specified an invalid input large object identifier','MDB_Error', TRUE));}$this->input_lob = $arguments['LOB'];} else {if($this->database&& isset($arguments['Result'])&& isset($arguments['Row'])&& isset($arguments['Field'])&& isset($arguments['Binary'])){if($arguments['Binary']) {$this->input_lob = $this->database->fetchBlob($arguments['Result'],$arguments['Row'], $arguments['Field']);} else {$this->input_lob = $this->database->fetchClob($arguments['Result'],$arguments['Row'], $arguments['Field']);}if($this->input_lob == 0) {$this->destroy();return(PEAR::raiseError(NULL, MDB_ERROR, NULL, NULL,'could not fetch the input result large object','MDB_Error', TRUE));}$this->opened_lob = 1;} else {$this->destroy();return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,'it was not specified the input large object identifier','MDB_Error', TRUE));}}return(MDB_OK);}function destroy(){if($this->opened_file) {fclose($this->file);$this->opened_file = 0;$this->file = 0;}if($this->opened_lob) {$this->database->destroyLob($this->input_lob);$this->input_lob = 0;$this->opened_lob = 0;}}function endOfLob(){return($this->database->endOfLob($this->input_lob));}function readLob(&$data, $length) {$buffer_length = ($length == 0 ? $this->buffer_length : $length);$written_full = 0;do {for($written = 0;!$this->database->endOfLob($this->input_lob)&& $written < $buffer_length;$written += $read){if(MDB::isError($result = $this->database->readLob($this->input_lob, $buffer, $buffer_length))){return($result);}$read = strlen($buffer);if(@fwrite($this->file, $buffer, $read)!= $read) {return(PEAR::raiseError(NULL, MDB_ERROR, NULL, NULL,'could not write to the output file','MDB_Error', TRUE));}}$written_full += $written;} while($length == 0 && !$this->database->endOfLob($this->input_lob));return($written_full);}}};?>