0

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

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

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

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

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

4

3 回答 3

0

当您 readfile() 一个 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

希望能帮助到你。

于 2013-07-25T15:08:58.107 回答
-1

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

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

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

于 2013-04-29T19:55:00.440 回答
-2

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

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

要么,要么使用两个不同的浏览器打开两个单独的会话。

于 2013-04-29T19:51:46.157 回答