这会产生输出页面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字符会完美地解释所有症状。
答案 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错误,但肯定是一个未闭合的花括号。