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 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 » 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 のテーマによって <?
から書き出しているものがあるようなので、注意する必要がありそうです。