PHP脚本,用于通过网站从包含服务器上指定文件夹中文件的列表页面下载文件

时间:2019-07-03 09:22:58

标签: php file download ftp winscp

我需要选择向不是程序员的其他人显示可以从FTP服务器文件夹下载的各种文件(我使用WinSCP)

现在,代码存在的问题是,如果您在PHP脚本中编写了一个特定的文件名,则可以毫无问题地下载它。但是我需要的是让他们上传(效果很好),而且让他们能够(其他时间或其他时候)从以前上传的文件中进行选择,并下载他们选择的特定文件。

因此,我们所需要做的就是打开文件夹,在其中显示所有文件,然后从其中一个文件中进行选择并下载。

有人知道如何解决这个问题,甚至有可能吗?

<?php
//uploads is the folder name at the ftp server
if ($handle = opendir('uploads/')) {
    while (false !== ($entry = readdir($handle)))
    {
        //
        if ($entry != "." && $entry != "..") {
            //download.php is the file where we write the code
            echo "<a href='download.php?file=".$entry."'>".$entry."</a>\n";
        }
    }

    closedir($handle);//
}

// we are trying to get the files by listing it with .$file variable
$file = basename($_GET['file']);
$file = 'uploads/'.$file;

//here we are 
$mimi = $file;

if(!mimi_exists($file)){ // file does not exist
    die('file not found');
} else {
    header("Cache-Control: public"); //
    header("Content-Description: File Transfer");//
    header("Content-Disposition: attachment; filename=$file");//
    header("Content-Type: application/zip");//
    header("Content-Transfer-Encoding: binary");//

    // read the file from disk
    readfile($file);
}
?>

使用前面的代码,文件名(来自文件夹)被列出并显示为链接,但是当我们单击它们时没有任何作用。

1 个答案:

答案 0 :(得分:0)

该代码

  1. 列出文件
  2. 下载文件

必须分开。


(尽管并非绝对必要),简单的方法是将它们放入单独的文件中,例如list.phpdownload.phplist.php将生成一个下载链接列表,该列表将指向download.php(在opendir ... closedir块中已经执行的操作):

if ($handle = opendir('uploads/')) {
    while (false !== ($entry = readdir($handle)))
    {
        //
        if ($entry != "." && $entry != "..") {
            //download.php is the file where we write the code
            echo "<a href='download.php?file=".$entry."'>".$entry."</a>\n";
        }
    }

    closedir($handle);//
}

download.php将包含您的其余代码:

// we are trying to get the files by listing it with .$file variable
$file = basename($_GET['file']);
$filepath = 'uploads/'.$file;

if(!file_exists($filepath)){ // file does not exist
    die('file not found');
} else {
    header("Cache-Control: public"); //
    header("Content-Description: File Transfer");//
    header("Content-Disposition: attachment; filename=$file");//
    header("Content-Type: application/zip");//
    header("Content-Transfer-Encoding: binary");//

    // read the file from disk
    readfile($filepath);
}

(我用mimi_exists替换了您奇怪的file_exists,并修复了内部“上传”文件路径意外发送到浏览器的问题)


一个类似的问题:List and download clicked file from FTP