繁体   English   中英

使用PHP从目录下载所选文件

[英]Download Selected File from Directory with PHP

我有一个编写的脚本(如下),可以正确显示特定目录的内容并为每个文件创建一个单选按钮。 我希望能够选择一个文件并将该文件下载到我的计算机上。

是否可以通过更改表单的“操作”来实现? 还是我需要对脚本进行其他脚本或更改才能完成此任务?

    <form name="myform" action="#" method="POST">



<?php
$dirPath = dir('./images');
$imgArray = array();
while (($file = $dirPath->read()) !== false)
{
  if ((substr($file, -3)=="gif") || (substr($file, -3)=="jpg") || (substr($file, -3)=="png"))
  {
     $imgArray[ ] = trim($file);
  }
}
$dirPath->close();
sort($imgArray);
$c = count($imgArray);
for($i=0; $i<$c; $i++)
{
    echo "<input type=\"radio\" name=\"group1\" value=\"" . $imgArray[$i] . "\">" . $imgArray[$i] . "<br />";
}
?>
</select>

<input type="submit" value="download">

我将其放在现有脚本的开头:

if(isset($_POST['group1'])){
    $f=preg_replace('/(\.\.\/?)+/','',$_POST['group1']);
    if(file_exists('./images/'.$f)){
        header("Content-type: ".filetype('./images/'.$f));
        header('Content-disposition: attachment; filename="'.$f.'"');
        echo file_get_contents('./images/'.$f);
        exit;
    }
}

这是我完成Cyclone所指目标的首选方式。

header('Location: YOURFILEDOWNLOADURL; Content-type: application/force-download');

应该工作,还没有测试。

为什么不只为目录中的每个文件创建一个下载按钮? 似乎无需为此使用表格。

删除所有表单HTML并将“ for”循环更改为此,您应该可以:

foreach($imgArray as $filename)
{
    echo "<a href=\"./images/$filename\">Download '$filename'</a>";
    echo "<br/>";
}

(因为这使用了foreach,所以您也可以删除将$ c设置为count($ imgArray)的行)。

如果您坚持使用表格,建议您:

  • 将表单发送到解析脚本,该脚本读取选定的文件,然后将用户转发到该文件,如Cyclone所建议的那样,或者

  • 按下“提交”按钮后,使用JavaScript将页面直接转发到所选图像。

但是,对于您要完成的任务,这两种解决方案都不必要地复杂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM