file.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 296 行

SVN-BASE
296
字号
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_Log * @subpackage Adapter * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License *//** * Zend_Log_Adapter_Interface */require_once 'Zend/Log/Adapter/Interface.php';/** * Zend_Log_Adapter_Exception */require_once 'Zend/Log/Adapter/Exception.php';/** * @category   Zend * @package    Zend_Log * @subpackage Adapter * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Log_Adapter_File implements Zend_Log_Adapter_Interface{    /**    * Holds the PHP resource for an open file, or null.    *    * @var      +resource    *           +null    */    private $_fileResource = null;    /**    * Filename on the filesystem where the log file is stored.    *    * @var      string    */    private $_filename = '';    /**    * PHP access mode of the file, either 'a'ppend or over'w'rite    *    * @var      string    */    private $_accessMode = '';    /**    * Termination character(s) that are automatically appended to each line.    *    * @var      string    */    private $_lineEnding = "\n";    /**    * Buffer, array of lines waiting to be written to the filesystem.    *    * @var      array    */    private $_buffer = array();    /**    * Number of lines in the buffer    *    * @var      string    */    private $_bufferedLines = 0;    /**    * Options:    *   buffer          True:  use buffering    *                   False: no buffering, write immediately    *    *   bufferLines     Maximum number of lines in the buffer    *    *   keepOpen        True:  keep file resource open between writes    *                   False: close the resource immediately after each write    * @var      array    */    private $_options = array('buffer'      => false,                              'bufferLines' => 20,                              'keepOpen'    => false,                              'format' => '%message%, %level%');    /**    * Class Constructor    *    * @var      filename    Name of the file on the filesystem to write the log.    */    public function __construct($filename, $accessMode='a')    {        $this->_filename = $filename;        $this->_setAccessMode($accessMode);        return true;    }    /**    * Class Destructor    *    * Always check that the file has been closed and the buffer flushed before destruction.    */    public function __destruct()    {        $this->flush();        $this->close();    }	/**	 * Sets the access mode of the log file on the filesystem	 *	 * @param  $accessMode     Access mode: either 'a' append or 'w' overwrite	 * @return bool            True	 */    protected function _setAccessMode($accessMode)    {        // Check for valid access mode        $accessMode = substr(strtolower($accessMode), 0, 1);        if ($accessMode!='w' && $accessMode!='a') {            throw new Zend_Log_Adapter_Exception("Illegal access mode specified.  Specify 'a' for append or 'w' for overwrite.");        }        $this->_accessMode = $accessMode;        return true;    }	/**	 * Sets an option specific to the implementation of the log adapter.	 *	 * @param  $optionKey      Key name for the option to be changed.  Keys are adapter-specific	 * @param  $optionValue    New value to assign to the option	 * @return bool            True	 */    public function setOption($optionKey, $optionValue)    {        if (!array_key_exists($optionKey, $this->_options)) {            throw new Zend_Log_Adapter_Exception("Unknown option \"$optionKey\".");        }        $this->_options[$optionKey] = $optionValue;        return true;    }	/**	 * Opens the logfile for writing.	 *	 * @param  $filename       Filename to open	 * @param  $accessMode     Either "w"rite or "a"ppend	 * @return bool            True	 */	public function open($filename=null, $accessMode=null)	{        if ($filename !== null) {            $this->_filename = $filename;        }        if ($accessMode !== null) {            $this->_setAccessMode($accessMode);        }                if (! $this->_fileResource = @fopen($this->_filename, $this->_accessMode, false)) {            throw new Zend_Log_Adapter_Exception("Log file \"$filename\" could not be opened");        }        return true;	}	/**	 * Write a message to the log.  This function really just writes the message to the buffer.	 * If buffering is enabled, the message won't hit the filesystem until the buffer fills	 * or is flushed.  If buffering is not enabled, the buffer will be flushed immediately.	 *	 * @param  $message    Log message	 * @param  $level      Log level, one of Zend_Log::LEVEL_* constants	 * @return bool        True	 */    public function write($fields)    {	    // Add the message to the buffer.	    $this->_buffer[] = $this->_parseLogLine($fields);	    $this->_bufferedLines += 1;	    // If the buffer is full, or buffering is not used,	    // then flush the contents of the buffer to the filesystem now.        if (!$this->_options['buffer'] || $this->_bufferedLines >= $this->_options['bufferLines']) {            $this->flush();        }	    return true;	}	/**	 * Format a line before sending into the storage.	 *	 * @param string $message	 * @param int $level	 * @return string	 */	protected function _parseLogLine($fields)	{        $output = $this->_options['format'];	    foreach ($fields as $fieldName=>$fieldValue) {	        $output = str_replace("%$fieldName%", $fieldValue, $output);	    }	    return $output;	}	/**	 * Write a message to the log.  This function really just writes the message to the buffer.	 *	 * @param  $message    Log message	 * @param  $level      Log level, one of Zend_Log::LEVEL_* constants	 * @return bool        True	 */	public function flush()	{	    // Nothing to flush if the buffer is empty.	    if (!$this->_bufferedLines) {	        return false;	    }	    // If the file resource is not yet open, then open it now.	    if (!is_resource($this->_fileResource)) {            $this->open();	    }	    // Flush the buffer to the filesystem	    foreach ($this->_buffer as $line) {	        if (!fwrite($this->_fileResource, $line . $this->_lineEnding)) {	            throw new Zend_Log_Adapter_Exception("Log file \"{$this->_filename}\" could not be written.");	        }	    }	    // Clean the buffer        $this->_buffer = array();        $this->_bufferedLines = 0;        // If the file is not to be kept open, close it until the next flush.        if (!$this->_options['keepOpen']) {            $this->close();        }        return true;	}	/**	 * Closes the file resource for the logfile.  Calling this function does not write any	 * buffered data into the log, so flush() must be called before close().	 *	 * @return bool        True	 */	public function close()	{	    // If a file resource is open, then close it.	    if (is_resource($this->_fileResource)) {	        fclose($this->_fileResource);	        $this->_fileResource = null;	    }	    return true;	}}

⌨️ 快捷键说明

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