Php 索引文件夹:未检测到目录

Php 索引文件夹:未检测到目录,php,file,glob,readdir,scandir,Php,File,Glob,Readdir,Scandir,scandir返回文件名,而不是路径名,因此需要添加目录前缀: <?php $dir = ''; if(isset($_GET['dir']) && !empty($_GET['dir']) && !stristr($_GET['dir'], '.')){ $dir = $_GET['dir']; echo '<a href="files.

scandir
返回文件名,而不是路径名,因此需要添加目录前缀:

<?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>';
                    }
                }
            }
        ?>
foreach(scandir('files'.$dir)作为$filename){
如果($filename==”。“| |$filename==”){
//什么也不做。我们想要的是文件和文件夹,而不是点。
}
其他的
{   
如果(是_文件($filename)){
回声“
”; } 其他的 { 回声“
”; } } }

您在第一个链接中还缺少
files.php?
,第二个链接应该使用
dir=
使其递归到子目录中。

您可能需要更好地控制它。签出:要解决另一个问题(保持在同一路径中),请将?path=To?dir=@RobW更改为?path=To@RobW。我已经签出了,但这似乎比需要的要困难得多。我有
files.php?
因为这将是指向该目录中文件的直接链接。现在我已经纠正了这一点,它检测到我放在
files/folder1/
中的伪文件,但它将其作为文件夹读取。因此,它将
文件/folder1/
列为文件夹,
文件/dummy.txt
列为文件夹,当我进入
文件/folder1/
时,它将
文件/folder1/dummy.txt也检测为文件夹。(请参阅使用我的当前代码更新的问题)在文件的直接链接中仍然需要目录前缀。我已经更新了那个案例的答案,我发现了问题所在。我们忘了更改
is_文件
函数中的路径我想我们都是人类。
<?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>';
                    }
                }
            }
        ?>
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/'. $dir . '/' . $filename .'">'. $filename .'</a><br>';
        }
        else
        {
            echo '<a href="files.php?dir=' . $dir . '/' . $filename .'">'. $filename .' (dir)</a><br>';
        }
    }
}