builtin.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 530 行

PHP
530
字号
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | Copyright (c) 2002-2003 Brent Cook                                        |// +----------------------------------------------------------------------+// | This library is free software; you can redistribute it and/or        |// | modify it under the terms of the GNU Lesser General Public           |// | License as published by the Free Software Foundation; either         |// | version 2.1 of the License, or (at your option) any later version.   |// |                                                                      |// | This library is distributed in the hope that it will be useful,      |// | but WITHOUT ANY WARRANTY; without even the implied warranty of       |// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |// | Lesser General Public License for more details.                      |// |                                                                      |// | You should have received a copy of the GNU Lesser General Public     |// | License along with this library; if not, write to the Free Software  |// | Foundation, Inc., 59 Temple Place, Suite 330,Boston,MA 02111-1307 USA|// +----------------------------------------------------------------------+//// $Id: Builtin.php,v 1.13 2003/01/27 04:31:42 busterb Exp $require_once 'DBA.php';/** * DBA_Driver_Builtin uses the builtin dba functions of PHP as the underlying * driver for a DBA class. Depending on the driver, this can be faster or * slower than the DBA_Driver_File class. * * This class has been tested with DB3 and GDBM and probably works with DB2. * Other drivers may have quirks that this class does not address yet. CDB * is known to be unsuitable as a driver due to its lack of write ability. * * @author  Brent Cook <busterb@mail.utexas.edu> * @version 1.0 * @access  public * @package DBA */class DBA_Driver_Builtin extends DBA{    // {{{ instance variables    /**     * Name of the database     * @access private     */    var $_dbName;    /**     * Indicates the current ability for read/write operations     * @access private     */    var $_writable;    /**     * Indicates the current ability for read operations     * @access private     */    var $_readable;    /**     * Name of the builtin dba driver to use     * @access private     */    var $_driver;    /**     * Indicates the ability of the dba driver to replace values     * @access private     */    var $_hasReplace;    // }}}    // {{{ DBA_Driver_Builtin($driver = 'gdbm')    /* Constructor     *     * @access public     * @param   string  $driver dba driver to use     */    function DBA_Driver_Builtin($driver = 'gdbm')    {        // call the base constructor        $this->DBA();        $this->_driver = $driver;    }    // }}}    // {{{ open($dbName='', $mode='r', $persistent=false)    /**     * Opens a database.     *     * @access public     * @param   string  $dbName The name of a database     * @param   string  $mode The mode in which to open a database.     *                   'r' opens read-only.     *                   'w' opens read-write.     *                   'n' creates a new database and opens read-write.     *                   'c' creates a new database if the database does not     *                      exist and opens read-write.     * @param   boolean $persistent Determines whether to open the database     *                  peristently. Not supported here.     * @return  object PEAR_Error on failure     */    function open($dbName='', $mode='r', $persistent = false)    {        if (is_null($this->_driver)) {            return $this->raiseError(DBA_ERROR_NO_DRIVER);        }        if ($this->_driver == 'gdbm') {            $this->_hasReplace = false;        } else {            $this->_hasReplace = true;        }        if ($dbName == '') {            return $this->raiseError(DBA_ERROR_NO_DBNAME);        } else {            $this->_dbName = $dbName;        }        switch ($mode) {            case 'r':                    // open for reading                    $this->_writable = false;                    $this->_readable = true;                    break;            case 'n':            case 'c':            case 'w':                    $this->_writable = true;                    $this->_readable = true;                    break;            default:                return $this->raiseError(DBA_ERROR_INVALID_MODE, NULL, NULL,                    'filemode: '.$mode);        }        // open the index file        if ($persistent) {            $this->_dba = dba_popen($dbName, $mode, $this->_driver);        } else {            $this->_dba = dba_open($dbName, $mode, $this->_driver);        }        if ($this->_dba === false) {            $this->_writable = false;            $this->_readable = false;            return $this->raiseError(DBA_ERROR_CANNOT_OPEN, NULL, NULL,                'dbname: '.$dbName.' filemode: '.$mode);        }    }    // }}}    // {{{ close()    /**     * Closes an open database.     *     * @access  public     * @return  object PEAR_Error on failure     */    function close()    {        if ($this->isOpen()) {            $this->_readable = false;            $this->_writable = false;            dba_sync($this->_dba); // db2 is known to require syncs            dba_close($this->_dba);        } else {            return $this->raiseError(DBA_ERROR_NOT_OPEN);        }    }    // }}}    // {{{ reopen($mode)    /**     * Reopens an already open database in read-only or write mode.     * If the database is already in the requested mode, then this function     * does nothing.     *     * @access  public     * @param   string  $mode 'r' for read-only, 'w' for read/write     * @return  object PEAR_Error on failure     */    function reopen($mode)    {        if ($this->isOpen()) {            if (($mode == 'r') && $this->isWritable()) {                // Reopening as read-only                $this->close();                return $this->open($this->_dbName, 'r');            } elseif (($mode == 'w') && (!$this->isWritable)) {                // Reopening as read-write                $this->close();                return $this->open($this->_dbName, 'w');            }        } else {            return $this->raiseError(DBA_ERROR_NOT_OPEN);        }    }    // }}}    // {{{ _DBA_Driver_Builtin()    /**     * PEAR emulated destructor calls close on PHP shutdown     * @access private     */    function _DBA_Driver_Builtin()    {        $this->close();    }    // }}}    // {{{ isOpen()    /**     * Returns the current open status for the database     *     * @access  public     * @return  boolean true if open, false if closed      */    function isOpen()    {        return($this->_readable || $this->_writable);    }    // }}}    // {{{ isReadable()    /**     * Returns the current read status for the database     *     * @access  public     * @return  boolean true if readable, false if not     */    function isReadable()    {        return $this->_readable;    }    // }}}    // {{{ isWritable()    /**     * Returns the current write status for the database     *     * @access  public     * @return  boolean true if writable, false if not     */     function isWritable()     {         return $this->_writable;     }    // }}}    // {{{ remove($key)    /**     * Removes the value at location $key     *     * @access  public     * @param   string  $key key to delete     * @return  object PEAR_Error on failure     */    function remove($key)    {        if ($this->isWritable()) {            if (!dba_delete($key, $this->_dba)) {                return $this->raiseError(DBA_ERROR_NOT_FOUND, NULL, NULL, 'key: '.$key);            }        } else {            return $this->raiseError(DBA_ERROR_NOT_WRITEABLE);        }    }    // }}}    // {{{ fetch($key)    /**     * Returns the value that is stored at $key.     *     * @access  public     * @param   string $key key to examine     * @return  mixed the requested value on success, false on failure     */    function fetch($key)    {        if ($this->isReadable()) {            if (dba_exists($key, $this->_dba)) {                return dba_fetch($key, $this->_dba);            } else {                return $this->raiseError(DBA_ERROR_NOT_FOUND, NULL, NULL, 'key: '.$key);            }        } else {            return $this->raiseError(DBA_ERROR_NOT_READABLE);        }    }    // }}}    // {{{ firstkey()    /**     * Returns the first key in the database     *     * @access  public     * @return  mixed string on success, false on failure     */    function firstkey()    {        if ($this->isReadable()) {            return dba_firstkey($this->_dba);        } else {            return false;        }    }    // }}}    // {{{ size()    /**     * Calculates the size of the database in number of keys     *     * @access  public     * @return  int    number of keys in the database     */    function size()    {        $key = dba_firstkey($this->_dba);        $size = 0;        while ($key !== false) {            ++$size;            $key = dba_nextkey($this->_dba);        }        return $size;    }    // }}}    // {{{ nextkey()    /**     * Returns the next key in the database, false if there is a problem     *     * @access  public     * @return  mixed string on success, false on failure     */    function nextkey()    {        if ($this->isReadable()) {            return dba_nextkey($this->_dba);        } else {            return false;        }    }    // }}}    // {{{ getkeys()    /**     * Returns all keys in the database     *     * @access  public     * @return  mixed  array     */    function getkeys()    {        $keys = array();        if ($this->isReadable()) {            $key = $this->firstkey();            while ($key !== FALSE) {                $keys[] = $key;                $key = $this->nextkey($key);            }        }        return $keys;    }    // }}}    // {{{ insert($key, $value)    /**     * Inserts a new value at $key. Will not overwrite if the key/value pair     * already exist     *     * @access public     * @param   string  $key key to insert     * @param   string  $value value to store     * @return  object PEAR_Error on failure     */    function insert($key, $value)    {        if ($this->isWritable()) {            if ((!$this->_hasReplace && dba_exists($key, $this->_dba)) ||                (!dba_insert($key, $value, $this->_dba))) {                return $this->raiseError(DBA_ERROR_ALREADY_EXISTS, NULL, NULL,                    'key: '.$key);            }        } else {            return $this->raiseError(DBA_ERROR_NOT_WRITEABLE);        }    }    // }}}    // {{{ replace($key, $value)    /**     * Inserts a new value at key. If the key/value pair     * already exist, overwrites the value     *     * @access public     * @param   $key    string the key to insert     * @param   $value  string the value to store     * @return  object  PEAR_Error on failure     */    function replace($key, $value)    {        if ($this->isWritable()) {            if ($this->_hasReplace) {                return dba_replace($key, $value, $this->_dba);            } else {                $r = true;                if (dba_exists($key, $this->_dba)) {                    $r = dba_delete($key, $this->_dba);                }                return $r && dba_insert($key, $value, $this->_dba);            }        } else {            return $this->raiseError(DBA_ERROR_NOT_WRITEABLE);        }    }    // }}}        // {{{ create($dbName, $driver='gdbm')    /**     * Creates a new database file if one does not exist. If it already exists,     * updates the last-updated timestamp on the database     *     * @access  public     * @param   string  $dbName the database to create     * @param   string  $driver the dba driver to use     * @return  object  PEAR_Error on failure     */    function create($dbName, $driver='gdbm')    {        $db = dba_open($dbName, 'n', $driver);        if (!(($db !== false) && dba_close($db))) {            return $this->raiseError(DBA_ERROR_CANNOT_CREATE, NULL, NULL,                'dbname: '.$dbname);        }    }    // }}}    // {{{ db_exists($dbName)    /**     * Indicates whether a database with given name exists     *     * @access  public     * @param   string  $dbName the database name to check for existence     * @return  boolean true if the database exists, false if it doesn't     */    function db_exists($dbName)    {        return file_exists($dbName);    }    // }}}    // {{{ db_drop($dbName)    /**     * Removes a database from existence     *     * @access  public     * @param   string  $dbName the database name to drop     * @return  object  PEAR_Error on failure     */    function db_drop($dbName)    {        if (DBA_Driver_Builtin::db_exists($dbName)) {            if (!unlink($dbName)) {                return $this->raiseError(DBA_ERROR_CANNOT_DROP, NULL, NULL,                    'dbname: '.$dbName);            }        } else {            return $this->raiseError(DBA_ERROR_NOSUCHDB, NULL, NULL,                'dbname: '.$dbName);        }    }    // }}}    // {{{ drop()    /**     * Removes the last open database from existence     *     * @access  public     * @return  object  PEAR_Error on failure     */    function drop()    {        $this->close();        return $this->db_drop($this->_dbName);    }    // }}}    // {{{ exists($key)    /**     * Check whether key exists     *     * @access  public     * @param   string   $key     * @return  boolean true if the key exists, false if it doesn't     */    function exists($key)    {        return($this->isOpen() && dba_exists($key, $this->_dba));    }    // }}}    // {{{ sync()    /**     * Synchronizes an open database to disk     * @access public     */    function sync()    {        return dba_sync($this->_dba);    }    // }}}    // {{{ optimize()    /**     * Optimizes an open database     * @access public     */    function optimize()    {        return dba_optimize($this->_dba);    }    // }}}}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?