我有一个名为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文件时,我似乎无法下载。有什么建议吗?
答案 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()
会话数据,但在开始长时间运行之前。
或者使用两个不同的浏览器打开两个单独的会话。