php 설정상 allow_url_fopen 가 off 되어있을때
원격이미지 정보를 가져오는 방법입니다.
일종의 편법이며, 속도때문에 완전한 대안은 될수 없습니다.
<?php
function Ygetimagesize($url, $save_dir, $referer=''){
$array = parse_url($url);
$url_scheme = $array['scheme'];
$url_server = $array['host'];
$url_path = $array['path'];
$url_query= $array['query'];
$url_port = (empty($array['port'])) ? 80 : $array['port'];
$save_file = $save_dir . preg_replace("`^.+(\.[^.]+)$`", '/' . uniqid("") . "\\1", $array['path']);
$fp = fsockopen($url_server, $url_port);
if (empty($fp)) {
//echo "error-http소켓접속에 실패하였습니다.";
return Array();//배열만 생성해서 리턴
}
fputs($fp, "GET " . $url_path . "?" . $url_query . " HTTP/1.0\n");
fputs($fp, "Accept: */*\n");
fputs($fp, "Content-Type: application/x-www-form-urlencoded\n");
fputs($fp, "Host: $url_server:$url_port\n");
fputs($fp, "Referer: $referer\n");
fputs($fp, "Cache-control: private\n");
fputs($fp, "Pragma: no-cache\n");
fputs($fp, "Connection: close\n\n");
$text = '';
while (!feof($fp)){
$text .= fgets($fp, 1024);
}
fclose($fp);
$text = preg_replace("`^[\\x00-\\x7e]+(\r)?\n(\r)?\n`", "", $text);
$fp = @fopen ($save_file, "w");
@fwrite($fp, $text);//유일한 파일이므로 파일에 락을 걸지 않는다.
@fclose($fp);
@chmod ($save_file, 0777);
$size = @getimagesize($save_file);
@unlink($save_file);
return $size;
}
//플록님 이미지
$url = "http://phosay.com/g4/data/file/demo_gallery/3660583642_49cb97ad_wo%2B091.jpg";//읽어올 url
$referer = "http://phosay.com/g4/";//속일 리퍼러, 넣지 않아도 됨
$save_dir = "./temp";
//임시저장디렉토리 지정, 상대경로 or 절대경로
//퍼미션은 웹서버가 읽을 수 있도록, 일반적으로 777
//맨마지막에 / 를 붙이지 않는다.
$size = Ygetimagesize($url, $save_dir, $referer);
echo "<br>이미지 정보 : <br>";
foreach($size as $key => $value){
echo "$key $value <br>";
}
echo "<br>원본이미지 <img src='" . $url . "' border=0>";
?>
샘플 url : http://82da.com/Ybbs/sample/Ygetimagesize.php
Posted by 바람부는데로




