2010-05-20 32 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來檢查頁面的實際內容,並確定它是否是錯誤的。