0

上周我将我的页面 img src 值从指向图像文件转换为使用 PHP 脚本来提供图像。主要原因是同时容纳文件和数据库 BLOB 作为实际源。

现在,当用户访问某个页面时,有时会显示图像,有时不会显示。如果没有,并且页面被刷新\重新加载,那么图像就会出现。当图像没有出现时,有时它是用户今天之前已经访问过的图像。

我难住了。

这是img标签:

<img src="../somedir/image_script.php?i=1234">

image_script.php 文件确定从哪里获取图像,然后完成:

header("Content-type: image/jpeg");
if($from_db){
    print $image_blob;
} else {
    $im = imagecreatefromjpeg($image_file);
    imagejpeg($im,null,100);
    imagedestroy($im)
}

我在使用 FastCGI 的 IIS 6 上使用 PHP 5.2.8。image_script.php 文件和它所在的目录上没有缓存头。目前 99.9% 的图像是基于文件的,所以我不知道基于 db 和基于文件的图像之间的结果是否存在差异. 当我在浏览器中直接访问 image_script.php 时,它会 100% 地返回请求的图像(i=????)。

a> 任何关于为什么显示图像的命中和未命中的线索?和,

b> 实际缓存 PHP 脚本提供的图像的正确方法是什么?(它们非常静态)

  • 斯科特
4

1 回答 1

1

唔。不能确定,但​​也许你的 imagecreatefromjpeg 偶尔会耗尽内存?在这种情况下,您会以 JPEG 数据的形式提供错误消息并且永远不会看到它,对吗?

顺便说一句,不通过 imagecreatefromjpeg/imagejpeg/imagedestroy 将图像文件作为字符串抓取并将其铲出会更有效吗?看起来您正在读取 JPEG 文件,从中创建内部 PHP 内存图像,然后将其重新转换为 JPEG(质量高达 100%),然后提供该数据,此时您可以简单地读取 JPEG 文件数据并打印它,就像从数据库中一样。

如果你这样做会发生什么,说...

...
} else {
    header ('Content-length: ' .filesize($image_file));
    readfile ($image_file);
}
于 2010-06-28T15:45:32.750 回答