8

それほど不可解ではないかもしれませんが、ここにあります。

私はいじり回していて、これに気付き<?phpました。ファイルに入力するだけで、その後にスペースがなく、タグだけで、解析エラーがスローされます。

単一のスペースで問題なく動作します。それ以外の場合は終了タグを省略してもまったく問題ないため、パーサーがチョークする理由を誰かが知っているかどうか疑問に思っていました。ありがとう。

4

3 に答える 3

6

PHPのドキュメントには次のように書かれています:

<?phpPHP 5.2 以前では、パーサーは開始タグがファイル内の唯一のものであることを許可しません。これは PHP 5.3 以降で許可されています。

そうは言っても、PHP 5.3 では、ファイルに をshort_open_tags設定した場合、エラーは引き続き表示されます。Onphp.ini

于 2011-07-17T22:29:21.647 に答える
2

これはPHP Documentation for Basic Syntaxで答えました:

<?phpPHP 5.2 以前では、パーサーは開始タグがファイル内の唯一のものであることを許可しません。これは PHP 5.3 以降で許可されています。

ただし、OPでは、開始タグ+スペースが許可されているようです(つまり、ファイル内の唯一のものではありません)。さらに、コメントから、これはディストリビューション バージョンまたはその他のパッチの場合には当てはまらないようです。

于 2011-07-17T22:26:44.323 に答える
1

私の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私の目には、空白が開始シーケンスに続くまで、入力がテキストとして扱われるように見えます。

于 2011-07-17T22:49:12.557 に答える