【问题标题】:Turning a html input value into a $variable for a download function将 html 输入值转换为下载功能的 $variable
【发布时间】:2013-06-22 21:15:08
【问题描述】:

到目前为止,这个网站对我很有帮助,但我似乎终于遇到了一个问题。 如何在 html 输入中放置变量的问题之前已经被问过和回答过,但是有一个问题我似乎无法开始工作。

<?php
if(isset($_POST['file_name'])){
    $file = $_POST['file_name'];
    header('Content-Disposition: attachment; filename="'.$file.'"');
    readfile('uploads/'.$file);
    exit();
}
?>
<form action="force_download.php" method="post" name="downloadform">
  <input name= "file_name" type="hidden" value="test.txt" />
  <input type="submit" value="Download">
</form>

上面的代码用于下载文本文件“test.txt”,这是我上传文件夹中的许多文本文件之一。 我的问题? 如何将值 test.txt 转换为变量?我以前读过的一个遮阳篷是这样的:

<input type="hidden" name="file_name" value="<?php echo htmlspecialchars($file); ?>" />

问题是当我这样做时,它会下载 force_download.php 而不是我的任何文件。

我几天前才开始编码,所以是的...抱歉新手问题。

【问题讨论】:

  • 你的意思是你希望表单动作是用户在输入中插入的文件名?
  • 不太确定你在问什么,但也许是 file_get_contents()
  • 以上代码用于从我的网站下载文件。现在我正在下载 test.txt。这很好用!我得到 test.txt 没问题。但是,我的网站上有多个文件,我希望它们都有一个下载按钮。我想,要做到这一点,我必须将我的 value="test.txt" 转换为 value=$file 代码。我尝试使用您在我的主代码下方看到的行来执行此操作。但是,这会导致我下载“force_download.php”文件,而不是我在网站上上传的任何文件。
  • 您需要使用 javascript 来更改 DOM 对象的属性

标签: php html variables input download


【解决方案1】:

这是一个建议,您可能需要做一些调整。

在调用此文件的文件中,您将代码发布到:
(如果我理解得很好:intranet.php)

<form action="force_download.php" method="post" name="downloadform">
<?php
$path = "./filesfolder/"; // this you need to change to your files folder

function createDir($path)
{   
    if ($handle = opendir($path)) 
    {
        while (false !== ($file = readdir($handle))) 
        {
            if (is_dir($path.$file) && $file != '.' && $file !='..')
                printSubDir($file, $path, $queue);
            else if ($file != '.' && $file !='..')
                $queue[] = $file;
        }
        printQueue($queue, $path);
    }
}
function printQueue($queue, $path)
{
    foreach ($queue as $file) 
    {
        printFile($file, $path);
    } 
}
function printFile($file, $path)
{
    if ($file=="thumbs.db") {echo "";}
    else 
    {
    echo "
<input name= \"".$file."\" type=\"hidden\" value=\"".$file."\" />";
    }
}
createDir($path);
?>
<input type="submit" value="Download">
</form>

这将为它找到的所有文件生成 html,并带有指向每个文件的可点击链接。在这种情况下,您不需要发布的文件中的 (我认为是 force_download.php)

【讨论】:

    【解决方案2】:

    这是我编写并使用了一段时间的函数,请考虑为正确的 contect-type 添加例程:

    function downloadFile($fullPathToFile, $renameFile=''){
            if(is_file($fullPathToFile)){
                $path_parts = pathinfo($fullPathToFile);
                $dirname =  $path_parts['dirname'];
                $basename = $path_parts['basename'];
                $extension = $path_parts['extension'];
                $filename = $path_parts['filename'];
                $filesize = filesize($fullPathToFile);
    
                if(!empty($renameFile)){
                    $extension = preg_match("/\.([^\.]+)$/", $renameFile, $matches);
                    $extension = preg_replace('/\./', '', $matches[0]) ;
                } 
                        /*Change the following one line to type of files or comment out*/
                header("Content-Type: text/plain"); 
                header ("Content-Length: " . $filesize );
                header("Pragma: ");
                header("Cache-Control: ");
                if($renameFile){
                    header("Content-Disposition: attachment; filename=\"$renameFile\"");
                }else{
                    header("Content-Disposition: attachment; filename=\"$basename\"");
                }
                ob_clean();
                flush();
                readfile($dirname.'/'.$basename);
                die();
            }
            else {
                echo 'no such file or directory';
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2012-09-27
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多