2010-05-20 65 views
3

我正在尝试检测图像是否存在于远程服务器上。但是,我尝试了几种方法,无法让它们工作。如何检测页面重定向与PHP?

现在,我尝试使用此:

 
if (!CheckImageExists("http://img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg")) { 
    print_r("DOES NOT EXIST"); 
} else { 
    print_r("DOES EXIST"); 
}; 

function CheckImageExists($imgUrl) { 
    if (fopen($imgUrl, "r")) { 
     return true; 
    } else { 
     return false; 
    }; 
}; 

但它返回“真”的图像是否实际存在与否(上面的图片应该,但将其更改为乱码,它仍然会返回'真正')。我有一种感觉,可能是因为如果URL不存在,它会重定向到网站的主页。但我不知道如何检测。

感谢您的帮助!

+0

您可以通过将URL粘贴到浏览器中轻松测试该假设(除非您认为PHP正在重定向......但我可以告诉您它不是) – Brian 2010-05-20 17:18:53

+0

哦,我确定它确实重定向 - 如果图像没有不存在,它只是重定向到网站的主页。我上面测试的那个URL是有效的,你可以自己尝试。 – blabus 2010-05-20 19:01:07

回答

2

使用cURL

获取资源后,您可以获取调用curl_errno()的错误代码。

+0

我也尝试过这种方法,但是,无论图像是否真实存在,或者它不是,只是重定向,我都会返回代码“200”。所以我不知道如何用它来区分这两者。 – blabus 2010-05-20 19:01:56

+0

代码200是OK,这意味着它不是404,所以忘了这一点。我看到,如果我请求不存在的http://img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg2,我会得到一个有效的页面。鉴于此网站不符合W3C(不发送404),您需要手动处理该网站 - 即检查收到的内容以查看它是否为“自定义”404页面。 – Seb 2010-05-20 19:27:16

0

您有可能将HTML页面带回到包含“404图片未找到”或类似内容的$ imgUrl中。

您应该能够检查指示请求失败或重定向的代码的响应。

+0

我将如何去检查代码?因为正如我上面所说的,我尝试过的一种方法会返回代码'200',无论图像是否存在,或者不存在,只是重定向。 – blabus 2010-05-20 19:05:23

0

这应该做的伎俩(利用图像尺寸):

if (!CheckImageExists("http://www.google.com/intl/en_ALL/images/srpr/logo1w.png")) { 
    echo 'DOES NOT EXIST'; 
} else { 
    echo 'DOES EXIST'; 
}; 

function CheckImageExists($imgUrl) { 
    if (@GetImageSize($imgUrl)) { 
     return true; 
    } else { 
     return false; 
    }; 
}; 
+0

我也试过这种方法,但它总是返回'假',即使对于存在的图像也是如此。 – blabus 2010-05-20 19:04:09

0

得到它与勒布的方法工作。只是使用YQL来检查页面的实际内容,并确定它是否是错误的。