PHP で作られたバッチを実行すると、なぜか、最初に空白行が出力されました。
starttag.php
<?php
require_once 'starttag_called.php';
echo "abc\n";
starttag_called.php
<?php
echo "called\n";
← 空白行
called
abc
原因
starttag_called.php
で、 <?php
の前に空白行があることが原因です。
公式マニュアル にも書いてあるとおりです。
つまり、開始タグと終了タグで囲まれている 箇所以外のすべての部分は、PHP パーサに無視されます。
なので、 <?php
の前に文字が書いてあっても、普通に出力されます。
starttag_called.php
xyz
<?php
echo "called\n";
xyz ← 空白行
called
abc
感想
もともと HTML にコードを埋め込めることが PHP のウリだったのだから、考えてみれば当たり前の動きです。
ただ、「どこで空白行を出力しているんだ?」と、がんばって PHP のコードを読んでもわからず、デバッグしてようやく気づいたという・・・。 require_once
で読み込んでいる先のコードが原因だったのも厄介でした。
ということで、本日の教訓。
開始タグの前に余計な改行を入れるな
「それがなんだってんだよ。とんでもないクソ記事だな!」
「ネタがなさすぎて、この程度の記事しか書けなかったのだ。自分的にはがんばったつもりだが、これが今の実力というものなのだろう」