2012-03-30 8 views
2

私は5000以上のイメージリンクを持っています。それらが存在するかどうかを調べる方法を見つける必要があります。私はgetimagesize()を使用しましたが、時間がかかりました。スピードは私のために重要です。PHP:イメージが存在するかどうかを確認する(メソッド)

私はちょっとした機能を書いていますが、機能していません。理由はわかりません。

function img_exists($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    if(curl_exec($ch)) 
     return true; 
    else 
     return false; 

    curl_close($ch); 
} 

現時点では、私はPHPでチェックを行っています。よりよい解決策があれば教えてください。

接続がタイムアウト(1秒)の場合、関数はfalseを返します。速度は非常に重要です。

更新日:ファイルは別のサーバーにあります。あなたがあなた自身のサーバー上のファイルをチェクする必要がある場合

+0

イメージがリモートであるか、このスクリプトは、同じホスティングスペースとして上で実行されている:ちょうどあなたはかなりのバイト/時間の節約になります(代わりにGETの)HEAD要求を行っている。また

、これを追加画像?もしそうなら 'file_exists()'を使うだけです – RedactedProfile

答えて

4

可能であれば、curl_multi_*関数は処理全体を高速化する必要がある場合は、manualを確認してください。

curl_setopt_array($ch, array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true)); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); 
+0

HEADの結果を見たくない場合は、curl_setopt($ ch、CURLOPT_RETURNTRANSFER、1);を追加してください。 – Acyra

2

、あなたは単にfile_exists()を使用することができます - あなたは、リモートのファイルをチェックし、allow_url_fopenを有効にする必要がある場合、あなたはこのようfopen()を使用することができます。

function url_exists($path){ 
    return (@fopen($path,"r")==true); 
} 

少しノートあなたの関数に:値を返すとcurl_close()にコールしようとしているので、このステートメントは決して到達しないので意味がありません(ストリームを決して閉じないのでメモリリークを引き起こす可能性があります)。

+0

fopenにカスタムタイムアウトを追加できますか? – haltabush

+1

@haltabush fsockopenのタイムアウトを設定する – safarov

関連する問題