この記事では、PHP で URL pseudo-static と gzip を同時にオンにした場合に競合が発生する原因と解決策を紹介します。困っている友達は参考にしてください。
問題の説明: 擬似静的 URL を有効にして gzip を無効にするだけで、Web サイトは通常の状態になります。 擬似静的 URL を有効にせずに gzip を有効にするだけで、Web サイトは通常の状態になります。 url pseudo-static と gzip を同時に有効にすると、Web サイトが正常に表示されない、コンテンツが表示されない場合がある、更新後に自動的に更新されるなどの現象が発生します。 解決策は次のとおりです: 1. サーバー設定を変更します。 サーバーにアクセスし、php.ini から zlib.output_compression を確認し、zlib.output_compression = On を zlib.output_compression = Off に変更します。 保存して、Apache または IIS を再起動します。 2. Web サイトの手順を変更します。 仮想ホストを使用する場合、php.ini を変更することはできません。一時的に変更するには、Web サイトのパブリック ファイルまたは初期化ファイルに追加します。 ! ini_get('zlib.output_compression') ob_start('ob_gzhandler') : ob_start(); 分析: zlib.output_compression を有効にすることは、各 PHP プログラムの先頭にステートメント ob_start("ob_gzhandler"); を追加することと同じです。 ただし、zlib.output_compression と ob_gzhandler の間には違いがあります。 zlib.output_compression は、PHP スクリプト パーサーと並行するスレッドで、PHP が入力すると、圧縮されたドキュメントが特定の数 (デフォルトは 4k) に達すると、データをブラウザーに送信します。 ob_gzhandler は、PHP スクリプトがすべてのコードを実行した後に、キャッシュされた出力ファイルを圧縮してブラウザーに送信するため、比較的遅くなりますが、原理は同じです。 gzip 関数がバックグラウンドでオンになった後、ヘッダー内の ob_start("ob_gzhandler") ステートメントは判断なしに強制的に実行されます。これは、プログラムが 2 つの ob_start("ob_gzhandler") ステートメントを同時に実行するのと同等です。その結果、Out ページのコンテンツが正常に実行および表示されなくなります。 したがって、通常の状況では php.ini の zlib.output_compression を Off 状態に設定することをお勧めします。これは、プログラマが判断なしに ob_start("ob_gzhandler") ステートメントを追加するためです。 |