【问题标题】:PHP heredoc parse error [closed]PHP heredoc解析错误[关闭]
【发布时间】:2010-11-18 23:36:24
【问题描述】:

这会产生输出页面 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 中,二元组“{$ ​​将启动解析器寻找用于替换的php 变量。

编辑

2 个很好的回应。

1) Ch4m3l3on - "&lt;?php" 与 "&lt;?" 处理。

2) Disintegrator - &lt;q&gt;在一个愚蠢的程序中遇到了类似的问题,该程序坚持将 BOM 放入 utf-8 文件(忽略首选项)&lt;/q&gt;

编辑

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

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

【问题讨论】:

  • 是时候升级到至少 5.1,最新稳定版是 5.3 :D
  • 你能告诉我哪一行是 737 吗?是EOT吗?行吗?
  • 第 737 行小于文件中的行数,但不是 $mystring= 行,即第 1063 行 - 看图
  • 检查文件的编码。前段时间我有一个类似的问题,一个愚蠢的程序坚持将 BOM 放在 utf-8 文件中(忽略首选项)
  • 注意:我不是在寻找为什么 heredoc 编码错误,因为它编码正确。这就是为什么我把第一行 $mystring = "

标签: string php heredoc


【解决方案1】:

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

【讨论】:

  • 我读过的许多解释中最好的。它必须最左对齐。
【解决方案2】:

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

【讨论】:

  • 不相关,heredoc 可以正常粘贴到其他 php 文件中,问题是为什么解析器在正确解析字符串分配的有效 heredoc 上阻塞。
  • 显然问题不在于heredoc 声明。问题必须在脚本的其他地方。就像佩德罗库尼亚所说,检查不正确的闭合花括号。此外,您可能想用完整的替换任何 php 短标签。
  • 您好 Ch4m3l3on - 不幸的是,我无法提高您的答案,因为它是评论。请重复您的回答作为答案“
  • 你也可以投票给 cmets ;)
【解决方案3】:

确保 EOT;确实在行首。

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

【讨论】:

  • 在发布前在行开头检查了 EOT 以及空格是否正常,所以 .. 处理
【解决方案4】:

如果你尝试怎么办:

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

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

【讨论】:

    【解决方案5】:

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

    所以问题很可能是该代码附近的问题,而不是您在问题中包含的问题。

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

    【讨论】:

    • 同意 仅在一个文件上发生此行为,所有其他文件都遵循 PHP 定义的功能。窒息的原因是什么,还没有人给我任何线索
    • 由于提供的代码运行没有错误,阻塞的原因与您没有向我们展示的代码有关——而且我们没有水晶球。
    【解决方案6】:

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

    例如:

    <?php
    
    while(true) {
        echo "Something\n";
    
    ?>
    

    会产生那个错误。

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-21
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 2014-12-03
        相关资源
        最近更新 更多