4

这会产生输出页面 OK

$mystring = "<<<EOT";

用以下内容替换它会产生

解析错误:语法错误,第 737 行 file.php 中的意外 $end

$mystring = <<<EOT
   This is some PHP text.
   It is completely free
   I can use "double quotes"
   and 'single quotes',
   plus $variables too, which will
   be properly converted to their values,
   you can even type EOT, as long as it
   is not alone on a line, like this:
EOT;

关于是什么导致解析器阻塞的任何想法?

我正在使用 PHP 4.4.7。

这种行为仅在一个文件上发生,所有其他文件都遵循 PHP 定义的功能。

我要说明的是处理行中可能出现的错误,以便 PHP 解析器在此失败中显示。

约翰

将文件内容更改为:-

<?php

$mystring = <<<WHATEVER
   This is some PHP text.
WHATEVER;
?>

结果 =

解析错误:语法错误,第 5 行 file.php 中的意外 $end

任何线索

编辑

原始错误与T_ENCAPSED_AND_WHITESPACE此有关,这可能是由 jQuery 引起的,例如“ if(x == y){$('#my_image').hide():}”在 heredoc 中,bigram “{$ 将启动解析器寻找 php 变量进行替换。

编辑

2 反应不错。

1) Ch4m3l3on - " <?php" vs " <?" 处理。

2) Disintegrator -<q>与坚持将 BOM 放入 utf-8 文件(忽略首选项)的愚蠢程序有类似的问题</q>

编辑

1) 用单个块替换所有内容并不能解决问题或提供任何其他指示。

2)没有BOM(字节顺序标记),可惜这个或类似的majic字符可以完美地解释所有症状。

4

7 回答 7

12

您必须将结尾的heredoc 放在首。如果您使用某些具有缩进的 IDE,请将其删除!您的结尾 heredoc 必须与您的结尾 php 标记垂直位于同一行(

于 2012-04-20T17:16:40.433 回答
8

确保“WHATEVER;”之后没有任何内容。即使是空格也会产生解析错误。我会删除该行并重新输入,<enter>在输入分号后立即点击。

于 2009-08-13T00:05:30.990 回答
5

确保 EOT;真的是在行的开头。

if ($muh="kuh") {
     $foo = <<<EOT
           some text text text
EOT;
}
于 2009-08-12T14:26:28.583 回答
2

如果你尝试:

$mystring = <<<'EOT'
...
EOT;

(注意第一个周围的单引号EOT

于 2009-08-12T14:23:33.720 回答
0

您可能应该检查是否有任何未闭合的大括号(或大括号,不记得了)。

例如:

<?php

while(true) {
    echo "Something\n";

?>

会产生那个错误。

于 2009-08-12T17:27:16.070 回答
0

我只是将它复制/粘贴到一个文件中,它运行没有错误。(PHP 5.2.8(cli)(构建:2009 年 2 月 6 日 12:33:08))

因此,问题可能出在该代码附近,而不是您在问题中包含的问题。

要么是那个,要么是你的版本构建后 PHP 的变化。

于 2009-08-12T14:24:10.693 回答
0

我没有 uptic 的代表,但 Ch4m3l3on 和 Pedro Cunhna 是对的……不正确的heredoc 可能不会导致意外的 $end 错误,但未闭合的花括号肯定会。

于 2010-11-17T14:09:03.413 回答