2012-03-30 2 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

관련 문제