Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中强制下载文件_Php_Html_Download - Fatal编程技术网

如何在PHP中强制下载文件

如何在PHP中强制下载文件,php,html,download,Php,Html,Download,我有一个图片列表,我希望每个图片都有一个“下载”链接,这样用户就可以下载图片了 有人能告诉我如何为php中的任何文件提供下载链接吗 编辑 我希望在单击下载链接时显示下载面板我不想导航到要在浏览器上显示的图像如果要强制下载,可以使用以下方法: <?php // Fetch the file info. $filePath = '/path/to/file/on/disk.jpg'; if(file_exists($filePath)) { $file

我有一个图片列表,我希望每个图片都有一个“下载”链接,这样用户就可以下载图片了

有人能告诉我如何为php中的任何文件提供下载链接吗

编辑


我希望在单击下载链接时显示下载面板我不想导航到要在浏览器上显示的图像

如果要强制下载,可以使用以下方法:

<?php
    // Fetch the file info.
    $filePath = '/path/to/file/on/disk.jpg';

    if(file_exists($filePath)) {
        $fileName = basename($filePath);
        $fileSize = filesize($filePath);

        // Output headers.
        header("Cache-Control: private");
        header("Content-Type: application/stream");
        header("Content-Length: ".$fileSize);
        header("Content-Disposition: attachment; filename=".$fileName);

        // Output file.
        readfile ($filePath);                   
        exit();
    }
    else {
        die('The provided file path is not valid.');
    }
?>

如果您只是使用普通链接链接到此脚本,文件将被下载


顺便说一句,上面的代码片段需要在页面开始时执行(在出现任何标题或HTML输出之前)。如果您决定基于此创建用于下载任意文件的函数,也要小心-您需要确保防止目录遍历(非常方便),仅允许从定义的区域等下载。如果您接受来自$\u GET或$\u POST的输入。

解决方案比您想象的更简单;)简单使用:

header('Content-Disposition: attachment');

就这些。例如,Facebook也可以这样做。

您可以在.htaccess中执行此操作,并指定不同的文件扩展名。这样做有时比在应用程序中硬编码更容易

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

ForceType应用程序/八位组流
标题集内容处置附件

顺便说一句,在浏览器缓存正常工作之前,您可能需要清除它。

在HTML5的
下载
属性中;
此属性仅在设置了href属性时使用

允许的值没有限制,浏览器将 自动检测正确的文件扩展名并将其添加到文件中 (.img、.pdf、.txt、.html等)


阅读更多。

?@RaYell他用PHP说。所以它实际上是
echo':我确实想要这个,但是我怎么能在点击这个脚本应该被执行的地方用“下载”这样的链接来连接它呢?+1嘿,伙计,它工作了,但是下载的文件被发现损坏了,我无法打开这个图像。@Om然后查看下载文件的源代码以查找任何错误消息。@Om-刚刚记住,如果不包含缓存控件头,某些浏览器会很恼火。(虽然这可能不是您错误的根源。)我将再次更新代码。@OM您需要:a)稍微调整一下您的态度。b) 提供磁盘上文件的有效路径。:-)你不必重复相同的答案,你可以考虑标记,你发现的问题是相同的,是重复的。它们不是重复的。它们都是不同的问题,但有类似的可能解决方案。每个问题的单个答案可能与人们更相关,因此将其标记为重复可能会破坏有用的信息。只是我给出的答案可能对一些寻找这些问题的人有用。我回答的所有这些问题都是在我自己试图找到答案时在谷歌搜索中提出的。我花了很长时间才找到解决方案,我想回答每一个问题,这样任何搜索的人都会知道这个解决方案。
echo '<a href="path/to/file" download>Download</a>';