개발 꿀팁/PHP

php 페이지나 그림이 gzip으로 압축되었는지 판단

Jammie 2022. 9. 5. 14:07
반응형

php를 이용하여 페이지나 그림이 gzip으로 압축되었는지 판단하는 방법

1.get_headers 사용
페이지 내용

<?php
ob_start('ob_gzhandler'); // gzip을 켜고 끌면 꺼짐

$data = array(
    array('name'=>'one','value'=>1),
    array('name'=>'two','value'=>2),
    array('name'=>'three','value'=>3)
);

header('content-type:application/json');
echo json_encode($data);
?>

get_headers를 사용하여 gzip 압축 사용 여부 판단

<?php
$url = 'http://www.example.com/';
var_dump(check_gzip($url));

/**
 * url이 gzip으로 압축되었는지 판단하기
 * @param String  $url 출처
 * @param Boolean
 */
function check_gzip($url){
    $header = get_headers($url, 1);
    if(isset($header['Vary']) && $header['Vary']=='Accept-Encoding'){
        return true;
    }
    return false;
}
?>

테스트 결과:
ob_gzhandler가 추가되면 true, 삭제하면 false로 돌아갑니다.



2.curl 

<?php
header('content-type:image/jpeg');
ob_start('ob_gzhandler'); // gzip을 켜고 끌면 꺼짐
echo file_get_contents('test.jpg');
?>

curl을 사용하여 gzip 압축 사용 여부 판단

<?php
$url = 'http://www.example.com/';
var_dump(check_gzip($url));

/**
 * url이 gzip으로 압축되었는지 판단하기
 * @param String  $url 출처
 * @param Boolean
 */
function check_gzip($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);         //header 정보 출력
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 반환된 정보는 직접 출력되지 않습니다
    curl_setopt($ch, CURLOPT_ENCODING, '');      // 인코딩 형식 제한 없음
    $response = curl_exec($ch);
    if(!curl_errno($ch)){
        $info = curl_getinfo($ch);
        // header 가져오기
        $header_size = $info['header_size'];
        $header_str = substr($response, 0, $header_size);
        $filter = array("\r\n", "\r");
        $header_str = str_replace($filter, PHP_EOL, $header_str);

        // 检查content-encoding
        preg_match('/Content-Encoding: (.*)\s/i', $header_str, $matches);
        if(isset($matches[1]) && $matches[1]=='gzip'){
            return true;
        }
    }
    return false;
}
?>

테스트 결과:
ob_gzhandler가 추가되면 true, 삭제하면 false로 돌아갑니다

 

반응형