2015-04-23 67 views
1

我在我的PHP網頁中顯示了大量的遠程圖像,我需要檢查圖像是否存在,以便處理沒有圖像條件。但是這個過程需要很大的負載來檢查每個遠程文件的條件。請任何人建議你的意見來處理這個問題。如何在php中檢查是否存在大量的遠程圖像

在此先感謝。

+1

使用file_exists()函數; – Saty

+0

@saty:謝謝你的回覆。我的問題是我不能使用這些函數@GetImageSize()和file_exists()爲每個圖像。它增加了頁面上的負載。 – Ashok

回答

0

而不是獲取整個文件,只是檢查請求遠程圖像是否返回HTTP狀態代碼200(找到)或其他東西(例如404找不到)。

嘗試這樣的回答:How can one check to see if a remote file exists using PHP?

您可以指示捲曲通過CURLOPT_NOBODY使用HTTP HEAD方法。

或多或少

$ch = curl_init("http://www.example.com/favicon.ico"); 

    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_exec($ch); 
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    // $retcode >= 400 -> not found, $retcode = 200, found. 
    curl_close($ch); 
2

我覺得有幾種解決方案

  1. 如果顯示遠程圖像在您的網頁(未位於你的服務器的圖像),你可以檢查圖像是否存在的JavaScript。我的意思是創建圖像並檢查它是否被加載。然後通過javascript處理異常。
  2. 您可以在顯示給用戶之前檢查圖像的存在。例如,將它們添加到您的網站。所以你只做一次,將結果存儲在數據庫中,然後只顯示那些你知道存在的圖像。
  3. 有一個PHP函數curl_multi_exec。它允許您同時執行多個http請求。

您最好將這些圖像複製到您的服務器上。如果你這樣做,你會確定圖像仍然存在,不會被修改。

+0

我更喜歡javascript解決方案。通過使用JavaScript,用戶可以快速接收網頁並感覺更加快速。如果您仍想使用服務器端檢查,請確保您使用某種緩存... –

0

這樣的事情可能會奏效。

<script type="text/javascript"> 
    //Example error handling 
    var imgPlaceHolder = '//example.com/no-img.jpg'; 
    var handelImageNotFound = function (imgId) { 
    $('#' + imgId).attr("src", imgPlaceHolder); 
    } 
</script> 

<?php 
$imgList = [ 
    '//example.com/foo1.jpg', 
    '//example.com/foo2.jpg', 
    '//example.com/baz.jpg', 
]; 
?> 

<?php for ($index = 0; $index < count($imgList); $index++): ?> 
    <img src="<?= $imgList[$index] ?>" id="img_<?= $index ?>" onerror="handelImageNotFound('img_<?= $index ?>')" /> 
<?php endfor; ?> 

現在你必須寫一個JavaScript方法「handelImageNotFound(imgId)」的功能來處理圖像丟失。