find.php

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

PHP
331
字号
<?php//// +----------------------------------------------------------------------+// | PHP Version 4                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2002 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license,      |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/2_02.txt.                                 |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Author: Sterling Hughes <sterling@php.net>                           |// +----------------------------------------------------------------------+//// $Id: Find.php,v 1.1 2002/10/24 21:31:57 tuupola Exp $//require_once 'PEAR.php';/***  Commonly needed functions searching directory trees** @access public* @version $Id: Find.php,v 1.1 2002/10/24 21:31:57 tuupola Exp $* @package File* @author Sterling Hughes <sterling@php.net>*/class File_Find{    /**    * internal dir-list    * @var array    */    var $_dirs       = array ();    /**    * founded files    * @var array    */    var $files       = array ();    /**    * founded dirs    * @var array    */    var $directories = array ();    /**     * Search the current directory to find matches for the     * the specified pattern.     *     * @param string $pattern a string containing the pattern to search     * the directory for.     *     * @param string $dirpath a string containing the directory path     * to search.     *     * @param string $pattern_type a string containing the type of     * pattern matching functions to use (can either be 'php' or     * 'perl').     *     * @return array containing all of the files and directories     * matching the pattern or null if no matches     *     * @author Sterling Hughes <sterling@php.net>     * @access public     */    function &glob ($pattern, $dirpath, $pattern_type='php')    {        $dh = @opendir ($dirpath);        if (!$dh) {            $pe = new FileFindException("Cannot open directory");            return ($pe);        }        $match_function = File_Find::_determineRegex($pattern, $pattern_type);        $matches = array();        while ($entry = @readdir ($dh)) {            if ($match_function($pattern, $entry) &&                $entry != '.'                     &&                $entry != '..') {                $matches[] = $entry;            }        }        @closedir ($dh);        return count($matches) > 0 ? $matches : null;    }    /**     * Map the directory tree given by the directory_path parameter.     *     * @param string $directory contains the directory path that you     * want to map.     *     * @return array a two element array, the first element containing a list     * of all the directories, the second element containing a list of all the     * files.     *     * @author Sterling Hughes <sterling@php.net>     * @access public     */    function &maptree ($directory)    {        $this->_dirs = array($directory);        while (count($this->_dirs)) {            $dir = array_pop($this->_dirs);            File_Find::_build($dir);            array_push($this->directories, $dir);        }        return array($this->directories, $this->files);    }    /**     * Map the directory tree given by the directory parameter.     *     * @param string $directory contains the directory path that you     * want to map.     * @param integer $maxrecursion maximun number of folders to recursive      * map     *     * @return array a multidimensional array containing all subdirectories     * and their files. For example:     *     * Array     * (     *    [0] => file_1.php     *    [1] => file_2.php     *    [subdirname] => Array     *       (     *          [0] => file_1.php     *       )     * )     *     * @author Mika Tuupola <tuupola@appelsiini.net>     * @access public     */    function &mapTreeMultiple($directory, $maxrecursion=0, $count=0)    {           $retval = array();        $count++;        $directory .= DIRECTORY_SEPARATOR;        $dh=opendir($directory);        while ($entry = readdir($dh)) {            if ($entry != "." && $entry != "..") {                 array_push($retval, $entry);            }        }        closedir($dh);             while (list($key, $val) = each($retval)) {            $path = $directory . $val;            $path = str_replace(DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR,                                DIRECTORY_SEPARATOR, $path);                  if (!(is_array($val))) {                if (is_dir($path)) {                    unset($retval[$key]);                    if ($maxrecursion == 0 || $count < $maxrecursion) {                        $retval[$val] = File_Find::mapTreeMultiple($path,                                         $maxrecursion, $count);                    }                }            }        }        return($retval);    }    /**     * Search the specified directory tree with the specified pattern.  Return an     * array containing all matching files (no directories included).     *     * @param string $pattern the pattern to match every file with.     *     * @param string $directory the directory tree to search in.     *     * @param string $type the type of regular expression support to use, either     * 'php' or 'perl'.     *     * @return array a list of files matching the pattern parameter in the the directory     * path specified by the directory parameter     *     * @author Sterling Hughes <sterling@php.net>     * @access public     */    function &search ($pattern, $directory, $type='php') {        $matches = array();        list (,$files)  = File_Find::maptree($directory);        $match_function = File_Find::_determineRegex($pattern, $type);        reset($files);        while (list(,$entry) = each($files)) {            if ($match_function($pattern, $entry))                $matches[] = $entry;        }        return ($matches);    }    /**     * Determine whether or not a variable is a PEAR exception     *     * @param object PEAR_Error $var the variable to test.     *     * @return boolean returns true if the variable is a PEAR error, otherwise     * it returns false.     * @access public     */    function isError (&$var)    {        return PEAR::isError($var);    }    /**     * Fetch the current File_Find version     *     * @return string the current File_Find version.     * @access public     */    function File_Find_version()    {         return 1.1;    }    /**     * internal function to build singular directory trees, used by     * File_Find::maptree()     *     * @param string $directory name of the directory to read     * @return void     */    function _build ($directory)    {        $dh = @opendir ($directory);        if (!$dh) {            $pe = new FileFindException("Cannot open directory");            return $pe;        }        while ($entry = @readdir($dh)) {            if ($entry != '.' &&                $entry != '..') {                $entry = $directory.DIRECTORY_SEPARATOR.$entry;                if (is_dir($entry))                    array_push($this->_dirs, $entry);                else                    array_push($this->files, $entry);            }        }        @closedir($dh);    }    /**     * internal function to determine the type of regular expression to     * use, implemented by File_Find::glob() and File_Find::search()     *     * @param string $type given RegExp type     * @return string kind of function ( "eregi", "ereg" or "preg_match") ;     *     */    function _determineRegex ($pattern, $type)    {        if (! strcasecmp($type, 'perl')) {            $match_function = 'preg_match';        } else if (! strcasecmp(substr($pattern, -2), '/i')) {            $match_function = 'eregi';        } else {            $match_function = 'ereg';        }        return $match_function;    }//End Class}/*** Exception Class for Errorhandling of File_Find* @access public*/class FileFindException extends PEAR_Error{    /**    * classname    * @var string    */    var $classname             = 'FileFindException';    /**    * Message in front of the error message    * @var string    */    var $error_message_prepend = 'Error in File_Find';    /**    * Creates a PEAR_Error object    *    * @param string $message    Error message    * @param int    $mode       Error mode    * @param int    $level      Error level    *    * @return object PEAR_Error    * @access public    */    function FileFindException ($message, $mode = PEAR_ERROR_RETURN, $level = E_USER_NOTICE)    {        $this->PEAR_Error($message, $mode, $level);    }}/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */?>

⌨️ 快捷键说明

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