今天要做一个专门用于处理搜索文件的功能,而搜索的文件可能是位于某个目录下的,寻找目录下是否存在该目录,PHP函数当中好像没有专门这样的搜索函数。
文件的操作在 php 中是不可缺少的,而文件的使用频率也是非常高的,比如我们常见的目录管理系统,无数据库留言本等,都用到了文件的操作,而这里的文件指的不仅仅是目录的操作,还有指定文件的操作,比如 txt 文件等。
下面是一个专门用于文件搜索的函数方法,file_search 是方法名,后面有三个参数,$directory 是要搜索的文件所在的目录,比如 “admin/”目录下, $search 是搜索的文件了,$recursive 是判断是否搜索成功的,默认就可以了,如果还需要其它操作,可以在后面进行添加相应参数即可。
例1
代码如下 |
复制代码 |
function file_search($directory, $search, $recursive = TRUE)
{
$res = FALSE;
$dir_handle = opendir($directory);
while( FALSE !== ($file = readdir($dir_handle)) )
{
if( $file == '.' || $file == '..' )
{
continue;
}
if( is_dir("$directory$file") )
{
if( $recursive )
{
$res = file_search("$directory$file", $search);
if( $res !== FALSE )
{
return $res;
}
}
}
if( $file == $search )
{
return "$directory$file";
}
}
return FALSE;
}
?>
|
例2
代码如下 |
复制代码 |
/*文件查找函数
用法:
findfile (目录,是否遍历子目录,是否查找文件内容,不查找的目录) ;
Ketle
2005-07-07
*/
function findfile ($dir, $find_sub_dir=false, $find_content=false, $except_dir=false)
{
$d = dir($dir);
while (false !== ($entry = $d->read())) {
if($entry == "." || $entry == ".." || in_array ($entry, $except_dir))
continue;
$file = $d->path."/".$entry;
if ( is_dir ( $file) )
{
if ( $find_sub_dir )
{
findfile ($file, $find_sub_dir, $find_content, $except_dir) ;
}
}else
{
if ( $find_content )
{
if ( strstr(file_get_contents($file),$find_content) )
{
echo $file." n";
}
}else
{
echo $file." n";
}
}
}
$d->close();
}
//test:
findfile ('..',true,'芙蓉jj',array('templates_c','admin','xixi')) ;
?>
|
例3
使用php glob函数查找文件,遍历文件目录
函数说明:array glob ( string $pattern [, int $flags ] )
功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的,不能用于远程文件)
参数说明:第一个参数:匹配模式;第二个可选参数:
•GLOB_MARK - 在每个返回的项目中加一个斜线
•GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
•GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
•GLOB_NOESCAPE - 反斜线不转义元字符
•GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
•GLOB_ONLYDIR - 仅返回与模式匹配的目录项
代码如下 |
复制代码 |
$file = glob('{,.}*', GLOB_BRACE); //匹配所有文件
$file1 = glob('*.php'); //匹配所有php文件
print_r($file1);
|
例4
代码如下 |
复制代码 |
print_r(listDir('./')); //遍历当前目录
function listDir($dir){
$dir .= substr($dir, -1) == '/' ? '' : '/';
$dirInfo = array();
foreach (glob($dir.'*') as $v) {
$dirInfo[] = $v;
if(is_dir($v)){
$dirInfo = array_merge($dirInfo, listDir($v));
}
}
return $dirInfo;
}
|