PHP에서 원격 이미지의 유효성을 체크하는 방법

PHP 파일 내부에서 원격 호스트에 위치한 이미지 파일을 가져다가 IMG 태그를 달아서 사용하는 기능이 필요했는데, 링크가 잘못 되었거나 원격 호스트가 응답이 오래 걸리거나 정지 상태라서 이미지를 가지고 오지 못하는 문제가 자주 발생하곤 했다.

원격 호스트에 위치한 이미지 파일이 올바른 경로로 지정되어 있고 실제로 보여질 수 있는 것인지 확인하는 기능을 PHP로 구현하였다.

< ?
function shutdown_connection()
{
global $fp;
socket_shutdown($fp);
fclose($fp);
}
function check_image($url, $timeout = 10)
{
$url_stuff = parse_url($url);
$host_name = $url_stuff[host];
$fp = fsockopen($host_name, 80, $errno, $errstr, 2);
if (!$fp) {
return 0;
} else {
socket_set_timeout($fp, $timeout);
if (fputs($fp, "GET $url HTTP/1.0\n")) {
$res = fread($fp, 1024);
if (stristr($res, "Content-Type: image")) {
return 1;
}
}
fclose($fp);
}
return 0;
}
? >

사용예는 다음과 같다. 타임아웃을 3초로 지정하여 3초 동안 이미지를 가져오지 못하면 0을 반환하고 3초 내에 이미지가 존재함을 확인하면 1을 반환한다.

< ?
if (check_image($image_path, 3) == 1) {
// 이미지 있음
} else {
// 이미지 없음
}
?>

PHP에서 원격 이미지의 유효성을 체크하는 방법”에 대한 7개의 생각

  1. 삥수님에게 도움이 된다니 다행이군요. 그런데 아직까지는 redirect된 이미지에 대해서 가져오는 기능이 없어서 그건 좀 문제입니다. 드림위즈 블로그에 있는 이미지 파일이 특히 잘 안 되네요.

  2. 좀전에 도움주신 소스를 가지고 현재
    블로그모아에 수집된 포스트에서 이미지를 걸러내서..
    썸네일로 제 서버에 모두 저장시켰어요^^;
    관련 소스 필요하시면 말씀하시구요.
    개발일지에 나중에 공개는 다 할거지만요 ㅎㅎ

    다시한번 감사드립니다.^^

  3. 핑백: [네트워크 대통령]개발자의 하루하루..

  4. 핑백: 컴퓨터 문서자료 모음 | 조영일의 자리 매김

답글 남기기