从另一台服务器
问题描述:
说抓取的图像,在这个例子中,这是一个图像:这是对网站A.从另一台服务器
我打电话这个图像转换成B网站与<img>
标签托管http://www.basitansari.com/wp-content/uploads/logoaba.png。如果网站A的所有者删除了这张图片,那我怎么知道图片已经被PHP删除?如果网站A的所有者删除了图片,我想要显示一张notfound.jpg
图片。我应该为此目的使用cURL还是其他?
答
if (!$fp = fopen('http://www.basitansari.com/wp-content/uploads/logoaba.png', 'r')) {
// The image cannot be retrieved, handle it here.
} else {
fclose($fp);
}
这是最快的方法,因为它只是检查图像是否可以成功检索,并不下载整个文件。
答
你应该叫与HEAD方法URL,并检查状态代码404(未找到)或200(OK)
+0
感谢您的回答,我现在正在尝试这种方法。 – 2012-01-28 00:21:34
答
您可以直接拨打:检查是否存在图像源使用的fopen,如果没有显示notfound.jpg 。 @用于禁止警告
<img src="<?php if (@fopen("http://www.basitansari.com/wp-content/uploads/logoaba.png", "r")) {echo 'http://www.basitansari.com/wp-content/uploads/logoaba.png';} else{echo 'notfound.jpg';}?>" />
答
检查服务器端图像是绝对有可能的,但它可能不是最好的解决方案。这样做意味着所有有效的图像将被加载两次(服务器端和客户端一次)。更好的方法可能是使用JavaScript来处理破碎的图像。以下代码只会在加载图像时发生错误时采取措施,并将其替换为您指定的图像:
<script type="text/javascript">
function brokenImage(obj) {
obj.onerror = '';
obj.src = 'path/to/notfound.jpg';
return true;
}
</script>
<img onerror="brokenImage(this);" src="broken.jpg" alt="" />
如果图像是100s megs,该怎么办?为什么他只是为了知道它是否在那里?有更好的方法来做到这一点。看到我的回答 – Zepplock 2012-01-28 00:03:59
@Zepplock这不会传输整个图像。试试看。它只发送请求,读取头并让套接字准备好接收数据 - 只要确认文件是否可访问,“fopen()”调用就会返回。当然,这是'HEAD'方法应该做的,但是这样做需要(稍微)更多的代码,并且要求服务器正确地处理HEAD,这总是有可能不会。这只是初始化一个'GET',确认它是否会起作用,然后返回。 – DaveRandom 2012-01-28 00:09:41
谢谢@DaveRandom它正在工作:) – 2012-01-28 00:12:26