我有一个动态图像,它使用GD投入一些叠加图像/文本。这将是dynamicImage.php?firstName = Bob& lastName = Sacamano。我想提示下载该文件,所以我创建了一个download.php文件作为中间人:
//Get the Arguments
$file .= "firstName=".filter_var($_GET['firstName'], FILTER_SANITIZE_STRING);
$file .= "&lastName=".filter_var($_GET['lastName'], FILTER_SANITIZE_STRING);
//get The File Size
$size = intval(sprintf("%u", filesize($file)));
//Header Info to Prompt for Download and name it a .jpg
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-disposition: attachment; filename=dynamicImage.jpg");
header("Content-Length: ".$size);
readfile($file, true);//.$file);
有两个问题,首先我收到此错误:
PHP Warning: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for dynamicImage.php?firstName=bob&lastName=Sacamano in /www/download.php on line 19
PHP Warning: readfile(dynamicImage.php?firstName=bob&lastName=Sacamano) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: No such file or directory in /www/download.php on line 25
了解它如何解析&amp;到&amp; amp; ?但不仅如此。如果我取出参数并离开dynamicImage.php,它会提示我下载原始的php文件。有没有办法让它运行PHP然后下载生成的图像? BTW我的dynamicImage.php结束于:
header("Content-Type: image/JPEG");
ImageJpeg ($bg);
imagedestroy($bg);
FIXD。我这样改变了我的dynamicImage.php:
if(isset($_GET['download'])){
header('Content-Description: File Transfer');
header('Content-Type: application/octet-image');
header("Content-disposition: attachment; filename=dynamicImage.jpg");
}else{
header("Content-Type: image/JPEG");
}
ImageJpeg ($bg);
imagedestroy($bg);
答案 0 :(得分:3)
我会尝试在初步回答中添加一些评论。
尝试通过http单独调用另一个脚本来下载文件是倒退的,并且使一个简单的问题复杂化。
将dynamicImage.php的原始代码重构为函数会更容易。然后将该文件作为library.php中的库包含在内,并使用dynamicImage.php中的函数返回带有Content-disposition标头集的图像。
或者您可以将下载作为第三个参数添加到dynamicImage.php脚本中,并在设置该参数时将Content-Disposition标头添加到输出格式dynamicImage.php。
另见@ Novikov的回答。
答案 1 :(得分:0)
如何在硬盘上调用文件?这是你应该文件化()的价值。
答案 2 :(得分:0)
您是否试图通过HTTP从PHP脚本中调用PHP脚本?非常Rube Goldbergy。
filesize("http://url")
。我建议在dynamicImage.php中重构代码,以便例如&amp; action = download可以让你将图像下载为文件而不是jpeg。
答案 3 :(得分:0)
我认为你只有2个解决方案: