芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp81/includes/DBA.php
| // | Olaf Conradi
| // +----------------------------------------------------------------------+ // // $Id: DBA.php,v 1.36 2004/05/04 04:42:31 busterb Exp $ // require_once('PEAR.php'); /** * If you add an error code here, make sure you also add a textual * version of it in DBA::errorMessage(). */ // userinfo contains: define('DBA_ERROR', -1); define('DBA_ERROR_UNSUP_DRIVER', -2); // drivername define('DBA_ERROR_UNSUP_PERSISTENCE', -3); define('DBA_ERROR_NO_DRIVER', -4); // drivername define('DBA_ERROR_NO_DBNAME', -5); define('DBA_ERROR_NOSUCHDB', -6); // dbname define('DBA_ERROR_INVALID_MODE', -7); // filemode define('DBA_ERROR_CANNOT_CREATE', -8); // dbname define('DBA_ERROR_CANNOT_OPEN', -9); define('DBA_ERROR_CANNOT_DROP', -10); define('DBA_ERROR_NOT_READABLE', -11); define('DBA_ERROR_NOT_WRITEABLE', -12); define('DBA_ERROR_NOT_OPEN', -13); define('DBA_ERROR_NOT_FOUND', -14); define('DBA_ERROR_ALREADY_EXISTS', -15); // key /** * DBA is a set of classes for handling and extending Berkeley DB style * databases. It works around some of the quirks in the built-in dba * functions in PHP (e.g. gdbm does not support dba_replace), has a file-based * dbm engine for installations where dba support is not included in PHP. * * @author Brent Cook
* @version 1.0 * @access public * @package DBA */ class DBA extends PEAR { /** * Default constructor */ function DBA() { // call the base constructor $this->PEAR(); } /** * Creates a new DBA object * * @static * @param string $driver type of storage object to return * @return object DBA storage object, returned by reference */ function &create($driver = 'file') { if (!function_exists('dba_open') || ($driver=='file')) { require_once 'DBA/Driver/File.php'; return new DBA_Driver_File(); } elseif (in_array($driver, DBA::getDriverList())) { require_once 'DBA/Driver/Builtin.php'; return new DBA_Driver_Builtin($driver); } else { return DBA::raiseError(DBA_ERROR_UNSUP_DRIVER, NULL, NULL, 'driver: '.$driver); } } /** * Deletes a DBA database from the filesystem * * @static * @param string $driver type of storage object to return * @return object DBA storage object, returned by reference */ function db_drop($name, $driver = 'file') { if (!function_exists('dba_open') || ($driver=='file')) { require_once 'DBA/Driver/File.php'; return DBA_Driver_File::db_drop($name); } elseif (in_array($driver, DBA::getDriverList())) { require_once 'DBA/Driver/Builtin.php'; return DBA_Driver_Builtin::db_drop($name); } else { return DBA::raiseError(DBA_ERROR_UNSUP_DRIVER, NULL, NULL, 'driver: '.$driver); } } /** * Returns whether a result code from a DBA method is an error * * @param int $value result code * @return boolean whether $value is a DBA_Error * @access public */ function isError($value) { return (is_object($value) && (is_a($value, 'dba_error') || is_subclass_of($value, 'dba_error'))); } /** * Return a textual error message for a DBA error code * * @param int $value error code * @return string error message, or false if the error code was * not recognized * @access public */ function errorMessage($value) { static $errorMessages; if (!isset($errorMessages)) { $errorMessages = array( DBA_ERROR => 'unknown error', DBA_ERROR_UNSUP_DRIVER => 'unsupported database driver', DBA_ERROR_UNSUP_PERSISTENCE => 'persistent connections not supported', DBA_ERROR_NO_DRIVER => 'no driver loaded', DBA_ERROR_NO_DBNAME => 'no databasename given', DBA_ERROR_NOSUCHDB => 'database not found', DBA_ERROR_INVALID_MODE => 'invalid file mode', DBA_ERROR_CANNOT_CREATE => 'can not create database', DBA_ERROR_CANNOT_OPEN => 'can not open database', DBA_ERROR_CANNOT_DROP => 'can not drop database', DBA_ERROR_NOT_READABLE => 'database not readable', DBA_ERROR_NOT_WRITEABLE => 'database not writeable', DBA_ERROR_NOT_OPEN => 'database not open', DBA_ERROR_NOT_FOUND => 'key not found', DBA_ERROR_ALREADY_EXISTS => 'key already exists', ); } if (DBA::isError($value)) { $value = $value->getCode(); } return isset($errorMessages[$value]) ? $errorMessages[$value] : $errorMessages[DBA_ERROR]; } /** * This method is used to communicate an error and invoke error * callbacks etc. Basically a wrapper for PEAR::raiseError * without the message string. * * @param mixed $code integer error code, or a PEAR error object (all * other parameters are ignored if this parameter is an object * @param int $mode error mode, see PEAR_Error docs * @param mixed $options If error mode is PEAR_ERROR_TRIGGER, this is the * error level (E_USER_NOTICE etc). If error mode is * PEAR_ERROR_CALLBACK, this is the callback function, either as a * function name, or as an array of an object and method name. For * other error modes this parameter is ignored. * @param string $userinfo Extra debug information. * @return object a PEAR error object * @access public * @see PEAR_Error */ function &raiseError($code = DBA_ERROR, $mode = NULL, $options = NULL, $userinfo = NULL) { // The error is yet a DBA error object if (is_object($code)) { return PEAR::raiseError($code, NULL, NULL, NULL, NULL, NULL, TRUE); } return PEAR::raiseError(NULL, $code, $mode, $options, $userinfo, 'DBA_Error', TRUE); } /** * Returns whether a database exists * * @param string $name name of the database to find * @param string @driver driver to test for * @return boolean true if the database exists */ function db_exists($name, $driver = 'file') { if (!function_exists('dba_open') || ($driver=='file')) { // the file driver stores data in two files return (file_exists($name.'.dat') && file_exists($name.'.idx')); } elseif (in_array($driver, array('db2', 'db3', 'db4', 'gdbm'))) { // these drivers store data in one file return file_exists($name); } else { // do not know how other drivers store data return DBA::raiseError(DBA_ERROR_NO_DRIVER, NULL, NULL, 'driver: '.$driver); } } /** * Returns an array of the currently supported drivers * * @return array */ function getDriverList() { if (function_exists('dba_handlers')) { return array_merge(dba_handlers(), array('file')); } else { return array('file'); } } } /** * DBA_Error implements a class for reporting portable database error * messages. Based on the PEAR::MDB implementation. * * @package DBA * @author Olaf Conradi
*/ class DBA_Error extends PEAR_Error { /** * DBA_Error constructor. * * @param mixed $code DBA error code, or string with error message. * @param integer $mode what "error mode" to operate in * @param integer $level what error level to use for * $mode & PEAR_ERROR_TRIGGER * @param smixed $debuginfo additional debug info, such as the last query */ function DBA_Error($code = DBA_ERROR, $mode = PEAR_ERROR_RETURN, $level = E_USER_NOTICE, $debuginfo = NULL) { if (is_int($code)) { $this->PEAR_Error('DBA Error: '.DBA::errorMessage($code), $code, $mode, $level, $debuginfo); } else { $this->PEAR_Error('DBA Error: '.$code, DBA_ERROR, $mode, $level, $debuginfo); } } } ?>