PHP中区分文件和目录

发布于 2024-12-10 17:17:07 字数 1173 浏览 0 评论 0原文

我的问题是一个提取目录内容的 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);
 ?>

my problem is a php page that extracts the contents of a directory.
As you can see in the snippet below, the path is passed via GET.
The first time I call the page reads everything correctly, but if you just read the folder contains a sub-directory, it is recognized as a file.
Do you have any advice or solution?
thanks

 <?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);
 ?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

懒的傷心 2024-12-17 17:17:07

您可以使用 DirectoryIterator 轻松实现此目的:

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

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

    }

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

    }
}

you could use the DirectoryIterator to easily achieve this:

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

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

    }

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

    }
}
青衫负雪 2024-12-17 17:17:07

您可以使用 is_dir()is_file() 来检查这一点,然后也使用递归函数来读取这些内容。如果只是将 is 标记为目录,则可以使用检查。

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

You can use is_dir() or is_file() to check this and than use recursive functions to read those as well. If it's just to mark is as a directory you can just use the check.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文