解析错误:语法错误,PHP代码中意外的文件结束

pra*_*ala 159 html php parse-error

我收到一个错误:

Parse error: syntax error, unexpected end of file in the line
Run Code Online (Sandbox Code Playgroud)

使用此代码:

<html>
    <?php
        function login()
        {
            // Login function code
        }
        if (login())
    {?>

    <h2>Welcome Administrator</h2>
    <a href=\"upload.php\">Upload Files</a>
    <br />
    <a href=\"points.php\">Edit Points Tally</a>

    <?php}
        else
        {
            echo "Incorrect login details. Please login";
        }
    ?>
    Some more HTML code
</html>
Run Code Online (Sandbox Code Playgroud)

有什么问题?

j0k*_*j0k 296

你应该避免这种情况(代码末尾):

{?>
Run Code Online (Sandbox Code Playgroud)

还有这个:

<?php}
Run Code Online (Sandbox Code Playgroud)

您不应该将括号直接放在open/close php标记附近,而是用空格分隔:

{ ?>
<?php {
Run Code Online (Sandbox Code Playgroud)

也避免<?和使用<?php

  • 我有类似的ptoblem,但我的情况是我的php.ini中有short_open_tag = Off.当我把它打开时,我的代码工作了. (68认同)
  • 万一它可以帮助任何人:我有一个类似的错误,但由`<?`?>`而不是`<?php}?>`. (43认同)
  • 请注意,虽然Apache接受这个Nginx没有(或者更确切地说fcgi没有)所以如果你难以理解为什么这个工作在一个Web服务器而不是另一个你知道为什么 (4认同)

小智 84

我有同样的错误,但我通过修改php.ini文件修复了它.

找到你的php.ini文件,看看Dude,哪里是我的php.ini?

然后用你最喜欢的编辑器打开它.

查找short_open_tag属性,并应用以下更改:

; short_open_tag = Off ; previous value
short_open_tag = On ; new value
Run Code Online (Sandbox Code Playgroud)

  • 在处理遗留代码时,这个答案尤其重要.我继承了别人编写的代码,代码库中充满了`<??>`(注意,缺少`php`).我的任务是添加或更改功能,通常不仅仅为一两个功能更改*所有内容*也不是一个好主意.你的答案确实有帮助. (6认同)

Sur*_*yaa 33

我有同样的错误,但我通过修改php.ini和/或编辑PHP文件修复了它!

有两种不同的方法来解决解析错误语法.

方法1(您的PHP文件)

避免在你的PHP文件中:

<? } ?>
Run Code Online (Sandbox Code Playgroud)

确保你这样说

<?php ?>
Run Code Online (Sandbox Code Playgroud)

您的代码包含 <? ?>

注意: 丢失php之后<?!

方法2(php.ini文件)

还有一种简单的方法可以解决您的问题.搜索short_open_tag属性值(在文本编辑器中使用Ctrl + F!),并应用以下更改:

; short_open_tag = Off
Run Code Online (Sandbox Code Playgroud)

short_open_tag = On
Run Code Online (Sandbox Code Playgroud)

根据核心php.ini指令描述,short_open_tag允许你使用short open tag(<?),虽然这可能会在与xml一起使用时引起问题(<?xml启用时不会起作用)!

注意: 重新加载您的服务器(例如:Apache)并在浏览器中重新加载您的PHP网页.


小智 10

只需转到php.ini然后找到short_open_tag= Off设置为short_open_tag= On


gli*_*a93 7

另外,请注意heredoc 结束标识符。

无效示例:

// it's not working!!!

function findAll() {
    $query=<<<SQL
        SELECT * FROM `table_1`;
    SQL; // <-------- THIS IS BAD

    // ...
}
Run Code Online (Sandbox Code Playgroud)

这将引发类似于以下内容的异常:

<br />
<b>Parse error</b>:  syntax error, unexpected end of file in <b>[...][...]</b> on line <b>5</b><br />
Run Code Online (Sandbox Code Playgroud)

其中数字 5 可能是文件的最后一行编号。

根据php手册

警告 请 务必注意,带有结束标识符的行不得包含除分号 (;) 之外的其他字符。这尤其意味着标识符不能缩进,并且分号前后不能有任何空格或制表符。认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符也很重要。这是 UNIX 系统上的 \n,包括 macOS。结束定界符还必须跟有换行符。

TLDR:关闭标识应缩进。

有效示例:

<br />
<b>Parse error</b>:  syntax error, unexpected end of file in <b>[...][...]</b> on line <b>5</b><br />
Run Code Online (Sandbox Code Playgroud)

  • 太感谢了!在看似无休止的开始和结束标签匹配之后,这就是我的目标。 (2认同)

olg*_*lga 5

检查你是否关闭了课程.

例如,如果您有带方法的控制器类,并且意外删除了关闭整个类的最后一个括号,您将收到此错误.

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error
Run Code Online (Sandbox Code Playgroud)


Ste*_*ura 5

另外,寻找一个注释 // 打破右花括号

if (1==1) { //echo "it is true"; }

右花括号不能正确关闭条件部分,php 也不能正确处理剩余的代码。


Imt*_*iaz 5

查找是否未关闭任何循环或语句。

当我离开php foreach:标签时,我遇到了这个麻烦。

<?php foreach($many as $one): ?>
Run Code Online (Sandbox Code Playgroud)

使用以下命令关闭它可以解决语法错误: unexpected end of file

<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)

希望对别人有帮助