PHP で動的ページをキャッシュおよび圧縮するためのテクニックの詳細な説明
mod_gzip は、Gzip を使用して静的 HTML ページを圧縮する機能を持つ Apache モジュールであり、IETF 標準に準拠するブラウザー (IE、Netscape など) を受け入れることができます。 mod_gzip を使用すると、ページのダウンロード時間が 4 ~ 5 倍長くなる可能性があります。 Web サーバーでは mod_gzip を使用することを強くお勧めします。ただし、PHP で独自の圧縮エンジンを構築する必要もありました。この記事では、PHPの出力制御機能を使ってページの読み込み速度を大幅に高速化する方法を紹介します。
PHP の出力制御機能の紹介
PHP4 で最も満足できる点は、スクリプトによって生成されたすべての出力を PHP にキャッシュさせることができ、コンテンツの送信を決定するまでブラウザーはその出力を受信しないことです。スクリプトでは、これらの関数を使用してヘッダーと Cookie を設定できますが、これは強力な出力関数のほんの一部にすぎません。
<?php void ob_start(void); ?>
は、PHP プロセッサにすべての出力を内部バッファにリダイレクトするように指示します。 ob_start が呼び出されるまで、出力はブラウザに送信されません。
<?php string ob_get_contents(void); ?>
この関数は「出力バッファ」を文字列として返します。この関数を呼び出して、蓄積された出力をブラウザに送信できます。 (バッファリング機能をオフにした後のみ!!)
<?php int ob_get_length(void); ?>
キャッシュ内の文字列の長さを返します。
<?php void ob_end_clean(void); ?>
出力キャッシュをクリアし、出力キャッシュをオフにします。この関数は、キャッシュ内のコンテンツをブラウザに出力する前に使用する必要があります。
void 501([int flag])
暗黙的なフラッシュアクションスイッチのオン/オフを切り替えるために使用されます (デフォルトはオフ)。フラッシュがオンになっている場合、print/echo またはその他の出力コマンドが呼び出されるたびに、出力コンテンツがすぐにブラウザーに送信されます。
出力コントロールを使用して PHP 出力を圧縮する
出力を圧縮するには、PHP4 でコンパイルされた Zlib 拡張パッケージを使用する必要があります。必要に応じて、PHP ドキュメントで Zlib パッケージのインストール手順を参照できます。
まず、出力キャッシュを初期化します:
<?php ob_start(); ob_implicit_flush(0); ?>
その後、print、echo、またはその他の任意のメソッドを使用して、すべての出力コンテンツを生成します。たとえば:
<?php print("Hey this is a compressed output!"); ?>
ページが生成された後、出力コンテンツを取得します:
<?php $contents = ob_get_contents(); ob_end_clean(); ?>
その後、ブラウザが圧縮データをサポートしているかどうかを検出する必要があります。サポートされている場合、ブラウザは ACCEPT-ENCODEING HTTP ヘッダーをサーバーに送信します。 $HTTP_ACCEPT_ENCODING 変数に「gzip,deflate」文字列があるかどうかを確認するだけで済みます。
<?php if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) { // 在这里生成 Gzip 压缩的内容 } else { echo $contents; } ?>
この方法は使い方が簡単で、構造が明確です。圧縮出力を生成する方法を見てみましょう:
<?php //告诉浏览器将要收到的是gzip数据 //当然在此之前,你已经检查了它们是否支持gzip,x-gzip数据格式 //如果支持的是x-gzip,那么下面的头就要用z-gzip来代替 header("Content-Encoding: gzip"); //显示gzip文件的头 //只需显示一次 echo "x1fx8bx08x00x00x00x00x00"; //计算出文件的大小和CRC码 $Size = strlen($contents); $Crc = crc32($contents); //压缩数据 $contents = gzcompress($contents, 9); //我们不能就这样输出,因为CRC码是混乱的。 //如果我在这里使用“echo $contents”,压缩的数据会被送出, //但是却不完整。文件最后的四个字节是CRC校验码,可是只发出去了三个字节。 //最后一个字节被丢掉了。我不知道这个bug在4.0.2版中解决了没有, //不过最好避免错误的方法是把正确的CRC校验码加到压缩的数据的末尾。 // //把旧的CRC校验码剥离 $contents = substr($contents, 0, strlen($contents) - 4); //仅显示压缩的数据 echo $contents; //输出CRC,和原来数据的大小(字节) gzip_PrintFourChars($Crc); gzip_PrintFourChars($Size); function gzip_PrintFourChars($Val) { for ($i = 0; $i <4; $i ++) { echo chr($Val % 256); $Val = floor($Val / 256); } } ?> //好了,你还可以按此方式附加上更多的压缩数据。
実際のテストでは、すべてのスクリプト コードは次のとおりです:
<?php ob_start(); ob_implicit_flush(0); print("I'm compressed!n"); $contents = ob_get_contents(); ob_end_clean(); header("Content-Encoding: gzip"); echo "x1fx8bx08x00x00x00x00x00"; $Size = strlen($contents); $Crc = crc32($contents); $contents = gzcompress($contents, 9); $contents = substr($contents, 0, strlen($contents) - 4); echo $contents; gzip_PrintFourChars($Crc); gzip_PrintFourChars($Size); function gzip_PrintFourChars($Val) { for ($i = 0; $i <4; $i ++) { echo chr($Val % 256); $Val = floor($Val / 256); } } ?>
PHP 出力をキャッシュする
PHP4 がまだリリースされておらず、PHP3 を使用しなければならなかったとき、私は非常に興味がありました。データベースの読み込みとファイル システムへのアクセスを軽減するためのいくつかのキャッシュ メカニズムを開発しています。 PHP3 には特に優れた方法はありませんが、出力キャッシュを使用すると、PHP4 ではすべてがはるかに簡単になります。
これは簡単な例です:
<?php //为请求的URI构造一个文件名 $cached_file=md5($REQUEST_URI); if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) { //is_valid函数验证缓存,你可以用这个函数检查Cache是否过期或其他特定的条件。 //如果文件不在Cache中或者不可用则生成输出 ob_start(); ob_implicit_flush(0); //在此输出…… $contents = ob_get_contents(); ob_end_clean(); $fil=fopen($cached_file,"w+"); fwrite($fil,$contents,$strlen($contents)); fclose($fil); } /如果请求的文件在缓存中且可用,则: readfile($cached_file); ?>
これは簡単な例です。出力キャッシュを使用すると、複雑なコンテンツ生成システムを構築したり、異なるチャンクやプログラムなどに異なるキャッシュ メカニズムを使用したりできます...
結論
PHP 出力制御関数これは、スクリプトによって生成された出力をキャッシュにリダイレクトするのに非常に役立ちます。 gzip をサポートするブラウザーで圧縮されたキャッシュ データを出力すると、読み込み時間を短縮できます。また、データ ソース (データベースまたはファイル) へのアクセスを減らすためのキャッシュ メカニズムとしても使用できます。これは XML を使用する場合に非常に重要です。
データ ソース (XML ドキュメントとデータベース) からデータをキャッシュし、(外観表示なしで) XML 形式でコンテンツを動的に生成するエンジンを PHP で構築すると、これらの XML の出力を取得し、XSLT を使用して任意の形式に変換できます。欲しい (html、wap、palm、pdf など)。このタスクは、PHP4 の出力キャッシュと Sablotron XSLT 拡張機能を使用してうまく実行できます。
以上がPHP で動的ページをキャッシュおよび圧縮するためのテクニックの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
