今天要做一個專門用於處理搜尋檔案的功能,而搜尋的檔案可能是位於某個目錄下的,尋找目錄下是否存在該目錄,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;
} |