我有一个生成图像的php脚本,并且(主要)使用如下:
<img src="user_image.php?id=[some_guid]" />
该脚本使用我编写的类来显示与该ID匹配的图像。但是有很多事情可能会出错,而且每个事情都会引发异常。所以我有这样的事情:
<?php
try {
if( ! isset($_GET['id']) ) throw new Exception;
$images = new User_Images;
$images->display($_GET['id']);
} catch( Exception $e ) {
header('location: images/link_error.png');
}
如果我从浏览器中查看此内容,一切正常 - 如果发生错误,地址栏中的地址将更改为images/link_error.png
并显示该地址。
但是,如果在<img>
标记中使用此脚本,并且抓取图像时出错,则根本不会显示。
标题重定向不能以这种方式工作吗?我能做到这一点的另一种方式是什么?
没有问题,浏览器重定向工作完全正常,问题是我的浏览器缓存了重定向输入之前返回的空图像。硬刷新( Ctrl + < kbd> F5 for Firefox)修复它并开始正常工作。
答案 0 :(得分:1)
有趣 - 我希望调用<img>
标记可以使用重定向。无论如何,它可能不会。我很想知道为什么不。任何人吗?
我们想到的最简单的解决方法是使用fopen()
和fpasshtru()
传递错误图像。
答案 1 :(得分:1)
你能不能给错误图像一个默认ID(即零)并使用$ images-&gt; display(0)?然后处理错误图像就像成功案例一样。
答案 2 :(得分:1)
哼哼......我猜是
header('Location: images/link_error.png');
因为先前已发送标题?
尝试在文件顶部放置ob_start()
,看看它是否能解决您的问题。
以下是调试此方法的简单方法:
try {
if (!isset($_GET['id'])) throw new Exception;
$images = new User_Images;
$images->display($_GET['id']);
} catch (Exception $e) {
if (headers_sent() === false)
{
header('Location: images/link_error.png'); // also try using the absolute URL here
}
else
{
echo file_get_contents('http://www.google.com/intl/en_ALL/images/logo.gif');
}
}
如果显示Google徽标,则需要跟踪输出数据的位置或使用ob_start()
+ ob_end_clean()
。
这个标签非常好!
答案 3 :(得分:0)
很多像PhotoBucket这样的地方只在加载请求的地方时才显示错误图像。这通常是预先构建的图像,只是说“图像错误”或其他什么。当图像动态组合在一起时,除了返回404之外,其他选项并不多。