【问题标题】:How to change directory for scandir on link如何在链接上更改 scandir 的目录
【发布时间】:2019-06-27 13:50:12
【问题描述】:

我想用小脚本用scandir 打印当前目录的内容。这个想法是制作一个用于文件导航的小工具,可以预览存储 php 文件的目录以及在目录中导航的可能性。

问题是我不知道如何使用 getpost 更改 scandir 的目录(通过链接)并刷新文件以输出内容。

实际上,我的脚本只有在我将它放在我想要导航的每个目录中(然后返回)时才有效。有没有办法通过仅将其放在我要开始导航的目录中并通过单击文件夹来更改目录来使其正常工作?

我尝试创建一个变量来转发帖子值并在当前输出上创建目录链接,如 chdir(directory) 并在顶部添加一个 if/else 以检查 getpost 中是否有内容,如果然后更改dir 到这个而不是当前目录..但这仅适用于 2 个文件夹然后停止工作..

<?php
$dir = '.';
$directories = array();
$files_list  = array();
$files = scandir($dir);

foreach ($files as $file) {
    if(($file != '.') && ($file != '..') && ($file != 'index.php') && ($file != 'assets')) {
    if(is_dir($dir.'/'.$file)){
        $directories[] = $file;
        }
        else {
        $files_list[] = $file;
        }
    }
}

// Print Directory to screen
foreach ($directories as $directory) {
    echo "<div class=\"wrapper\">";
    echo "<a href=\"" . $directory . "\">";
    echo "<div class=\"preview\">";
    echo "<img src=\"assets/media/ordner.png\" alt=\"directory\" class=\"packshot zoom\" />";
    echo "</div>";
    echo "</a>";
    echo "<div class=\"title\"><p>&raquo; " . $directory . "</p></div>";
    echo "</div>";
}

// print files
foreach ($files_list as $file_list) {
    $file_list_info = pathinfo($dir."/".$file_list);
    $file_list_size = ceil(filesize($dir."/".$file_list)/1024);
    $file_list_pic = array("jpeg", "jpg", "png", "gif", "svg", "bmp", "tiff");

    if(in_array($file_list_info['extension'],$file_list_pic)) {
    echo "<div class=\"wrapper\">";
    echo "<a href=\"" . $file_list . "\" target=\"_blank\">";
    echo "<div class=\"preview\">";
    echo "<img src=\"" . $file_list . "\" alt=\"picture\" class=\"packshot\" />";
    echo "</div>";
    echo "</a>";
    echo "<div class=\"title\"><p>" . $file_list . " (" . $file_list_size . "kb)</p></div>";
    echo "</div>";
    }
}
 ?>

【问题讨论】:

    标签: php directory scandir chdir


    【解决方案1】:

    您可以使用 $_GET 变量。

    在文件的开头,您可以这样定义 dir var:

    if(!empty($_GET['dir'])){
        $dir = $_GET['dir'];
    }else{
        $dir = '.';
    }
    
    

    然后当你生成链接时使用类似的东西

    echo "<a href=\"?dir=" .$dir."/". $directory . "\">";
    

    所以当你点击链接时,它会重定向到“index.php?dir=mydir”

    页面会显示“./mydir/”的内容

    【讨论】:

    • 非常感谢。这就像一个魅力。我可以再问你一个问题吗?有没有办法停止比 php 文件所在的目录更倒退?例如,我的完整路径是:httdocs/website1/filebrowser/browser.php 我想停止/禁止返回“filewbrowser”目录。实际上我可以导航到 httdocs
    • 你可以获取 $dir 的真实路径,然后检查真实路径是否包含最大授权。例如:如果我们想要获取 httdocs,realpath 将是 "httdocs" 但这是不允许的,并且 bcs 它不包含 "httdocs/website1/" 。当它被授权时,路径将类似于 "httdocs/website1/mydir" 因此它将包含 "httdocs/website1/" 。这是一个可以做到这一点的代码:` $real = realpath($dir); $max = "httdocs/website1/"; if(strpos($real,$max) === FALSE){ $dir = '.'; }`我不知道这是否清楚,我希望它会帮助你
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2019-07-18
    • 2014-08-12
    相关资源
    最近更新 更多