【问题标题】:PHP If Statement with nested HTML is failing with unexpected $end error带有嵌套 HTML 的 PHP If 语句因意外 $end 错误而失败
【发布时间】:2014-02-09 04:23:19
【问题描述】:

关于堆栈溢出的第一个问题。我总是能够在不问问题的情况下找到我想要的东西,但这让我很困惑。

我正在将我的网站升级为使用亚马逊云托管。作为升级的一部分,我将我的代码部署到我标记为 E1 服务器(开发)的地方。我认为这将是一个快速的过程,但我遇到了 PHP 中的 if 语句已被证明是相当大的障碍。

我在 php if 语句中使用嵌套 HTML 向我网站上的用户显示反馈。这在我以前的托管服务提供商 PHP 5.3.13 版本上运行良好,而新服务器的 PHP 版本为 5.3.28。

代码如下:

$positive_feedback = $_SESSION['letter_update_feedback'];

if($positive_feedback != "")
{
?>
<div class="positivefeedback">
<h3>
<?php
echo $positive_feedback;
$positive_feedback = "";
?>
</h3>
</div>
<?
}
$_SESSION['letter_update_feedback'] = $positive_feedback;

在新服务器上失败并出现以下错误:

解析错误:语法错误,第 1239 行 /var/www/html/viewletter.php 中的意外 $end

另一方面,如果我从 if 语句中删除所有本机 HTML,并用 echo 替换它们,它会起作用。

$positive_feedback = $_SESSION['letter_update_feedback'];

if($positive_feedback != "")
{
echo '<div class="positivefeedback">
<h3>';

echo $positive_feedback;
$positive_feedback = "";

echo '</h3>
</div>';

}

$_SESSION['letter_update_feedback'] = $positive_feedback;

提前感谢所有帮助。

【问题讨论】:

    标签: php html if-statement nested echo


    【解决方案1】:

    在 PHP 中编程时,站长可能会遇到错误消息,例如解析错误:语法错误,意外 $end。此错误与 PHP 中的语法错误有关。错误的最可能原因是 PHP 代码中的括号丢失或不匹配。为了解决PHP中缺少括号的错误,必须从头检查代码以搜索它。避免错误的一种方法是在代码中使用适当的缩进。一旦代码中的所有括号都设置正确,解析错误:语法错误,意外的$end将被修复。

    解析错误:语法错误,意外 $end 用 PHP 编程时,很可能遇到以下错误:

    解析错误:语法错误,第 1 行命令行代码中出现意外 $end

    是什么导致了这个错误?

    事实上,这个错误意味着 PHP 已经完成了对你的代码的分析,但是你忘记在你的页面中的某个地方或者那些被包含的地方关闭一个符号。

    情况:

    1. 您忘记关闭引号,因此 PHP 将继续分析您的代码,直到找到右引号。

    2. 你忘了关闭一个括号,所以从最后一个开始,PHP 将所有后面的代码视为一个块的一部分,永远不会 结束。

    3. 您忘记关闭括号,因此从最后一个打开的括号开始,PHP 将后面的所有代码视为未结束的特定块(条件、函数的参数等)的一部分。

    4. 您忘记了逗号,因此对于 PHP,您的代码中有一条没有结尾的指令。

    这意味着问题可能不在错误消息中提到的那一行,因为缺失的符号可能在该点之后的任何位置。

    导致此错误的代码示例。

    以下是一些导致此错误的代码示例。

    <?      
     if ($condition){      
        echo "true";      
    ?>      
    

    忘记关闭报价:

    <?
     echo "test;
    ?>
    

    忘记关闭括号:

    <?      
      mysql_query("mysite", "logon", "thisisnotasqlserver.com" ;      
    ?>
    

    忘记分号:

    <?
     if ($test){
       echo '1'
     }
    ?>
    

    如何修复/避免此错误 这通常是由于代码的组织不善造成的。尤其要记得缩进你的代码,以便在视觉上区分不同的块。

    干净的代码示例

    //Equivalent of array_reverse()      
    function inverse_table($table)      
    {      
        $ret = array();      
        if (is_array($table) ){      
            for($i=sizeof($table) - 1; $i >= 0; $i++)      
            {      
                $ret[] = $table[$i];      
            }      
        }      
        return $ret;      
    }
    

    非缩进代码示例,更难调试:

    function inverse_table($table)      
    {      
    $ret = array();      
    if (is_array($table) ){      
    for($i=sizeof($table) - 1; $i >= 0; $i++)      
    {      
    $ret[] = $table[$i];      
    }      
    }      
    return $ret;      
    }
    

    如果您遇到此错误,请注意它不一定是代码的结尾,例如,即使您的文件有 1000 行,也可能在代码的开头省略一个 accolade。

    【讨论】:

    • 感谢您对错误的详细解释。但是,这并不能解释为什么它适用于我以前的提供商而不是新的提供商。它也没有真正给我解决方案,或者为什么当我从页面中删除嵌套的 HTML 并替换为 echo 时页面加载时没有错误。
    • 没关系,确实如此。我在 html 的结束标记上缺少一个 php。看看这是什么地方:“?>
      ”如果我正确缩进了我的代码,这将更容易发现。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2011-02-09
    • 2012-05-16
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多