我想知道如何解决以下问题: 我正在我的服务器上读一个文件夹,我正在显示如下内容。如果有图像我将打印图像,如果有文件夹我将打印带文件夹图标的div。我想知道是否有可能点击其中一个子文件夹,然后显示该文件夹的内容,就像我当前显示父文件夹的内容一样。如果文件夹中有文件夹,它应该像无限循环一样工作。
$path = 'files';
if (($retval = scandir($path)) !== false) {
$retval = array_filter($retval, 'filter_files');
shuffle($retval);
}
function filter_files($file) {
return ($file != '.' && $file != '..' && $file != '.DS_Store' && $file != 'Thumbs.db');
}
//loop through shuffled files
foreach ($retval as $value) {
$ext = pathinfo($value, PATHINFO_EXTENSION); //file extension
if ($ext == "jpg" || $ext == "jpeg" || $ext == "gif" || $ext == "png") {
print "<img class='thumb' src='$path/$value'/>";
} else if ($ext == "") { //must be a folder
print "<div class='thumb folder'><a href=''>link_to_subfolder</a></div>";
} else {
//not supported
}
}
甚至可能吗?
答案 0 :(得分:1)
对于文件夹,在链接中放置一个GET参数:
echo '<a href="myfile.php?dir=' . $value .'">foo</a>';
然后在您的脚本中,阅读$_GET['dir']
变量以了解要使用的文件夹。您可以将此变量粘贴到$ path。
请注意,您必须记住,如果您让任何人使用该脚本,他们将能够通过更改dir
参数来打开任何文件夹。例如。如果他们通过../../../../etc
,他们可以访问服务器passwd文件。
答案 1 :(得分:0)
您可能希望拥有一个AJAXified页面,如果用户点击文件夹,它会向服务器发送一个AJAX请求并获取该文件夹的内容并显示它们。这将使PHP更简单,但你必须为页面编写一些JavaScript。
此外,您可能希望使用is_dir()
来确定某些内容是否为目录。测试是否存在文件扩展名并非万无一失(文件不必具有扩展名)。
答案 2 :(得分:0)
在您为链接设置了文件夹路径的文件夹的文件夹中,如果该路径存在,请设置加载路径:
print "<div class='thumb folder'><a href='yourfile.php?path=".$value."'>link_to_subfolder</a></div>";
在档案中:
if(isset($_GET['path'])) $path = $_GET['path'];
else $path = 'files';
该示例基本非常,您需要考虑用户是否可以查看他们请求的文件夹。例如,如果我知道您刚刚使用上面的代码,我可以输入默认密码目录的文件夹路径并查看文件。您需要添加一些验证来检查。
答案 3 :(得分:0)
如果没有太多关于递归的详细信息,这里有一个小编辑,它会你想要什么类似于你想要的东西(假设你的代码有效)。
$base = 'files';
function filter_files($file) {
return ($file != '.' && $file != '..' && $file != '.DS_Store' && $file != 'Thumbs.db');
}
function show_directory($path) {
if (($retval = scandir($path)) !== false) {
$retval = array_filter($retval, 'filter_files');
shuffle($retval);
}
//loop through shuffled files
foreach ($retval as $value) {
$ext = pathinfo($value, PATHINFO_EXTENSION); //file extension
if ($ext == "jpg" || $ext == "jpeg" || $ext == "gif" || $ext == "png") {
print "<img class='thumb' src='$path/$value'/>";
} else if (is_dir($path . '/' . $value)) { // *is* a folder
print "<div class='thumb folder'><a href=''>link_to_subfolder</a>";
show_directory($path . '/' . $value);
print "</div>";
} else {
//not supported
}
}
}
show_directory($base);
一些参考资料:
编辑:我认为我误解了这个问题,虽然这对OP来说仍然是有用的信息,我敢肯定,所以我现在就把它留下来。