【问题标题】:How to detect page redirect with PHP?如何使用 PHP 检测页面重定向?
【发布时间】:2011-02-22 00:00:14
【问题描述】:

我正在尝试检测远程服务器上是否存在图像。但是,我尝试了几种方法,但都无法正常工作。

现在我正在尝试使用它:

如果(!CheckImageExists(“http://img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg”)){ print_r("不存在"); } 别的 { print_r("确实存在"); }; 函数 CheckImageExists($imgUrl) { 如果(fopen($imgUrl,“r”)){ 返回真; } 别的 { 返回假; }; };

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

感谢您的帮助!

【问题讨论】:

  • 您可以通过将 URL 粘贴到浏览器中轻松测试该假设(除非您认为 PHP 正在重定向……但我可以告诉您不是)
  • 哦,我确定它正在重定向——如果图像不存在,它只会重定向到网站的主页。我上面测试的那个网址是有效的,你可以自己试试。

标签: php image file detect exists


【解决方案1】:

您可能会在 $imgUrl 中返回包含“404 图像未找到”或类似内容的 HTML 页面。

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

【讨论】:

  • 我将如何检查代码?因为正如我上面所说,我尝试的一种方法会返回代码“200”,无论图像实际存在,还是不存在并且只是重定向。
【解决方案2】:

使用cURL。

获取资源后,可以得到错误码调用curl_errno()。

【讨论】:

  • 我也尝试过这种方法,但是,无论图像实际存在还是不存在并且只是重定向,我都会返回一个代码“200”。所以我不知道如何使用它来区分两者。
  • Code 200 表示 OK,这意味着它不是 404,所以忘记这一点。我看到如果我请求不存在的img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg2,我会得到一个有效的页面。鉴于此站点不符合 W3C(不发送 404),您需要手动处理此站点 - 即检查接收到的内容以查看它是否是“自定义”404 页面。
【解决方案3】:

这应该可以解决问题(使用图像大小):

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;
    };
};

【讨论】:

  • 我也尝试过这种方法,但它总是返回“false”,即使对于确实存在的图像也是如此。
【解决方案4】:

可以使用 Seb 的方法。刚刚使用 YQL 来检查页面的实际内容并确定它是否有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2011-02-02
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2013-11-13
    相关资源
    最近更新 更多