なぜ閉じタグを省略するのでしょうか? 質問する

なぜ閉じタグを省略するのでしょうか? 質問する

ファイルの末尾にPHP の終了タグを使用するのはよくない習慣だと何度も読みました?>。ヘッダーの問題は、次のコンテキストでは無関係のようです (そして、これが今のところ唯一の有効な議論です)。

PHP の最新バージョンでは、php.ini に output_buffering フラグが設定されます。出力バッファリングが有効になっている場合、返されたコードがすぐにブラウザに送信されないため、HTML を出力した後に HTTP ヘッダーと Cookie を設定できます。

すべての優れた実践本やウィキはこの「ルール」から始まりますが、誰も正当な理由を示していません。終了 PHP タグをスキップする別の正当な理由はあるでしょうか?

ベストアンサー1

通常よりも早くヘッダーを送信すると、広範囲にわたる影響が生じる可能性があります。以下は、現時点で思いついた影響のほんの一部です。

  1. 現在の PHP リリースでは出力バッファリングが有効になっているかもしれませんが、コードを展開する実際の運用サーバーは、開発マシンやテストマシンよりもはるかに重要です。また、それらのサーバーは最新の PHP トレンドに常に即座に追従するとは限りません。

  2. 不可解な機能損失に頭を悩ませることがあるかもしれません。たとえば、何らかの支払いゲートウェイを実装していて、支払いプロセッサによる確認が成功した後、ユーザーを特定の URL にリダイレクトするとします。何らかの PHP エラー、警告、または余分な行末が発生した場合、支払いは未処理のままになり、ユーザーには請求されていないように見えることがあります。これは、不要なリダイレクトが悪である理由の 1 つでもあり、リダイレクトを使用する場合は注意して使用する必要があります。

  3. 最新バージョンの Internet Explorer でも、「ページの読み込みがキャンセルされました」というタイプのエラーが表示されることがあります。これは、数日前に私が遭遇したように、一部の PHP ファイルの行末が長すぎるために、 AJAX応答/json インクルードに、含まれるべきではないものが含まれているためです。

  4. アプリにファイルのダウンロード機能がある場合、このため、ダウンロードも中断される可能性があります。ダウンロードの具体的な中断傾向は、サーバー、ブラウザー、ファイルの種類と内容 (および、ここでは説明したくないその他の要因) によって異なるため、数年経ってもそれに気付かない可能性があります。

  5. 最後に、多くのPHPフレームワークにはシンフォニーゼンドそしてLaravel(これについてはコーディングガイドラインしかし、それはスーツに従います)そしてPSR-2 規格(項目2.2)終了タグの省略を要求します。PHPマニュアル自体(12)、ワードプレスドルパルそして他の多くのPHPソフトウェアもそうすることを勧めていると思います。標準に従う習慣を身につければ(そしてセットアップPHP-CS-フィクサーそうすれば、問題を忘れることはありません。そうでない場合は、常に問題を念頭に置いておく必要があります。

ボーナス: これらの 2 人のキャラクターに関連するいくつかの注意点 (実際には現在 1 つ) :

  1. よく知られているライブラリでも、 の後に余分な行末が含まれている場合があります?>。 たとえば Smarty では、2.* と 3.* ブランチの両方の最新バージョンでもこれが含まれています。 したがって、いつものように、サードパーティのコードには注意してください。 ボーナスのボーナス: 不要な PHP の末尾を削除する正規表現: (\s*\?>\s*)$PHP コードを含むすべてのファイルで、 を空のテキストに置き換えます。

おすすめ記事