暇人じゃない

PHP の short_open_tag でハマった

PHP の設定(shortopentag)でハマたのでメモ。

WordPress のテンプレートを、MAMP 環境から XAMPP 環境の WordPress に移動し、表示させようとしたところ下記のようなエラーが。

Parse error: syntax error, unexpected $end in c:\hogehoge\header.php on line 60

if 文か何かのカッコを閉じ忘れていたのかと思い、コードを一通り見直してみたのですが、どうもそのような箇所がない。
1 時間程悩んでいたのですが、怪しい部分を見つけました。問題のコードは下記のような感じ。

<?php if (hogehoge): ?> 
hogehoge
<? else: ?>
hogehoge
<? endif; ?>

良く見てみると、<? になっている。試しに <?php としてあげたら、ちゃんと表示されました。

<?php if (hogehoge): ?> 
hogehoge
<?php else: ?>
hogehoge
<?php endif; ?>

なんでだろう。 Linux 環境や Mac 環境では問題なく動いてるんですよね。php.ini の設定の違いなのかな? 気になる…

というワケで、調べてみました。

PHPのテクメモ » Blog Archive » shortopentag http://php.tekmemo.net/?p=1204

どうやら、php.ini に short_open_tag という項目があるようですね。 MAMP 環境の php.ini を確認してみました。

short_open_tag = On

となっていました。 <? hogehoge ?> による PHP コードの記述を許可している、ということですね。

でも、この記述方法だと、

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

こうやって XML を宣言したときに、PHP コードと解釈されちゃうからまずいことになるよね! というワケでこんな設定項目があるみたいです。

いやあ、こんな事に引っかかっていたとは。良い勉強になりました。 全てのコードを <?php から書き始めるのが一番みたいですね。 WordPress のテーマによって <? から書き出しているものがあるようなので、注意する必要がありそうです。