質問: PHPのファイルの末尾記号?>は必要ですか? フレームワーク等のコードを読んでいると、ファイル末尾に?>がありません。 必要ないのでしょうか? 初心者で申し訳ありませんが、ご回答をお願いいたします。
回答: 当然、PHPプログラムのコードだけで終了し、以降HTML出力は行われないと言う前提と解釈します。 ***必要ないのでしょうか?*** はい、必要ありません。 ただし、それだけでなく **ファイルの末尾の`?>`は付けないことが公式サイトでも推奨** されています。 PHP タグ > > ファイル全体が純粋な PHP コードである場合は、ファイルの最後の終了タグは省略するのがおすすめです。終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです。 余分な空白や改行のせいで PHPが出力バッファリングを開始し、その時点の内容を意図せず出力してしまうことになります。 > > > (`?>`は「ファイルの末尾記号」ではなく、「PHPタグの終了タグ」ですね。当然、ファイルの末尾以外では必要になってくることもあります。) 記載内容は、PHPの学習がどこまで進んでいるかによっては意味がわかりにくいかもしれませんが、 * 間違って`?>`の後ろに余計な改行や空白が存在するとその内容がHTML本体の一部として出力されてしまう。要りもしない内容をHTML本体として出力してしまうと、困ったことになることもある。 くらいに覚えておいてください。 (「PHPでレスポンスヘッダーを操作する」ようになるとわかりますが、その弊害は単にブラウザにとって「スペースの挿入が無秩序に行われるのは不都合である」なんて軽い(*)問題ではありません。) 以下は **弊害** についての若干の補足です。 (*) htbさんの回答のコメントを読ませていただいて、若干誤解の恐れがあることにようやく気付いたので、補足です。HTMLに余分な空白が挿入されて例えばレイアウトが崩れるなんてこともそれはそれで大問題(お客様から指摘されて原因を探すために一晩徹夜なんてこともありました)なのですが、私の言う弊害は「PHPサーバがエラー停止して、全く機能しなくなる」と言う可能性があると言うのを含んでいます。(`body`タグより前なら、空白は無視されるだけと言う軽い意識のメンバーがいたせいで、完動していたシステムが全く動かなくなり、一晩徹夜どころでは済まない大騒ぎになったことがあります。) 多くの場合、headerなんて関数が「HTML本体を出力してしまった後では動かない」と言うことに起因しているのですが、お時間とPHP学習の進行度合いにより調べてみて、わからない点がありましたら、またご質問くださればと思います。 (残念ながらPHP公式サイトのコード例の多くは、上記の「推奨」を守っていません。PHP公式サイトは非常に長い期間にわたって多くの人の手でメンテされてきているので、必ずしも最新の「推奨」に沿っていないこともあると思っておいた方が良いでしょう。)