单击时从文件夹下载文件的PHP下拉列表


PHP drop down list that downloads a file from a folder when clicked on

我目前正在尝试创建一个PHP下拉列表,当点击时可以从服务器上的文件夹下载文件。我正在使用IIS和joomla插件sourcerer,它允许PHP脚本在joomla网页上运行。

我目前正在使用这个代码示例(来自一个非我创建的堆栈交换帖子),并对其进行了编辑,使其适用于我自己的环境。

<p>
<select name="s1">
<option value="" selected="selected">Select Document</option>
<?php
foreach(glob(dirname(path-to-root-dir) . ''path-to-sub-folder'*') as $filename){
$filename = basename($filename);
echo "<option value='" . $filename . "'>".$filename."</option>";
}
?>
</select>
</p> 

但我还没有找到一种方法,当用户从下拉列表中单击例如test.txt时,浏览器会提示他们下载所选文件。我在.asp中看到过这一点,但我是PHP的新手,所以我不确定这是否可能?

这与PHP的关系不大,与JavaScript的关系更大。在select元素中选择项目的事件由JavaScript处理。

例如,如果使用id:唯一标识元素

<select name="s1" id="s1">

然后你就可以可靠地获得JavaScript中的元素:

var selectElement = document.getElementById('s1');

现在您可以将事件处理程序绑定到它:

selectElement.addEventListener('change', function () {
    // handle the event here
});

看起来您想通过获取select的值并将浏览器指向该值作为URL来处理事件。这样的东西应该让你开始:

selectElement.addEventListener('change', function () {
    var fileUrl = selectElement.options[selectElement.selectedIndex].value;
    window.location.href = fileUrl;
});

这假设该值实际上是文件的正确URL。如果不是,你当然需要解决这个问题。但关键是,响应此事件并引导浏览器"下载文件"是JavaScript中的客户端操作。

试试这个

   foreach (new DirectoryIterator('/path-to-sub-folder') as $file)
    {
        if($file->isDot()) continue;
        if($file->isFile())
        {
            $filename = basename($file);
            echo "<option value='" . $filename . "'>".$filename."</option>";
        }
    }

i可能会使用Mysql/PHPMYADMIN来存储文件的位置及其名称,然后使用jquery来加载

PHPScript{

$con = mysql_connect("$host","$username","$password") or die("Unable to connect to Local DB");
$db_selected = mysql_select_db("$db_name", $con)or die("Unable to select DB");
// retrive data which you want to export
$query = "SELECT * FROM File_List";
$Options = '<option value="" selected> Please select a file. </option>';
while($Row=mysql_fetch_array($query)){
$Options .= '<option value="'.$Row['FileID'].'">'.$Row['FileName'].'</option> 
';}
echo ' <select id="FileList">'.$Options.'</select> <p id="FileGrab"></p>
<script>
var from = $("#FileList").val();
$("#FileGrab").load("Grab_File.php?Name=" + from);
</script>
';

}

Grab_File.php{

$ID = $_GET['Name'];
$con = mysql_connect("$host","$username","$password") or die("Unable to connect to Local DB");
$db_selected = mysql_select_db("$db_name", $con)or die("Unable to select DB");
// retrive data which you want to export
$query = "SELECT * FROM File_List WHERE id='$ID'";
while($Row=mysql_fetch_array($query)){
$Location = $Row['Location'];
$Name = $Row['Name'];
$file = ''.$Location.''.$Name.'';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));

}