PHP函数列出文件夹和文件,但检测何时是文件夹或文件


PHP function to list folders and file, but detect when is a folder or file

我该如何编辑下面的函数。。。

只允许链接文件,并允许文件夹带有h1标记?

例如,我想要的输出是

<h1>folder name</h1>
<a href="#">File.txt</a>
<a href="#">File.txt</a>
<a href="#">File.txt</a>
<h1>folder name</h1>
<a href="#">File.txt</a>
<a href="#">File.txt</a>
<a href="#">File.txt</a>

这是我发现的另一个需要编辑的Stackoverflow答案中的PHP函数。

function listFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ol>';
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</li>';
        }
    }
    echo '</ol>';
}

我不确定如何"检测"$ff变量是文件夹或文件?

这应该对您有用!目录在h1中,文件在a标签中:

(我用函数is_dir检查它是否是目录,如果是,我在h1中输出名称,否则在a标签中输出)

<?php
    function listFolderFiles($dir){
        $ffs = scandir($dir);
        echo '<ol>';
            foreach($ffs as $ff){
                if($ff != '.' && $ff != '..'){
                    echo '<li>';
                        if(is_dir($dir.'/'.$ff))
                            echo "<h1>" . $ff . "</h1>";
                        else
                            echo "<a href='"#'">" . $ff . "</a><br />";
                        if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
                    echo '</li>';
                }
            }
        echo '</ol>';
    }   

?>

如果你不想在列表中使用这个:

<?php
    function listFolderFiles($dir){
        $ffs = scandir($dir);
            foreach($ffs as $ff){
                if($ff != '.' && $ff != '..'){
                        if(is_dir($dir.'/'.$ff))
                            echo "<h1>" . $ff . "</h1>";
                        else
                            echo "<a href='"#'">" . $ff . "</a><br />";
                        if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
                }
            }
    }   
?>

使用Spl

 $dir = new FilesystemIterator( __DIR__, FilesystemIterator::SKIP_DOTS );
 foreach ($dir as $fileinfo) {
    if( !$fileinfo->isDir()){
        echo '<a href="#">'.$fileinfo->getFilename().'</a>';
    }else{
        echo '<h1>'.$fileinfo->getFilename().'</h1>';
    }
 }

还没有测试过。但它应该会成功,这是OOP的方法。好处是你可以绕过所有对点的检查,如果你喜欢Windows上的"/"而不是"''",就会有一个标志。

FilesystemIterator::UNIX_PATHS

标志是按位的,所以要使用多个标志,你可以这样做。

$dir = new FilesystemIterator( __DIR__, FilesystemIterator::SKIP_DOTS |  FilesystemIterator::UNIX_PATHS );

在这部分中,您需要修改:

// If $ff is a directory 
if(is_dir($dir.'/'.$ff)) {
        // This is where you echo the folder name
        echo '<h1>'.$ff.'</h1>';
        // This will list what's in the directory
        listFolderFiles($dir.'/'.$ff);
    }
$dir = scandir('your path');
    foreach($dir as $d) {
        if(is_file($d)) {
            echo $d . ' is file<br>';
        } else if(is_dir($d)) {
            echo $d . ' is directory<br>';
        }
    }

请参阅php手册。