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 { // 이미지 없음 } ?>
댓글 7개
삥수
인연이 있나봅니다.
안그래도 찾고 있던 소스였는데.. 감사합니다.
블로그모아 만들고 있는데.. 님 블로그 글이 수집되어서 현재 도움이 많이 될듯합니다.
Terzeron
삥수님에게 도움이 된다니 다행이군요. 그런데 아직까지는 redirect된 이미지에 대해서 가져오는 기능이 없어서 그건 좀 문제입니다. 드림위즈 블로그에 있는 이미지 파일이 특히 잘 안 되네요.
삥수
좀전에 도움주신 소스를 가지고 현재
블로그모아에 수집된 포스트에서 이미지를 걸러내서..
썸네일로 제 서버에 모두 저장시켰어요^^;
관련 소스 필요하시면 말씀하시구요.
개발일지에 나중에 공개는 다 할거지만요 ㅎㅎ
다시한번 감사드립니다.^^
핑백 :
세라비
접근 가능한 지 확인만 하는거라면, GET method 보다는 HEAD method를 쓰는 것이 낫겠군요.
Terzeron
세라비님, 감사합니다. 제가 HTTP 스펙을 잘 몰라서 HEAD method가 있는 줄도 몰랐네요. ^^ 변경해서 다시 작성하도록 하겠습니다.
핑백 :