从IIS上的PHP脚本映像SRC - 不一致显示

时间:2010-06-28 15:29:21

标签: php iis image src

上周我将我的页面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%的图像是基于文件的,所以我不知道基于数据库的图像和基于文件的图像之间的结果是否有差异。当我在浏览器中直接访问image_script.php时,它会100%返回所请求的图像(i = ????)。

A&GT;任何线索,为什么显示图像的命中和错过?和,

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

  • 斯科特

1 个答案:

答案 0 :(得分:1)

嗯。无法确定,但也许你的imagecreatefromjpeg偶尔会耗尽内存?在这种情况下,您将以JPEG数据的形式发送错误消息,从不看到它,对吗?

顺便说一下,不只是将图像文件作为一个字符串抓取并将其铲除而不通过imagecreatefromjpeg / imagejpeg / imagedestroy更高效?看起来你正在读取一个JPEG文件,从中创建一个内部PHP内存映像,然后将其重新转换为JPEG(质量高达100%)然后提供该数据,当你只需读取JPEG文件数据时,打印它,就像你从数据库中打印一样。

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

...
} else {
    header ('Content-length: ' .filesize($image_file));
    readfile ($image_file);
}