您好,登錄后才能下訂單哦!
小編給大家分享一下單一index.php如何實現PHP任意層級文件夾遍歷,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
index.php文件,代碼如下:
<?php header('Content-Type:text/html charset:utf-8'); date_default_timezone_set('PRC'); $rootDir = 'listFile'; //站點根目錄,裝載本程序所有文件 //站點base_url設置方法: //考慮到通用性,現默認使用方法二,修改方法時注意同時修改.htaccess文件 //方法一:設置站點目錄為根目錄 //對應.htaccess: //#RewriteBase / // $base_url = 'http://www.listfile.com/'; //方法二:設置站點子目錄為根目錄 //對應.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; //當前文件夾 //遍歷當前文件夾 $pattern = '*'; // '*'搜索全部文件,可以智能匹配,如*.jpg 搜索jpg文件,*.{jpg,png}搜索jpg和png文件,區分大小寫!! $skip = '*.skip'; //排除.skip類型文件(對應了“被跳過輸出文件.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標志,若攜帶,則autoClickUrl自添加一層下級文件夾用于跳轉,跳轉后獲得美化后的URL。 var autoClickUrl = '<?php echo (strpos($_SERVER['REQUEST_URI'],'?return') !== false)?array_shift(explode('?',$_SERVER['REQUEST_URI']))."baddir/":'';?>'; </script> <?php //文件類型數組 $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網頁文件', 'html' => 'html網頁文件', 'undefined'=>'文件類型未知', ); //自定義屏蔽輸出文件 $skipfiles = array( 'index.php', 'index.html', 'jquery-1.6.2.min.js', 'main.js', 'base.css', ); //按規律輸出當前文件夾所有文件 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]} </div><div class='filetype text-right'>{$filetype}</div>"; echo "<div class='filemtime text-center'>{$files['filemtime'][$index]}</div></div>"; } echo '</div>'; ?> </body> </html> <?php //文件夾遍歷函數 function scandir_through($dir,$pattern='*',$skip=false,$subInclude=true,$flag=GLOB_BRACE){ $files = array(); //獲取當前目錄下所有文件及文件夾 $items = glob($dir . '/*'); //遍歷所有項目,若設置$subInclude為true,則繼續遍歷子目錄 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); //若當前文件匹配文件查找模式$pattern,則加入$files數組中 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 文件,位于根目錄下,原理:訪問路徑非文件,即文件夾,因此跳轉至根路徑下做解析。 RewriteEngine on #一級目錄法 #RewriteBase / #二級目錄法 RewriteBase /listFile/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L] */ ?>
JS文件,代碼如下:
$(document).ready(function(){ //根節點刪除返回鏈接 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; //如果在根節點觸發返回鏈接,直接返回。 url = url.replace(location.search,''); //如果鏈接攜帶?return,截除return后續內容(由.htaccess生成) url = url.substr(0,url.length-2); // 從url后第2位開始,避免/#情況存在時跳轉錯誤 url = url.substr(0,url.lastIndexOf('/')+1); //截除最后一層文件夾,后退一級 window.location.href = url; return false; //處理完畢,返回false阻止<a>標簽點擊后的跳轉。 }); 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文件,代碼如下:
#原理:訪問路徑非文件,即文件夾,因此跳轉至根路徑下做解析獲取當前目錄下的所有文件并列出。 RewriteEngine on #一級目錄法 #RewriteBase / #二級目錄法 RewriteBase /listFile/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L]
以上是“單一index.php如何實現PHP任意層級文件夾遍歷”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。