我需要选择向不是程序员的其他人显示可以从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);
}
?>
使用前面的代码,文件名(来自文件夹)被列出并显示为链接,但是当我们单击它们时没有任何作用。
答案 0 :(得分:0)
该代码
必须分开。
(尽管并非绝对必要),简单的方法是将它们放入单独的文件中,例如list.php
和download.php
。 list.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
,并修复了内部“上传”文件路径意外发送到浏览器的问题)