PHP の short_open_tag でハマった
PHP の設定(short_open_tag)でハマたのでメモ。
WordPress のテンプレートを、MAMP 環境から XAMPP 環境の WordPress に移動し、表示させようとしたところ下記のようなエラーが。
Parse error: syntax error, unexpected $end in c:\hogehoge\header.php on line 60if 文か何かのカッコを閉じ忘れていたのかと思い、コードを一通り見直してみたのですが、どうもそのような箇所がない。
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 » short_open_tag 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 のテーマによって <? から書き出しているものがあるようなので、注意する必要がありそうです。