[ Index ]
 

Code source de PHP PEAR 1.4.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/MDB/Modules/ -> LOB.php (source)

   1  <?php
   2  // +----------------------------------------------------------------------+
   3  // | PHP Version 4                                                        |
   4  // +----------------------------------------------------------------------+
   5  // | Copyright (c) 1998-2004 Manuel Lemos, Tomas V.V.Cox,                 |
   6  // | Stig. S. Bakken, Lukas Smith                                         |
   7  // | All rights reserved.                                                 |
   8  // +----------------------------------------------------------------------+
   9  // | MDB is a merge of PEAR DB and Metabases that provides a unified DB   |
  10  // | API as well as database abstraction for PHP applications.            |
  11  // | This LICENSE is in the BSD license style.                            |
  12  // |                                                                      |
  13  // | Redistribution and use in source and binary forms, with or without   |
  14  // | modification, are permitted provided that the following conditions   |
  15  // | are met:                                                             |
  16  // |                                                                      |
  17  // | Redistributions of source code must retain the above copyright       |
  18  // | notice, this list of conditions and the following disclaimer.        |
  19  // |                                                                      |
  20  // | Redistributions in binary form must reproduce the above copyright    |
  21  // | notice, this list of conditions and the following disclaimer in the  |
  22  // | documentation and/or other materials provided with the distribution. |
  23  // |                                                                      |
  24  // | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,    |
  25  // | Lukas Smith nor the names of his contributors may be used to endorse |
  26  // | or promote products derived from this software without specific prior|
  27  // | written permission.                                                  |
  28  // |                                                                      |
  29  // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
  30  // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
  31  // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
  32  // | FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE      |
  33  // | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,          |
  34  // | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
  35  // | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
  36  // |  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  |
  37  // | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          |
  38  // | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
  39  // | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE          |
  40  // | POSSIBILITY OF SUCH DAMAGE.                                          |
  41  // +----------------------------------------------------------------------+
  42  // | Author: Lukas Smith <smith@backendmedia.com>                         |
  43  // +----------------------------------------------------------------------+
  44  //
  45  // $Id: LOB.php,v 1.30.4.1 2004/01/08 13:43:03 lsmith Exp $
  46  //
  47  
  48  if(!defined('MDB_LOB_INCLUDED'))
  49  {
  50      define('MDB_LOB_INCLUDED', 1);
  51  
  52  /**
  53   * MDB Large Object (BLOB/CLOB) classes
  54   *
  55   * @package MDB
  56   * @category Database
  57   * @access private
  58   * @author  Lukas Smith <smith@backendmedia.com>
  59   */
  60  class MDB_LOB
  61  {
  62      var $database;
  63      var $lob;
  64      var $data = '';
  65      var $position = 0;
  66  
  67      function create(&$arguments)
  68      {
  69          if(isset($arguments['Data'])) {
  70              $this->data = $arguments['Data'];
  71          }
  72          return(MDB_OK);
  73      }
  74  
  75      function destroy()
  76      {
  77          $this->data = '';
  78      }
  79  
  80      function endOfLob()
  81      {
  82          return($this->position >= strlen($this->data));
  83      }
  84  
  85      function readLob(&$data, $length)
  86      {
  87          $length = min($length, strlen($this->data) - $this->position);
  88          $data = substr($this->data, $this->position, $length);
  89          $this->position += $length;
  90          return($length);
  91      }
  92  };
  93  
  94  class MDB_LOB_Result extends MDB_LOB
  95  {
  96      var $result_lob = 0;
  97  
  98      function create(&$arguments)
  99      {
 100          if(!isset($arguments['ResultLOB'])) {
 101              return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,
 102                  'it was not specified a result Lob identifier',
 103                  'MDB_Error', TRUE));
 104          }
 105          $this->result_lob = $arguments['ResultLOB'];
 106          return(MDB_OK);
 107      }
 108  
 109      function destroy()
 110      {
 111          $this->database->_destroyResultLob($this->result_lob);
 112      }
 113  
 114      function endOfLob()
 115      {
 116          return($this->database->endOfResultLob($this->result_lob));
 117      }
 118  
 119      function readLob(&$data, $length)
 120      {
 121          $read_length = $this->database->_readResultLob($this->result_lob, $data, $length);
 122          if (MDB::isError($read_length)) {
 123              return($read_length);
 124          }
 125          if($read_length < 0) {
 126              return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,
 127                  'data was read beyond end of data source',
 128                  'MDB_Error', TRUE));
 129          }
 130          return($read_length);
 131      }
 132  };
 133  
 134  class MDB_LOB_Input_File extends MDB_LOB
 135  {
 136      var $file = 0;
 137      var $opened_file = 0;
 138  
 139      function create(&$arguments)
 140      {
 141          if(isset($arguments['File'])) {
 142              if(intval($arguments['File']) == 0) {
 143                  return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,
 144                      'it was specified an invalid input file identifier',
 145                      'MDB_Error', TRUE));
 146              }
 147              $this->file = $arguments['File'];
 148          }
 149          else
 150          {
 151              if(isset($arguments['FileName'])) {
 152                  if((!$this->file = fopen($arguments['FileName'], 'rb'))) {
 153                  return(PEAR::raiseError(NULL, MDB_ERROR_NOT_FOUND, NULL, NULL,
 154                      'could not open specified input file ("'.$arguments['FileName'].'")',
 155                      'MDB_Error', TRUE));
 156                  }
 157                  $this->opened_file = 1;
 158              } else {
 159                  return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,
 160                      'it was not specified the input file',
 161                      'MDB_Error', TRUE));
 162              }
 163          }
 164          return(MDB_OK);
 165      }
 166  
 167      function destroy()
 168      {
 169          if($this->opened_file) {
 170              fclose($this->file);
 171              $this->file = 0;
 172              $this->opened_file = 0;
 173          }
 174      }
 175  
 176      function endOfLob() {
 177          return(feof($this->file));
 178      }
 179  
 180      function readLob(&$data, $length)
 181      {
 182          if(gettype($data = @fread($this->file, $length))!= 'string') {
 183              return(PEAR::raiseError(NULL, MDB_ERROR, NULL, NULL,
 184                  'could not read from the input file',
 185                  'MDB_Error', TRUE));
 186          }
 187          return(strlen($data));
 188      }
 189  };
 190  
 191  class MDB_LOB_Output_File extends MDB_LOB
 192  {
 193      var $file = 0;
 194      var $opened_file = 0;
 195      var $input_lob = 0;
 196      var $opened_lob = 0;
 197      var $buffer_length = 8000;
 198  
 199      function create(&$arguments)
 200      {
 201          if(isset($arguments['BufferLength'])) {
 202              if($arguments['BufferLength'] <= 0) {
 203                  return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,
 204                      'it was specified an invalid buffer length',
 205                      'MDB_Error', TRUE));
 206              }
 207              $this->buffer_length = $arguments['BufferLength'];
 208          }
 209          if(isset($arguments['File'])) {
 210              if(intval($arguments['File']) == 0) {
 211                  return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,
 212                      'it was specified an invalid output file identifier',
 213                      'MDB_Error', TRUE));
 214              }
 215              $this->file = $arguments['File'];
 216          } else {
 217              if(isset($arguments['FileName'])) {
 218                  if((!$this->file = fopen($arguments['FileName'],'wb'))) {
 219                      return(PEAR::raiseError(NULL, MDB_ERROR_NOT_FOUND, NULL, NULL,
 220                          'could not open specified output file ("'.$arguments['FileName'].'")',
 221                          'MDB_Error', TRUE));
 222                  }
 223                  $this->opened_file = 1;
 224              } else {
 225                  return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,
 226                      'it was not specified the output file',
 227                      'MDB_Error', TRUE));
 228              }
 229          }
 230          if(isset($arguments['LOB'])) {
 231              if(!is_object($arguments['LOB'])) {
 232                  $this->destroy();
 233                  return(PEAR::raiseError(NULL, MDB_ERROR_INVALID, NULL, NULL,
 234                      'it was specified an invalid input large object identifier',
 235                      'MDB_Error', TRUE));
 236              }
 237              $this->input_lob = $arguments['LOB'];
 238          } else {
 239              if($this->database
 240                  && isset($arguments['Result'])
 241                  && isset($arguments['Row'])
 242                  && isset($arguments['Field'])
 243                  && isset($arguments['Binary']))
 244              {
 245                  if($arguments['Binary']) {
 246                      $this->input_lob = $this->database->fetchBlob($arguments['Result'],
 247                          $arguments['Row'], $arguments['Field']);
 248                  } else {
 249                      $this->input_lob = $this->database->fetchClob($arguments['Result'],
 250                          $arguments['Row'], $arguments['Field']);
 251                  }
 252                  if($this->input_lob == 0) {
 253                      $this->destroy();
 254                      return(PEAR::raiseError(NULL, MDB_ERROR, NULL, NULL,
 255                          'could not fetch the input result large object',
 256                          'MDB_Error', TRUE));
 257                  }
 258                  $this->opened_lob = 1;
 259              } else {
 260                  $this->destroy();
 261                  return(PEAR::raiseError(NULL, MDB_ERROR_NEED_MORE_DATA, NULL, NULL,
 262                      'it was not specified the input large object identifier',
 263                      'MDB_Error', TRUE));
 264              }
 265          }
 266          return(MDB_OK);
 267      }
 268  
 269      function destroy()
 270      {
 271          if($this->opened_file) {
 272              fclose($this->file);
 273              $this->opened_file = 0;
 274              $this->file = 0;
 275          }
 276          if($this->opened_lob) {
 277              $this->database->destroyLob($this->input_lob);
 278              $this->input_lob = 0;
 279              $this->opened_lob = 0;
 280          }
 281      }
 282  
 283      function endOfLob()
 284      {
 285          return($this->database->endOfLob($this->input_lob));
 286      }
 287  
 288      function readLob(&$data, $length) {
 289          $buffer_length = ($length == 0 ? $this->buffer_length : $length);
 290          $written_full = 0;
 291          do {
 292              for($written = 0;
 293                  !$this->database->endOfLob($this->input_lob)
 294                  && $written < $buffer_length;
 295                  $written += $read)
 296              {
 297                  if(MDB::isError($result = $this->database->
 298                      readLob($this->input_lob, $buffer, $buffer_length)))
 299                  {
 300                      return($result);
 301                  }
 302                  $read = strlen($buffer);
 303                  if(@fwrite($this->file, $buffer, $read)!= $read) {
 304                      return(PEAR::raiseError(NULL, MDB_ERROR, NULL, NULL,
 305                          'could not write to the output file',
 306                          'MDB_Error', TRUE));
 307                  }
 308              }
 309              $written_full += $written;
 310          } while($length == 0 && !$this->database->endOfLob($this->input_lob));
 311          return($written_full);
 312      }
 313  }
 314  
 315  };
 316  ?>


Généré le : Sun Feb 25 14:08:00 2007 par Balluche grâce à PHPXref 0.7