Ygetimagesize 수정본 (속도가 많이 빨라졋습니다.)

속도가 더 빠르도록 수정하였습니다.

기존에는 읽어온 텍스트중 실제 내용이 아니라 브라우져로 전송된 헤더정보를 제거하기 위하여
전체 텍스트를 읽어온다음, 최초의 줄바꿈 연속 두개자리를 찾아 없애주는 형태였습니다.

그러나 속도가 느린관계로 텍스트를 읽어오는 동안에 헤더정보인지 아닌지 체크하여
헤더정보가 끝인 지점을 찾아낸 연후에 텍스트로 저장하는 형태로 수정하였습니다.

기존에는 실행속도가 0.XXX초 대에서 현재는 0.0XX 대로 현격하게 줄었습니다.

다음은 수정된 소스입니다. 위의 처음 것과 비교해 보시기 바랍니다.


<?php

//현재 마이크로타임 측정함수
function Yget_microtime(){

  list($usec, $sec) = explode(' ', microtime());
  return ((float)$usec + (float)$sec);
}

//현재 스크립트 실행 시간 측정함수
function Yget_usetime($start, $end){

  return (float)((int)(($end - $start) * 10000) / 10000);
}

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 = '';
  $check_header = false;
while (!feof($fp)){

  $temp = fgets($fp, 1024);

  if ($check_header == false){

     //실제 파일이 아닌 헤더 정보인지 체크 하여 추가하지 않는다.
     if (preg_match("'^(\r)?\n$'", $temp)) {

       $check_header = true;
       continue;
     }
  }
  else{

     //헤더 정보가 아닌 경우에만 추가한다.       
     $text .= $temp;
  }
}

fclose($fp);

$fp = @fopen ($save_file, "w");
@fwrite($fp, $text);//유일한 파일이므로 파일에 락을 걸지 않는다.
@fclose($fp);
@chmod ($save_file, 0777);

  $size = @getimagesize($save_file);
  @unlink($save_file);

  return $size;
}


//처리시간 측정시작
$Ystarttime = Yget_microtime();

//플록님 이미지
$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);

//처리시간 측정끝
$Yendtime = Yget_microtime();
$Yusetime = Yget_usetime($Ystarttime, $Yendtime);

echo "<br>이미지 정보 : <br>";
foreach($size as $key => $value){

  echo "$key $value <br>";
}

echo "이미지 읽어오는데 사용된 시간 : $Yusetime <br>";

echo "<br>원본이미지 <img src='" . $url . "' border=0>";

?>
<br><br><a href='<?=$_SERVER['PHP_SELF']?>s' target='_blank'>소스보기</a>
<br><a href='./' target='_blank'>전체보기</a>

이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 바람부는데로

, , ,
Response
No Trackback , No Comment
RSS :
http://apmusers.com/tt/dbckdghk/rss/response/14

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

« Previous : 1 : ... 87 : 88 : 89 : 90 : 91 : 92 : 93 : 94 : 95 : Next »

블로그 이미지

유창화의 블로그(사진은 10년전 모습)

- 바람부는데로

Archives

Calendar

«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

이올린 추천글

Site Stats

Total hits:
235017
Today:
58
Yesterday:
87