различать файл и каталог в PHP - PullRequest
0 голосов
/ 19 октября 2011

Моя проблема - php-страница, которая извлекает содержимое каталога.
Как видно из фрагмента ниже, путь передается через GET.
При первом вызове страницы все читается правильно, но если вы просто прочитали, что папка содержит подкаталог, она распознается как файл.
У вас есть совет или решение?
спасибо

 <?php
     $path = $_GET['dir'];
     function createDir($path) {
         if ($handle = opendir($path)) {
             echo "<ul>";
             while (false !== ($file = readdir($handle))) {
                 if (is_dir($path . $file) && $file != '.' && $file != '..')
                     printSubDir($file, $path, $queue);
                 else if ($file != '.' && $file != '..')
                     $queue[] = $file;
             }

             printQueue($queue, $path);
             echo "</ul>";
         }
     }

     function printQueue($queue, $path) {
         foreach ($queue as $file) {
             printFile($file, $path);
         }
     }

     function printFile($file, $path) {
         echo "<li>";
            // print a file
         echo "</li>";
     }

     function printSubDir($dir, $path) {
         echo "<li>";
            // print a directory
         echo "</li>";
     }

     createDir($path);
 ?>

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

вы можете использовать DirectoryIterator , чтобы легко добиться этого:

$oIterator = new DirectoryIterator(dirname(__FILE__));
foreach ($oIterator as $oFileInfo) {

    // Either . or ..
    if ($oFileinfo->isDot()) {

    }

    // A directory
    if ($oFileInfo->isDir()) {

    }
}
1 голос
/ 19 октября 2011

Вы можете использовать is_dir() или is_file(), чтобы проверить это, а затем использовать рекурсивные функции, чтобы прочитать их. Если это просто пометить в качестве каталога, вы можете просто использовать проверку.

http://php.net/manual/en/function.is-dir.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...