ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで zlib 拡張機能を使用して GZIP 圧縮出力を実装するさまざまな方法の概要

PHP_PHP チュートリアルで zlib 拡張機能を使用して GZIP 圧縮出力を実装するさまざまな方法の概要

WBOY
WBOYオリジナル
2016-07-20 11:10:48833ブラウズ

通常の状況では、大量のデータ送信があり、サーバーの帯域幅の負荷を軽減したい場合、PHP で zlib を使用してファイル送信を圧縮する方法を採用し、gzip 圧縮出力を実現することもできます。さまざまな GZIP 圧縮出力方法のまとめ

GZIP (GNU-ZIP) は圧縮技術です。 GZIP 圧縮後、ページ サイズは元のサイズの 30%、またはさらに小さくなることがあります。こうすることで、ユーザーは閲覧中に爽快感と幸福感を得ることができます。

準備

1. php_zlib.dll ファイルが見つかりませんか?

Zlib圧縮はphp4.3からphpに組み込まれたため、少なくともWindows環境ではzlibをインストールする必要はありません。

2. php 実行環境をインストールして構築します

php の gzip 圧縮出力を実現するには、php.ini 設定ファイルを介して gzip 設定を有効にするだけでは十分ではなく、Apache のサポートが必要なため、インストールして構築することをお勧めします。 php+apache+mysqlの実行環境を構築します。

php gzip設定手順

1. php.ini設定ファイルを開き、zlib.output_compression = Offを見つけて、


zlib.output_compression = Off
;zlib.output_compression_level = -1

zlibに変更します。 .output_compression = On
zlib.output_compression_level = 6

例 1

PHP は zlib 拡張機能を使用してページの GZIP 圧縮出力を実装します

コード

コードは次のとおりです コードをコピーします

function ob_gzip( $content) // $content は圧縮されるページのコンテンツです

{

if(!headers_sent() && extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip) "))//判定 ページヘッダ情報が出力されているか、PHPのzlib拡張機能が読み込まれているか、ブラウザがGZIP技術をサポートしているか
{
$content = gzencode($content." n//このページは圧縮",9); //圧縮の準備 コンテンツには「//このページは圧縮されています」というコメントが付けられ、zlib が提供する gzencode() 関数を使用してレベル 9 で圧縮が実行されます。値の範囲は次のとおりです。このパラメータの値は 0 ~ 9 で、0 は圧縮なし、9 は最大圧縮を意味します。当然、圧縮の程度が高くなるほど、CPU の消費量も増加します。
//header() 関数を使用してヘッダー情報をブラウザーに送信し、このページが GZIP で圧縮されていることをブラウザーに伝えます。
header(“Content-Encoding: gzip”);
header(“Vary: Accept-Encoding”);
header(“Content-Length: “.strlen($content));
}
return $content;圧縮されたコンテンツを返します

関数を作成したら、ob_start で呼び出します。これにより、元の ob_start() は

ob_start('ob_gzip') になります。 // ob_start() にパラメータとパラメータ名を追加します。 is 先ほどの関数名です。このようにして、コンテンツがバッファーに入ると、PHP は ob_gzip 関数を呼び出してコンテンツを圧縮します。

最後にバッファを終了します

ob_end_flush(); //バッファを終了し、内容を出力します。もちろん、バッファの内容はプログラムの実行終了時に自動的に出力されるため、この関数は必要ありません。

最後の完全な例

コードは次のとおりです コードをコピー

//ob_gzipという名前の関数を呼び出してコンテンツを圧縮します
ob_start('ob_gzip');
/ /出力コンテンツ
ob_end_flush();
//これは ob_gzip 関数です

function ob_gzip($content)
{
if(!headers_sent()&&extension_loaded("zlib")
&&strstr($_SERVER["HTTP_ACCEPT_ENCODING" ]," gzip"))
{
$content = gzencode($content." n//このページは圧縮されています",9);
header("Content-Encoding: gzip");
header("Vary: Accept -Encoding" );
header("Content-Length: ".strlen($content));
}
return $content;
}
?>

例2

swfファイルのzlib圧縮および解凍コード

ファイルの例:

例 3
コードは次のとおりです コードをコピーします
//swfファイルが圧縮されているため、必要に応じて入力できます ファイルの最初のバイトは 'F' または 'C' で決定されます
圧縮された swf ファイル:
//--------------- ---------- -------------------------------------- ---------- -----------------------
//ファイル名
$filename = "test.swf"; /ファイルを開く
$rs = fopen($ filename,"r");
//ファイルデータを読み取る
$str = fread($rs,filesize($filename));
//swfヘッダファイルを設定する
$head = substr($str,1,8 );
$head = "C".$head;
//swf ファイルの内容を取得します
$body = substr($str,8);
//ファイルの内容を圧縮します最高の圧縮レベル 9
$body = gzcompress( $body, 9);
//ファイルのヘッダーとコンテンツをマージします
$str = $head.$body
//読み取りファイル ストリームを閉じます
fclose($rs);
//新しいファイルを作成します
$ ws = fopen("create.swf","w");
//ファイルを書き込みます
fwrite($ws,$str);
//ファイルを閉じて終了します
fclose ($ws);
//---------------------------------------------- ------------ -------------------------------------- ------------
?>
SWF ファイルを抽出:
//-------------------------- ---------------------------------------------------- --------------- --------
//ファイル名
$filename = "test.swf";
//ファイルを開きます
$rs = fopen ($filename,"r");
//ファイルデータを読み取ります
$str = fread($rs,filesize($filename));
//swf ヘッダー ファイルを設定します
$head = substr($str,1, 8);
$head = "F".$head;
//swf ファイルの内容を取得します
$body = substr($str,8);
//ファイルの内容を解凍します
$body = gzuncompress($body) ;
//ファイルのヘッダーとコンテンツをマージします
$str = $head. $body;
//読み込んだファイルストリームを閉じます
$ws = fopen(" .swf","w");
//ファイルを書き込みます
fwrite($ws,$str);
//ファイルを閉じて保存します
fclose($ws);
//-------- ---------------- ---------------------------------- ---------------- ------------------------
?>


php zlib (gzip) 圧縮出力を有効にする

PHP gzip 構成の知識ポイント:

1 デフォルトでは、PHP は zlib サイト全体の圧縮出力を有効にしませんが、必要なページに対して ob_gzhandler 関数を使用します。圧縮された出力では、2 つのうちの 1 つだけを選択できます。選択しないと、エラーが報告されます。

2. zlib.output_compression のデフォルト値は Off です。または、出力バッファ サイズ (デフォルトは 4k) に設定できます。

3. zlib.output_compression_level は、デフォルトの推奨圧縮率を表します。オプションの範囲は 1 ~ 9 で、-1 は php zlib (gzip) 圧縮をオフにすることを意味します

2. php.ini 設定ファイルを保存し、Apache サーバーを再起動します

3. Apache 設定ファイル httpd.conf を開き、 deflate_module のロード

php gzip 圧縮出力設定を有効にするのが最も重要なステップです。多くのネチズンは、php.ini 設定ファイルで php gzip 設定を有効にしているが、まだ php gzip 圧縮を実装していないと言うでしょう。 Apache は deflate_module をロードできないため、メソッドは次のとおりです:

コードは次のとおりですコードをコピーします#LoadModule deflate_module modules/mod_deflate.so # 記号を削除しますで始めてApacheを再起動します。


http://www.bkjia.com/PHPjc/444679.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444679.html技術記事通常の状況では、大量のデータ送信があり、サーバーの帯域幅の負荷を軽減したい場合は、PHP で zlib を使用してファイル送信を圧縮する方法を採用します。以下では、gzip 圧縮出力を実現します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。