即使响应状态为404,如何强制<img/>显示图像?

时间:2014-01-04 14:21:33

标签: php html http http-headers httprequest

我写了一个自动创建图片的课程。预览。它的工作方式如下:我们编写的主要应用程序代码中的某处

<img src="<?= Thumbnail::link('/image/uploads/1234567.png', 400, 300, Thumbnal::MODE_CROP) ?>"> 

并创建一个链接,返回宽度不超过400且高度不超过300像素的缩略图。

您可以在上面看到的这种静态方法link()除了创建指向缩略图的链接外什么都不做。但那时还没有缩略图。如果它只是像这样的常见链接标签

<a href="<?= Thumbnail::link('/image/uploads/1234567.png', 400, 300, Thumbnal::MODE_CROP) ?>">

点击它时会发生什么: 1.我们去了不存在的URL,正如预期的那样我们得到404.但是在.htacces中我得到了这一行:

ErrorDocument 404 /Thumbnail-resize.php

使Thumbnail-resize.php成为404 hanlder。它的作用基本上是

$brandNewPic = Thumbnail::resize($src, $newWidth, $newHeight, $mode);
} catch (Exception $e) {
   echo $e->getTraceAsString();
}
Thumbnail::sendHeader(Thumbnail::$type);
readfile($brandNewPic);

通过静态方法Thumbnail::resize()创建缩略图 并显示创建的图片。选择此策略是为了确保仅生成一次缩略图, 如果服务器alredy有这个请求的缩略图,我们只是给它一个链接。所以我们不再需要再运行这个缓慢的PHP脚本了。 当我使用标签<a>并点击它并最终出现在浏览器中的图片时,我使用它时效果非常干净。

但是当我尝试在<img>标签中直接在页面上显示缩略图时,我失败了,因为显然浏览器如果在响应状态下获得404则不会显示图像。虽然我的缩略图生成脚本已被触发并且缩略图被创建(而且我在响应正文中得到了图片),但我看到的只是替代文字。如果我刷新页面,则会出现图片。但我需要它立即显示,而不是额外的刷新。你能提出什么建议?

firebug observation

0 个答案:

没有答案