<?php
$dir = '';
if(isset($_GET['dir']) && !empty($_GET['dir']) && !stristr($_GET['dir'], '.')){
$dir = '/'. $_GET['dir'];
echo '<a href="files.php">back to /</a><br><br>';
}
foreach(scandir('files'. $dir) as $filename){
if($filename == ".." || $filename == "."){
// do nothing. We want files and folders, not dots.
}
else
{
if(is_file($filename)){
echo '<a href="files/'. $filename .'">'. $filename .'</a><br>';
}
else
{
echo '<a href="files.php?path='. $filename .'">'. $filename .' (dir)</a><br>';
}
}
}
?>
Поэтому я хочу создать индексатор файлов для своего сайта, как если бы вы видели его в проводнике Windows (НЕ т.е.!). Но сценарий, который у меня сейчас есть, просто обнаруживает одну папку в каталоге files/
(все файлы, которые я хочу проиндексировать) и полностью пропускает файлы, внутри или за пределами подпапки. И когда я нажимаю на подпапку, она продолжает действовать так же, как и в основной папке (files/
).
Как мне решить эту проблему?
Другой вопрос, использовать glob
или scandir
? Он будет содержать только ~ 80 файлов, поэтому мне не придется иметь дело с проблемой memory_limit, как это указано в страница PHP.net:
Не используйте glob (), если вы пытаетесь перечислить файлы в каталоге, где хранится очень много файлов (> 100 000). Вы получаете сообщение об ошибке «Допустимый размер памяти в байтах XYZ исчерпан ...». Вы можете попробовать увеличить переменную memory_limit в php.ini. У меня установлено 128 МБ, и скрипт все равно достигнет этого предела, пока glob () обрабатывает более 500 000 файлов.
Обновленный код после решения Бармара:
<?php
$dir = '';
if(isset($_GET['dir']) && !empty($_GET['dir']) && !stristr($_GET['dir'], '.')){
$dir = $_GET['dir'];
echo '<a href="files.php">Back to /</a><br><br>';
}
foreach(scandir('files'. $dir) as $filename){
if($filename == ".." || $filename == "."){
// do nothing. We want files and folders, not dots.
}
else
{
if(is_file($dir .'/'. $filename)){
echo '<a href="'. $filename .'">'. $filename .'</a><br>';
}
else
{
echo '<a href="files.php?dir='. $dir .'/'. $filename .'">'. $filename .' (dir)</a><br>';
}
}
}
?>