#php #file #indexing #directory
#php #файл #индексирование #каталог
Вопрос:
Я создаю страницу, на которую я могу загружать файлы и показывать их пользователю на аккуратной веб-странице. Я использую следующий код, чтобы получить желаемые результаты. Все работает отлично, однако я не хочу показывать index.php файл в списке. Как мне заставить его скрыть это?
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Chase Andrews Show - Promos</title>
<link rel="stylesheet" href="/common/dir-style.css">
<script src="/common/sorttable.js"></script>
</head>
<body>
<div id="container">
<h1>Chase Andrews Show - Promos</h1>
<table class="sortable">
<thead>
<tr>
<th>Filename</th>
<th>Type</th>
<th>Size <small>(bytes)</small></th>
<th>Date Modified</th>
</tr>
</thead>
<tbody>
<?php
// Opens directory
$myDirectory=opendir(".");
// Gets each entry
while($entryName=readdir($myDirectory)) {
$dirArray[]=$entryName;
}
// Finds extensions of files
function findexts ($filename) {
$filename=strtolower($filename);
$exts=split("[/\.]", $filename);
$n=count($exts)-1;
$exts=$exts[$n];
return $exts;
}
// Closes directory
closedir($myDirectory);
// Counts elements in array
$indexCount=count($dirArray);
// Sorts files
sort($dirArray);
// Loops through the array of files
for($index=0; $index < $indexCount; $index ) {
// Allows ./?hidden to show hidden files
if($_SERVER['QUERY_STRING']=="hidden")
{$hide="";
$ahref="./";
$atext="Hide";}
else
{$hide=".";
$ahref="./?hidden";
$atext="Show";}
if(substr("$dirArray[$index]", 0, 1) != $hide) {
// Gets File Names
$name=$dirArray[$index];
$namehref=$dirArray[$index];
// Gets Extensions
$extn=findexts($dirArray[$index]);
// Gets file size
$size=number_format(filesize($dirArray[$index]));
// Gets Date Modified Data
$modtime=date("M j Y g:i A", filemtime($dirArray[$index]));
$timekey=date("YmdHis", filemtime($dirArray[$index]));
// Prettifies File Types, add more to suit your needs.
switch ($extn){
case "png": $extn="PNG Image"; break;
case "jpg": $extn="JPEG Image"; break;
case "svg": $extn="SVG Image"; break;
case "gif": $extn="GIF Image"; break;
case "ico": $extn="Windows Icon"; break;
case "txt": $extn="Text File"; break;
case "log": $extn="Log File"; break;
case "htm": $extn="HTML File"; break;
case "php": $extn="PHP Script"; break;
case "js": $extn="Javascript"; break;
case "css": $extn="Stylesheet"; break;
case "pdf": $extn="PDF Document"; break;
case "zip": $extn="ZIP Archive"; break;
case "bak": $extn="Backup File"; break;
default: $extn=strtoupper($extn)." File"; break;
}
// Separates directories
if(is_dir($dirArray[$index])) {
$extn="amp;<Directoryamp;>";
$size="amp;<Directoryamp;>";
$class="dir";
} else {
$class="file";
}
// Cleans up . and .. directories
if($name=="."){$name=". (Current Directory)"; $extn="amp;<System Diramp;>";}
if($name==".."){$name=".. (Parent Directory)"; $extn="amp;<System Diramp;>";}
// Print 'em
print("
<tr class='$class'>
<td><a href='./$namehref'>$name</a></td>
<td><a href='./$namehref'>$extn</a></td>
<td><a href='./$namehref'>$size</a></td>
<td sorttable_customkey='$timekey'><a href='./$namehref'>$modtime</a></td>
</tr>");
}
}
?>
</tbody>
</table>
<h2><?php print("<a href='$ahref'>$atext hidden files</a>"); ?></h2>
</div>
</body>
</html>
Ответ №1:
Просто не добавляйте его в свой массив. Изменить
// Gets each entry
while($entryName=readdir($myDirectory)) {
$dirArray[]=$entryName;
}
Для
// Gets each entry
while($entryName=readdir($myDirectory)) {
if ('index.php' !== $entryName) {
$dirArray[]=$entryName;
}
}
Также обратите внимание, что, как объясняется в документации, ваш цикл неверен. Из документации:
Пожалуйста, обратите внимание на способ проверки возвращаемого значения readdir() в приведенных ниже примерах. Мы явно проверяем, является ли возвращаемое значение идентичным (равным и того же типа, что и —см. Операторы сравнения для получения дополнительной информации) FALSE, поскольку в противном случае любая запись каталога, имя которой оценивается как FALSE, остановит цикл (например, каталог с именем «0»).
Итак, действительно, ваш цикл должен быть:
// Gets each entry
while(false !== ($entryName=readdir($myDirectory))) {
if ('index.php' !== $entryName) {
$dirArray[]=$entryName;
}
}
Ответ №2:
Если я правильно понял код и вопрос. Вы должны просто иметь оператор if в вашем while, чтобы пропустить любой файл с именем «index.php »
while($entryName=readdir($myDirectory)) {
if($entryName != 'index.php'){
$dirArray[]=$entryName;
}
}