PHP heredoc解析错误

时间:2009-08-12 14:19:24

标签: string php heredoc

这会产生输出页面OK

$mystring = "<<<EOT";

用以下产品替换它

  

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

$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;
?>

result =

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

任何线索

修改

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

修改

2个好的回应。

1)Ch4m3l3on - “<?php”vs“<?”处理。

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

修改

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

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

7 个答案:

答案 0 :(得分:9)

你必须把你的结尾heredoc放在行的开头。如果您使用某些具有缩进的IDE,请将其删除!你的结尾heredoc必须与你的结束php标签垂直在同一行(

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

if ($muh="kuh") {
     $foo = <<<EOT
           some text text text
EOT;
}

答案 3 :(得分:2)

如果你尝试怎么办?

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

(注意第一个EOT附近的单引号)

答案 4 :(得分:0)

我只需将其复制/粘贴到文件中即可正常运行。 (PHP 5.2.8(cli)(建于2009年2月6日12:33:08))

所以问题可能就在那个代码附近,但不是你在问题中包含的内容。

要么是这样,要么是自你的版本构建以来PHP的变化。

答案 5 :(得分:0)

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

例如:

<?php

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

?>

会产生错误。

答案 6 :(得分:0)

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