文件搜索就是利用php遍歷目錄然後去一個個文件獲取文件名進行對比,然後查找到我們指定文件時就停止遍歷並顯示要搜索的文件名與地址即可。
今天要做一個專門用於處理搜索文件的功能,而搜索的文件可能是位於某個目錄下的,尋找目錄下是否存在該目錄,PHP函數當中好像沒有專門這樣的搜索函數。
文件的操作在 php 中是不可缺少的,而文件的使用頻率也是非常高的,比如我們常見的目錄管理系統,無數據庫留言本等,都用到了文件的操作,而這裡的文件指的不僅僅是目錄的操作,還有指定文件的操作,比如 txt 文件等。
下面是一個專門用於文件搜索的函數方法,file_search 是方法名,後面有三個參數,$directory 是要搜索的文件所在的目錄,比如 “admin/”目錄下, $search 是搜索的文件了,$recursive 是判斷是否搜索成功的,默認就可以了,如果還需要其它操作,可以在後面進行添加相應參數即可。
例1
代碼如下 復制代碼<?php
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
代碼如下 復制代碼<?php
/*文件查找函數
用法:
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."<br>n";
}
}else
{
echo $file."<br>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
代碼如下 復制代碼<?php
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;
}