2016-04-15 31 views
-2

我正在尝试以下操作:在浏览器中导航槽网页目录

我想导航浏览器中的web目录。所以我们可以说我在这里有一个文件夹:/var/www,我现在希望能够通过我自己创建的网站上的文件夹结构进行导航。因此,有可点击的文件夹,并在该文件夹再次文件夹,文件等,应该都可以下载。 我已经考虑过RecursiveDirectoryIterator,但是因为这个只能一次显示所有文件名,所以并不是我所需要的(因为我只需要目前我目录中的文件夹,然后如果我单击一个目录, (就像我会写在服务器上一样):cd testlscd folder_in_testls等等,当然有可能返回到更高级别的文件夹,就像例如here on dropbox或在Google Drive等等,我希望你知道我的意思....

正如我说我想这样的事情:

<?php 

$path = realpath('/etc'); 

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

?> 

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

任何人都知道解决方案吗?

+0

为什么downvote? – user5638730

回答

0

在构建函数中使用scandir()php。它会在locatoin

$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; 
    } 
+0

但我看到它是正确的,这只会列出一次文件,并且当点击一个文件夹时,会发生什么?或者我错了? – user5638730

+0

使用ajax调用并获取子文件夹列表,显示结果,如果文件夹添加一些类,通过使用jquery click事件raise ajax调用 –

+0

你能告诉我这样的ajax调用是如何工作的吗? – user5638730

1
<?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> 

返回特定的文件和目录名IN somephp.php

<?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 
?> 
+0

这个工程(除了你忘记的逗号除外),只在你的“somephp.php”文件中添加几乎相同的代码,所以我可以递归地在文件夹中,不仅仅是一个文件夹,然后theres没有可点击的文件夹了。我现在只有一个问题:我现在可以访问完整的文件系统,所以我也可以不用'var/www',所以例如导航到'/ etc',你知道如何避免吗? – user5638730

+0

你有什么想法吗? – user5638730

+0

可以保持如果条件 如果(SUBSTR($ _ POST [ '数据'],0,strlen的( “yourwebroot”))=== “yourwebroot”) { $ DIR = $ _ POST [ '数据'] ;其他 $ dir =“path/to/webroot”; –