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