PHP:如何使浏览器在点击时下载文件

时间:2016-04-19 22:22:46

标签: php mysql

PHP初学者。文件上传成功但我的浏览器没有下载文件,而是读取文件。所以我推荐其他线程,发现下面的代码不起作用。我点击超链接下载时要下载文件。从MySQL数据库中选择路径。

$rows = mysqli_num_rows($result);

                if($rows>0)
                {

                    while($row = mysqli_fetch_assoc($result))
                    {   
                        ?>
                        <div> <?php echo $row['Object_Name'];?> 
                        <a href="<?php 
                        $file_url = $row['Object_Path'];
                        header('Content-Type: application/octet-stream');
                        header("Content-disposition: attachment; filename=\"".$row['Object_Name']. "\""); 
                        readfile($file_url);
                        ?>">Download</a><br>
                        </div>  
                        <?php
                    }

                }

2 个答案:

答案 0 :(得分:2)

在名为download.php的分页中,有以下代码:

<?php

$filename = 'file.pdf';//this should be the name of the file you want to download 
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false); // required for certain browsers 
header('Content-Type: application/pdf');

header('Content-Disposition: attachment; filename="'. basename($filename) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($filename));

readfile($filename);

exit;
?>

您的主页应该有一个指向下载页面的链接,如下所示:

<a href="download.php">DOWNLOAD</a>

请告诉我这是否适合您。

<强>编辑:

我之前的例子是下载pdf文件。如果要下载不同类型的文件,必须稍微修改几行。我建议您首先尝试使用之前的代码下载pdf文件,并在完成其他文件的测试之后。

要从数据库中检索路径,可以使用MySQL(PDO)。

$sqlStatement = "SELECT path FROM my_table WHERE some_id = ".$something;
/*if you are retrieving the path from the database, 
you probably have a lot of different paths available 
there, so only you know the criteria which will decide
which of the many paths it is that you choose to extract*/

$sqlPrepared = $connection->prepare($sqlStatement);
$sqlPrepared->execute();

$row_info = fetch($sqlPrepared);

$filename = $row_info['path'];// this would be the $filename = 'file.pdf' 
//that was in the example above

如果您不确定如何连接到数据库,那么有很多在线解释MySQL的文章相对简单。

我希望有所帮助:)

答案 1 :(得分:0)

您必须使用两个单独的文件。

在链接页面中,您可以输出如下HTML:

<a href="http://www.example.com/download.php?file=1">Download file 1</a>
<a href="http://www.example.com/download.php?file=2">Download file 2</a>
<a href="http://www.example.com/download.php?file=3">Download file 3</a>
(...)

如果您愿意,可以使用<form>

然后,在 download.php

  1. 使用GET / POST参数选择适当的文件(上例中为$_GET['file']);

  2. 发送适当的标题(如原始代码中所示);

  3. 回显您的文件(您可以使用readfile);

  4. 强制:此脚本中没有其他输出!即使是一个额外的空间也会破坏下载的文件。