我写了一个脚本(如下所示),它正确显示特定目录的内容并为每个文件创建一个单选按钮。我希望能够选择一个文件并将该文件下载到我的电脑上。
这可以通过更改表单的“操作”来实现吗?或者是否需要对我的脚本执行另一个脚本或更改才能完成此操作?
<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">
答案 0 :(得分:1)
我会把它放在现有脚本的开头:
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所指的方式。
答案 1 :(得分:0)
header('Location: YOURFILEDOWNLOADURL; Content-type: application/force-download');
应该工作,没有经过测试。
答案 2 :(得分:0)
为什么不为目录中的每个文件创建一个下载按钮?似乎没有必要使用表格。
删除所有表单HTML并将“for”循环更改为此,您应该没问题:
foreach($imgArray as $filename)
{
echo "<a href=\"./images/$filename\">Download '$filename'</a>";
echo "<br/>";
}
(因为这使用了foreach,你也可以删除将$ c设置为count($ imgArray)的行。)
如果你坚持使用表格,我建议你:
将表单发送到一个解析脚本,该脚本读出选择了哪个文件,然后将用户转发到该文件,就像Cyclone建议的那样,或者
当按下提交按钮时,使用JavaScript直接将页面转发到所选图像。
但是,对于您要完成的任务,这两种解决方案都是不必要的复杂化。