Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在浏览器中浏览webdirectory_Php_File_Directory Listing - Fatal编程技术网

Php 在浏览器中浏览webdirectory

Php 在浏览器中浏览webdirectory,php,file,directory-listing,Php,File,Directory Listing,我目前正在尝试以下操作: 我想在浏览器中浏览我的webdirectory。假设我在这里有一个文件夹:/var/www,现在我希望能够在我自己创建的网站上浏览文件夹结构。所以有可点击的文件夹,在那个文件夹里,文件夹,文件等等,都应该是可下载的。 我已经考虑过了,但是由于这一次只显示所有的文件名,这不是我所需要的(因为我只需要我当前所在目录中的文件夹,然后如果我点击一个目录,再次进入该目录,等等)(就像我(在服务器上)写的那样):cd-testlscd-folder\u-in\u-testls,等等

我目前正在尝试以下操作:

我想在浏览器中浏览我的webdirectory。假设我在这里有一个文件夹:
/var/www
,现在我希望能够在我自己创建的网站上浏览文件夹结构。所以有可点击的文件夹,在那个文件夹里,文件夹,文件等等,都应该是可下载的。 我已经考虑过了,但是由于这一次只显示所有的文件名,这不是我所需要的(因为我只需要我当前所在目录中的文件夹,然后如果我点击一个目录,再次进入该目录,等等)(就像我(在服务器上)写的那样):
cd-test
ls
cd-folder\u-in\u-test
ls
,等等,当然也有可能返回到更高级别的文件夹。与例如or等相同的行为,我希望你知道我的意思

正如我所说,我试过这样的方法:

<?php

$path = realpath('/etc');

$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
    echo "$name\n";
}

?>

但它只是从完整的
var/www
-文件夹中递归列出所有文件,这不是我想要的。

使用内置函数scandir()php。它将返回该位置中的特定文件和目录名

 $dir = '/path/to/my/directory';
    $cdir = scandir($dir);
    foreach ($cdir as $key => $value)
    {
       if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
       {
         //your code here 

       }
    }

//This is one more example to get files recursively.

    function dirToArray($dir) {

       $result = array();

       $cdir = scandir($dir);
       foreach ($cdir as $key => $value)
       {
          if (!in_array($value,array(".","..")))
          {
             if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
             {
                $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
             }
             else
             {
                $result[] = $value;
             }
          }
       }

       return $result;
    }

但我看对了,这只列出了一次文件,当单击文件夹时,会发生什么?或者我错了吗?使用ajax调用并获取子文件夹列表,显示结果,如果文件夹添加了一些类,则使用jquery click事件引发ajax调用此方法有效(除了您忘记的逗号),只在“somephp.php”中添加了几乎相同的代码我现在只有一个问题:我现在可以访问完整的文件系统,这样我也可以走出
var/www
,例如导航到
/etc
,你知道如何避免吗?你有什么想法吗?如果有,你可以继续如果(substr($_POST['data'],0,strlen(“yourwebroot”))===“yourwebroot”){$dir=$_POST['data'];}否则$dir=“path/to/webroot”;是的,我也考虑过类似的事情,但有一个问题:如果有人知道如何处理html,那么去另一个目录也没问题,因为他们可以在chrome for developer tools中按f12,然后他们只需将数据键的内容更改到他们想要的文件夹中,他们就在其中了……怎么办w?如果他们更改数据键也不是问题,因为如果条件是这样工作的,例如,您的文档根是“xyz”,现在您希望只允许使用xyz/images文件夹。数据键始终是这样的:images/folder1、images/folder2、images/file.jpg…如果条件将检查目录是否以images开头,如果是,则它将转到子目录(images/folder1/folder5),否则它将只显示images文件夹。我希望这会有所帮助。。
<?php
    $dir = '/path/to/my/directory';
    $cdir = scandir($dir);
    $output="";
    foreach ($cdir as $key => $value)
    {
       if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
       {
               $output.="<div class='dir-div'  data-key='".$dir . DIRECTORY_SEPARATOR . $value."'>$value</div>";

        }
        else
        {
           $output.="<div class='file-div'>$value</div>";
        }

    }

?>
<div class="media-manager">
        <?php echo $output;?>
</div>

<script>
 $(".dir-div").on("click",function(){
     $.ajax({
         url:'somephp.php',
         method:'POST',
         data:{data:$(this).attr("data-key")}
         success:function(data){
            $(".media-manager").html(data);
         }
     }) 
 })
</script>
<?php
    $dir =$_POST['data'];
    $cdir = scandir($dir);
    $output="";
    foreach ($cdir as $key => $value)
    {
       if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
       {
             $output.="<div class='dir-div'  data-key='".$dir . DIRECTORY_SEPARATOR . $value."'>$value</div>";

        }
        else
        {
           $output.="<div class='file-div'>$value</div>";
        }

    }
echo  $output
?>