2009年12月7日月曜日

XAMPP 1.7.2 上でエラーとなった PHP コード - ショートタグの設定

1. XAMPP のバージョンを上げたら PHP でエラーが発生

XAMPP 1.7.0 上で問題なく動作していた PHP のコードが、XAMPP 1.7.2 にしたら、以下のエラーを吐いた。

Parse error: syntax error, unexpected $end in C:\...

syntax error, unexpected $end の意味を教えてください - 教えて!goo によると、

<?php
で始まったPHPスクリプトの部分が
?>
で終わっていない、ということはありませんか?

コード上に、上記で指摘されている箇所はなかった。ただし、エラーが発生するコードでは、一般的な PHP のタグと

「ショートタグ」

による記述が混在していた。

 

2. ショートタグとは

ショートタグとは、 <? ではじまり ?> により、PHP のコードを示す書き方のこと。

3.  <? echo 'これは、SGML を処理する最もシンプルな方法です'; ?>

(PHP: HTML からの脱出 – Manual より)

ショートタグが動作するためには、

短縮型のタグ(例 3.)が有効なのは、php.ini 設定ファイルのディレクティブ short_open_tag が 有効になっている場合か PHP が --enable-short-tags オプションつきで configure されている場合のみです。

(同上より)

 

3. XAMPP のバージョンによる、ショートタグを動作させる設定の違い

XAMPP 1.7.0 において、phpinfo() を表示させたら、

short_open_tag      On

XAMPP 1.7.2 では、

short_open_tag      Off

となっていた。

これにより、ショートタグ形式で書かれていたコードが、PHP のコードとして認識されずエラーとなった。

 

4. ショートタグの危険性

【PHPカンファレンス2006】PHPで書かれた実際のアプリケーションに潜む危険なコード - ニュース:ITpro  によると、

… PHPのコードを埋め込むために「<?」(ショートタグという)を利用していたのも問題だという。ショートタグはデフォルトでは有効だが,オンオフを切り替えられる。オフに設定していたサーバーでは,ソースコードが見えてしまうことになる。…

元々ショートタグを使っているつもりは全くなかった。しかし、誤って書いていたものが、XAMPP 1.7.0 では問題なく動作してしまった。ショートタグが有効なため問題が表面化しなかった。 (+_+)