⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.php

📁 This is the script which used on 10minutemail.com for temporary email.
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * File
 * 
 * PHP versions 4 and 5
 *
 * LICENSE: This source file is subject to version 3.0 of the PHP license
 * that is available through the world-wide-web at the following URI:
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
 * the PHP License and are unable to obtain it through the web, please
 * send a note to license@php.net so we can mail you a copy immediately.
 *
 * @category    File
 * @package     File
 * @author      Richard Heyes <richard@php.net>
 * @author      Tal Peer <tal@php.net>
 * @author      Michael Wallner <mike@php.net>
 * @copyright   2002-2005 The Authors
 * @license     http://www.php.net/license/3_0.txt  PHP License 3.0
 * @version     CVS: $Id: File.php,v 1.29 2005/03/30 18:23:58 mike Exp $
 * @link        http://pear.php.net/package/File
 */

/**
 * Requires PEAR
 */
require_once 'PEAR.php';

/**
 * The default number of bytes for reading
 */
if (!defined('FILE_DEFAULT_READSIZE')) {
    define('FILE_DEFAULT_READSIZE', 1024, true);
}

/**
 * The maximum number of bytes for reading lines
 */
if (!defined('FILE_MAX_LINE_READSIZE')) {
    define('FILE_MAX_LINE_READSIZE', 8192000, true);
}

/**
 * Whether file locks should block
 */
if (!defined('FILE_LOCKS_BLOCK')) {
    define('FILE_LOCKS_BLOCK', true, true);
}

/**
 * Mode to use for reading from files
 */
define('FILE_MODE_READ', 'rb', true);

/**
 * Mode to use for truncating files, then writing
 */
define('FILE_MODE_WRITE', 'wb', true);

/**
 * Mode to use for appending to files
 */
define('FILE_MODE_APPEND', 'ab', true);

/**
 * Use this when a shared (read) lock is required
 */
define('FILE_LOCK_SHARED', LOCK_SH | (FILE_LOCKS_BLOCK ? 0 : LOCK_NB), true);

/**
 * Use this when an exclusive (write) lock is required
 */
define('FILE_LOCK_EXCLUSIVE', LOCK_EX | (FILE_LOCKS_BLOCK ? 0 : LOCK_NB), true);

/**
 * Class for handling files
 * 
 * A class with common functions for writing,
 * reading and handling files and directories
 * 
 * @author  Richard Heyes <richard@php.net>
 * @author  Tal Peer <tal@php.net>
 * @author  Michael Wallner <mike@php.net>
 * @access  public 
 * @package File
 * 
 * @static
 */
class File extends PEAR 
{
    /**
     * Destructor
     * 
     * Unlocks any locked file pointers and closes all filepointers
     * 
     * @access private 
     */
    function _File()
    {
        File::closeAll();
    }
    
    /**
     * Handles file pointers. If a file pointer needs to be opened,
     * it will be. If it already exists (based on filename and mode)
     * then the existing one will be returned.
     * 
     * @access  private 
     * @param   string  $filename Filename to be used
     * @param   string  $mode Mode to open the file in
     * @param   mixed   $lock Type of lock to use
     * @return  mixed   PEAR_Error on error or file pointer resource on success
     */
    function &_getFilePointer($filename, $mode, $lock = false)
    {
        $filePointers = &PEAR::getStaticProperty('File', 'filePointers');
        
        // Win32 is case-insensitive
        if (OS_WINDOWS) {
            $filename = strToLower($filename);
        }
        
        // check if file pointer already exists
        if (    !isset($filePointers[$filename][$mode]) || 
                !is_resource($filePointers[$filename][$mode])) {
            
            // check if we can open the file in the desired mode
            switch ($mode)
            {
                case FILE_MODE_READ:
                    if (    !preg_match('/^.+(?<!file):\/\//i', $filename) &&
                            !file_exists($filename)) {
                        return PEAR::raiseError("File does not exist: $filename");
                    }
                break;
                
                case FILE_MODE_APPEND:
                case FILE_MODE_WRITE:
                    if (file_exists($filename)) {
                        if (!is_writable($filename)) {
                            return PEAR::raiseError("File is not writable: $filename");
                        }
                    } elseif (!is_writable($dir = dirname($filename))) {
                        return PEAR::raiseError("Cannot create file in directory: $dir");
                    }
                break;
                
                default:
                    return PEAR::raiseError("Invalid access mode: $mode");
            }
            
            // open file
            $filePointers[$filename][$mode] = @fopen($filename, $mode);
            if (!is_resource($filePointers[$filename][$mode])) {
                return PEAR::raiseError('Failed to open file: ' . $filename);
            }
        }
        
        // lock file
        if ($lock) {
            $lock = $mode == FILE_MODE_READ ? FILE_LOCK_SHARED : FILE_LOCK_EXCLUSIVE;
            $locks = &PEAR::getStaticProperty('File', 'locks');
            if (@flock($filePointers[$filename][$mode], $lock)) {
                $locks[] = &$filePointers[$filename][$mode];
            } elseif (FILE_LOCKS_BLOCK) {
                return PEAR::raiseError("File already locked: $filename");
            } else {
                return PEAR::raiseError("Could not lock file: $filename");
            }
        }
        
        return $filePointers[$filename][$mode];
    } 

    /**
     * Reads an entire file and returns it.
     * Uses file_get_contents if available.
     * 
     * @access  public 
     * @param   string  $filename Name of file to read from
     * @param   mixed   $lock Type of lock to use
     * @return  mixed   PEAR_Error if an error has occured or a string with the contents of the the file
     */
    function readAll($filename, $lock = false)
    {
        if (function_exists('file_get_contents')) {
            if (false === $file = @file_get_contents($filename)) {
                return PEAR::raiseError("Cannot read file: $filename");
            }
            return $file;
        }
        
        $file = '';
        while (false !== $buf = File::read($filename, FILE_DEFAULT_READSIZE, $lock)) {
            if (PEAR::isError($buf)) {
                return $buf;
            }
            $file .= $buf;
        }
        
        // close the file pointer
        File::close($filename, FILE_MODE_READ);
        
        return $file;
    }

    /**
     * Returns a specified number of bytes of a file. 
     * Defaults to FILE_DEFAULT_READSIZE.  If $size is 0, all file will be read.
     * 
     * @access  public 
     * @param   string  $filename Name of file to read from
     * @param   integer $size Bytes to read
     * @param   mixed   $lock Type of lock to use
     * @return  mixed   PEAR_Error on error or a string which contains the data read
     *                  Will also return false upon EOF
     */
    function read($filename, $size = FILE_DEFAULT_READSIZE, $lock = false)
    {
        static $filePointers;
        
        if (0 == $size) {
            return File::readAll($filename, $lock);
        } 

        if (    !isset($filePointers[$filename]) || 
                !is_resource($filePointers[$filename])) {
            if (PEAR::isError($fp = &File::_getFilePointer($filename, FILE_MODE_READ, $lock))) {
                return $fp;
            } 

            $filePointers[$filename] = &$fp;
        } else {
            $fp = &$filePointers[$filename];
        } 

        return !feof($fp) ? fread($fp, $size) : false;
    } 

    /**
     * Writes the given data to the given filename. 
     * Defaults to no lock, append mode.
     * 
     * @access  public 
     * @param   string  $filename Name of file to write to
     * @param   string  $data Data to write to file
     * @param   string  $mode Mode to open file in
     * @param   mixed   $lock Type of lock to use
     * @return  mixed   PEAR_Error on error or number of bytes written to file.
     */
    function write($filename, $data, $mode = FILE_MODE_APPEND, $lock = false)
    {
        if (PEAR::isError($fp = &File::_getFilePointer($filename, $mode, $lock))) {
            return $fp;
        }
        if (-1 === $bytes = @fwrite($fp, $data, strlen($data))) {
            return PEAR::raiseError("Cannot write data: '$data' to file: '$filename'");
        }
        return $bytes;
    } 

    /**
     * Reads and returns a single character from given filename
     * 

⌨️ 快捷键说明

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