それほど不可解ではないかもしれませんが、ここにあります。
私はいじり回していて、これに気付き<?php
ました。ファイルに入力するだけで、その後にスペースがなく、タグだけで、解析エラーがスローされます。
単一のスペースで問題なく動作します。それ以外の場合は終了タグを省略してもまったく問題ないため、パーサーがチョークする理由を誰かが知っているかどうか疑問に思っていました。ありがとう。
それほど不可解ではないかもしれませんが、ここにあります。
私はいじり回していて、これに気付き<?php
ました。ファイルに入力するだけで、その後にスペースがなく、タグだけで、解析エラーがスローされます。
単一のスペースで問題なく動作します。それ以外の場合は終了タグを省略してもまったく問題ないため、パーサーがチョークする理由を誰かが知っているかどうか疑問に思っていました。ありがとう。
PHPのドキュメントには次のように書かれています:
<?php
PHP 5.2 以前では、パーサーは開始タグがファイル内の唯一のものであることを許可しません。これは PHP 5.3 以降で許可されています。
そうは言っても、PHP 5.3 では、ファイルに をshort_open_tags
設定した場合、エラーは引き続き表示されます。On
php.ini
これはPHP Documentation for Basic Syntaxで答えました:
<?php
PHP 5.2 以前では、パーサーは開始タグがファイル内の唯一のものであることを許可しません。これは PHP 5.3 以降で許可されています。
ただし、OPでは、開始タグ+スペースが許可されているようです(つまり、ファイル内の唯一のものではありません)。さらに、コメントから、これはディストリビューション バージョンまたはその他のパッチの場合には当てはまらないようです。
私のPHPバージョン:
$ php -v
PHP 5.3.6 (cli) (built: Mar 17 2011 20:56:13)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
問題のコード:
$ echo -n "<?php" | php
<?php
の隣にさらに追加<?php
:
$ echo -n "<?php/**/" | php
<?php/**/
また
$ echo -n "<?php;" | php
<?php;
そしてスペース:
$ echo -n "<?php " | php
(最終的に空の出力)。
その PHP バージョンではParse error: syntax error, unexpected $end
、上記の例のようなメッセージは表示されませんが、次のようになります。
$ echo -n "<?php x" | php -d display_errors=1
Parse error: syntax error, unexpected $end in - on line 1
それが役に立てば幸い。<?php
私の目には、空白が開始シーケンスに続くまで、入力がテキストとして扱われるように見えます。