通过PHP下载图像

时间:2013-04-29 19:46:01

标签: php

我有一个名为generate.php的PHP文件,它根据我设置的一些参数生成一个PNG电子邮件。可以显示图像,例如使用它将返回“myString”文本的图像。

然后我想添加一个允许用户下载图像的链接:

我使用以下代码创建了一个文件download.php:

header('Content-disposition: attachment; filename=string.png');
header('Content-type: image/png');
readfile('generatePicture.php?string=' . $_REQUEST["string"]);

但是,当我下载一个png文件时,我似乎无法下载。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

当您读取文件()PHP文件时,会显示其来源。下面我将告诉你解决这个问题的方法。

假设generatePicture.php看起来像:

<?php
$im = imagecreatetruecolor($w, $h);
// work with the picture
header('Content-type: image/png');
imagepng($im);
?>

...它可以通过这种方式与download.php集成:

<?php
$im = imagecreatetruecolor($w, $h);
// work with the picture

if(isset($_GET['download']))
    header('Content-disposition: attachment; filename=string.png');

header('Content-type: image/png');
imagepng($im);
?>

现在,不要链接到download.php?string=loremipsum,而是链接到generatePicture.php?string=loremipsum&download=1

希望它有所帮助。

答案 1 :(得分:-1)

对于多种文件类型,我一直在成功使用它。您需要从文件信息中提取的主要内容是文件类型,文件名和文件大小。

  header("Content-Description: PHP Generated Data");
  header("Content-type:".$type);
  header("Content-Disposition: Attachment; Filename=".$name);
  header("Content-length:".$size);
  echo $data;

这可能会给你一些不同的尝试。

答案 2 :(得分:-2)

会话锁定。如果您有两个使用session_start()的脚本,则会打开第一个脚本并锁定会话的缓存,第二个脚本必须等待第一个脚本才能打开缓存。

如果您有一个长时间运行的脚本,您不想独占用户的会话,那么要么不为该脚本调用session_start(),要么在完成后调用session_write_close()会话数据,但在开始长时间运行之前。

或者使用两个不同的浏览器打开两个单独的会话。