【问题标题】:Using PHP to force image download doesn't work correctly使用 PHP 强制下载图片无法正常工作
【发布时间】:2016-11-25 12:54:19
【问题描述】:

我有一个 100% 没问题的图片链接。我可以用它来链接到图像,也可以用它来显示图像。但是,每当我尝试使用 PHP 的标头强制下载图像时,它都不起作用。这是我正在使用的:

            $file = $link;
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
            header('Content-Length: ' . filesize($file));
            readfile($file);

下载开始并询问我应该将图像保存在哪里。然而,图像下载后,它根本不会打开。我在这里做错了什么?

【问题讨论】:

  • 这是什么类型的图像 - 是 png 还是 jpeg?这对任何一个都有效吗?
  • 我已经尝试过您的代码,它运行良好。我认为您的路径有问题...检查您的路径。\
  • @WEBjuju Just JPEG.
  • @NikhilVaghela 我不明白这是怎么回事。我什至使用了网络上的各种图片来测试,它们都有同样的问题。
  • 确保您没有任何额外的输出。例如用 BOM 编码的符号。尝试将exit; 放在readfile 之后。

标签: php html image web download


【解决方案1】:

你需要先下载图片:

        $file = 'newimage.png';
        $file_contents = file_get_contents($link);
        file_put_contents($file, $file_contents);

然后就可以输出图片了:

        header('Content-type: image/jpeg');
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header('Content-Length: ' . filesize($file));
        readfile($file);
        exit();

【讨论】:

  • 这仍然和我遇到的问题一样。
  • 尝试在 readfile 之后添加一个出口,以确保没有其他事情发生。为什么你有 $file = $link.这似乎违反直觉 - $link 中的内容是您服务器上的本地文件路径吗?
  • $link 是网站图片的 URL。
  • @MittulAtTechnoBrave 图片不在我的网站上。它在外部托管。
  • @PL200 那么您需要从该服务器的http下载到您服务器的特定目录,然后才能打开它...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
相关资源
最近更新 更多