HTML上でPHPを動かす際にXML宣言文があるとエラーになる

ページのコンテンツを自動的に更新するためにHTML上でPHPを動かすといったことを行っているウェブサイトの管理者は結構多いのではないか。

大体、.htaccessを使って、拡張子がHTMLのファイル上でもPHPが動くように指定していることが多い。しかし、XML宣言文が記述されていることで上手く動かない場合がある。

大抵の場合は、以下のようなエラーが表示される。

Parse error: syntax error, unexpected T_STRING in /home/USER/public_html/aaa.net/index.html on line 1

といった感じ。これは以下のようなXML宣言文

<?xml version="1.0" encoding="UTF-8"?>

これの頭の <? をPHPの構文と解釈してしまうのが原因らしい。.htaccessやphp.iniで、PHPのショートカットをオフにすれば回避できるが、サーバー内でPHPの構文をショートカットで記述している場合は、それが動かなくなる。

ここはecho関数を使ってXML宣言文を出した方がトラブルが少ない。

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; ?>

といった感じでXML宣言文を書き換えることで前述のエラーを回避することができる。