溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

單一index.php如何實現(xiàn)PHP任意層級文件夾遍歷

發(fā)布時間:2021-02-01 10:06:41 來源:億速云 閱讀:113 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下單一index.php如何實現(xiàn)PHP任意層級文件夾遍歷,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

index.php文件,代碼如下:

<?php 
header('Content-Type:text/html charset:utf-8'); 
date_default_timezone_set('PRC'); 
$rootDir = 'listFile'; //站點根目錄,裝載本程序所有文件 
//站點base_url設(shè)置方法: 
//考慮到通用性,現(xiàn)默認(rèn)使用方法二,修改方法時注意同時修改.htaccess文件 
//方法一:設(shè)置站點目錄為根目錄 
//對應(yīng).htaccess: 
//#RewriteBase / 
// $base_url = 'http://www.listfile.com/'; 
//方法二:設(shè)置站點子目錄為根目錄 
//對應(yīng).htaccess: 
//RewriteBase /listFile/ 
$base_url = 'http://www.test.com/' .$rootDir .'/'; 
//解析文件夾路徑 
if(empty($_GET['return'])){ 
$dir = '.'; 
}else { 
$dir = trim(array_pop(explode($rootDir,$_GET['return'])),'/'); 
if(empty($dir)) $dir = '.'; 
else $dir = './' . $dir; 
} 
// echo $dir; //當(dāng)前文件夾 
//遍歷當(dāng)前文件夾 
$pattern = '*'; // '*'搜索全部文件,可以智能匹配,如*.jpg 搜索jpg文件,*.{jpg,png}搜索jpg和png文件,區(qū)分大小寫?。?nbsp;
$skip = '*.skip'; //排除.skip類型文件(對應(yīng)了“被跳過輸出文件.skip”),你可以自己修改,如*.php排除所有php文件 
$files = scandir_through($dir,$pattern,$skip,false); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>List Files</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<meta http-equiv="Content-Language" content="zh-CN" /> 
<script type="text/javascript" src="<?php echo $base_url . 'jquery-1.6.2.min.js' ?>"></script> 
<script type="text/javascript" src="<?php echo $base_url . 'main.js' ?>"></script> 
<link rel="stylesheet" rev="stylesheet" href="<?php echo $base_url . 'base.css' ?>" type="text/css" /> 
</head> 
<body> 
<script type="text/javascript"> 
var base_url = '<?php echo $base_url ?>'; 
//鏈接攜帶return標(biāo)志,若攜帶,則autoClickUrl自添加一層下級文件夾用于跳轉(zhuǎn),跳轉(zhuǎn)后獲得美化后的URL。 
var autoClickUrl = '<?php echo (strpos($_SERVER['REQUEST_URI'],'?return') !== false)?array_shift(explode('?',$_SERVER['REQUEST_URI']))."baddir/":'';?>'; 
</script> 
<?php 
//文件類型數(shù)組 
$filetypes = array( 
'txt' => 'txt文本文件', 
'dir' => '文件夾', 
'php' => 'php文件', 
'css' => 'css文件', 
'js' => 'js文件', 
'doc' => 'Word文檔', 
'xls' => 'Excel工作表', 
'jpg' => 'jpg圖片文件', 
'gif' => 'gif圖片文件', 
'png' => 'png圖片文件', 
'mp3' => 'mp3文件', 
'zip' => 'zip壓縮包', 
'rar' => 'rar壓縮包', 
'htm' => 'htm網(wǎng)頁文件', 
'html' => 'html網(wǎng)頁文件', 
'undefined'=>'文件類型未知', 
); 
//自定義屏蔽輸出文件 
$skipfiles = array( 
'index.php', 
'index.html', 
'jquery-1.6.2.min.js', 
'main.js', 
'base.css', 
); 
//按規(guī)律輸出當(dāng)前文件夾所有文件 
echo "<div id='back'><a href=''><img src='{$base_url}images/dir.jpg'/>..</a></div>"; 
echo "<div id='container'>"; 
echo "<div class='file text-center'><div class='filename border-right'>名稱</div><div class='filesize border-right'>大小</div>"; 
echo "<div class='filetype border-right'>類型</div><div class='filemtime'>修改日期</div></div>"; 
foreach($files['filename'] as $index => $file){ 
if(in_array($file,$skipfiles)) continue; 
if(is_null($filetypes[$files['ext'][$index]])) $filetype = '文件類型未知'; 
else $filetype = $filetypes[$files['ext'][$index]]; 
echo "<div class='file'><div class='filename'><img src='{$base_url}images/{$files['ext'][$index]}.jpg'/><a href='{$base_url}{$files['widthDir'][$index]}'>{$file}</a></div>"; 
echo "<div class='filesize text-right'>{$files['filesize'][$index]}&nbsp;</div><div class='filetype text-right'>{$filetype}</div>"; 
echo "<div class='filemtime text-center'>{$files['filemtime'][$index]}</div></div>"; 
} 
echo '</div>'; 
?> 
</body> 
</html> 
<?php 
//文件夾遍歷函數(shù) 
function scandir_through($dir,$pattern='*',$skip=false,$subInclude=true,$flag=GLOB_BRACE){ 
$files = array(); 
//獲取當(dāng)前目錄下所有文件及文件夾 
$items = glob($dir . '/*'); 
//遍歷所有項目,若設(shè)置$subInclude為true,則繼續(xù)遍歷子目錄 
for ($i = 0; $i < count($items); $i++) { 
if ($subInclude && is_dir($items[$i])) { 
$add = glob($items[$i] . '/*'); 
if($add === false) $add = array(); 
$items = array_merge($items, $add); 
}else { 
$slash = strrpos($items[$i],'/'); 
$dir = substr($items[$i],0,$slash); 
//若當(dāng)前文件匹配文件查找模式$pattern,則加入$files數(shù)組中 
if(in_array($items[$i],glob($dir.'/'.$pattern,$flag)) && (($skip===false) || !in_array($items[$i],glob($dir.'/'.$skip,$flag)))) { 
$files['filemtime'][] = date('Y-m-d H:i:s',filemtime($items[$i])); //放這里為了解決iconv后中文名文件獲取時間失敗問題 
$items[$i] = iconv('gb2312','utf-8',$items[$i]); 
$file = substr($items[$i],$slash+1); 
$files['widthDir'][] = $items[$i]; 
$files['filename'][] = $file; 
if(is_dir($items[$i])) { 
$files['ext'][] = 'dir'; 
$files['filesize'][] = ''; 
}else { 
$files['filesize'][] = ceil(filesize($file)/1024).'KB'; 
if(strrpos($file,'.') === false) $files['ext'][] = 'undefined'; 
else $files['ext'][] = strtolower(array_pop(explode('.',$file))); 
} 
} 
} 
} 
return $files; 
} 
/* 
//.htaccess 文件,位于根目錄下,原理:訪問路徑非文件,即文件夾,因此跳轉(zhuǎn)至根路徑下做解析。 
RewriteEngine on 
#一級目錄法 
#RewriteBase / 
#二級目錄法 
RewriteBase /listFile/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L] 
*/ 
?>

JS文件,代碼如下:

$(document).ready(function(){ 
//根節(jié)點刪除返回鏈接 
if(window.location.href == base_url) $("#back").hide(); 
//返回處理 
$("#back a").click(function(){ 
if(autoClickUrl != ''){ 
//Add baddir for click back. 
var url = autoClickUrl; 
}else{ 
var url=window.location.href; 
} 
if(url == base_url) return false; //如果在根節(jié)點觸發(fā)返回鏈接,直接返回。 
url = url.replace(location.search,''); //如果鏈接攜帶?return,截除return后續(xù)內(nèi)容(由.htaccess生成) 
url = url.substr(0,url.length-2); // 從url后第2位開始,避免/#情況存在時跳轉(zhuǎn)錯誤 
url = url.substr(0,url.lastIndexOf('/')+1); //截除最后一層文件夾,后退一級 
window.location.href = url; 
return false; //處理完畢,返回false阻止<a>標(biāo)簽點擊后的跳轉(zhuǎn)。 
}); 
if(autoClickUrl != '') $("#back a").click() 
});

CSS文件,代碼如下:

#container{ 
border: 1px solid; 
margin: 0 auto; 
padding: 10px; 
width: 654px; 
border-radius: 10px 10px 10px 10px; 
} 
#back{ 
width: 654px; 
margin: 0 auto; 
} 
#back a{ 
line-style:none; 
} 
.file{ 
clear: both; 
height: 2px; 
margin-bottom: 20px; 
} 
.file img{ 
float:left; 
} 
.file a{ 
float:left; 
margin-left: 5px; 
} 
.file div{ 
float:left; 
width:150px; 
} 
.text-left{ 
text-align:left; 
} 
.text-center{ 
text-align:center; 
} 
.text-right{ 
text-align:right; 
} 
.border-left{ 
border-left:1px solid; 
} 
.border-right{ 
border-right:1px solid; 
} 
.file div.filename{ 
width:200px; 
} 
.file div.filesize{ 
width:100px; 
} 
.file div.filemtime{ 
width:200px; 
}


.htaccess文件,代碼如下:

#原理:訪問路徑非文件,即文件夾,因此跳轉(zhuǎn)至根路徑下做解析獲取當(dāng)前目錄下的所有文件并列出。 
RewriteEngine on 
#一級目錄法 
#RewriteBase / 
#二級目錄法 
RewriteBase /listFile/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L]

以上是“單一index.php如何實現(xiàn)PHP任意層級文件夾遍歷”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI