我收到一个错误:
Parse error: syntax error, unexpected end of file in the line
使用此代码:
<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>
怎么了?
你应该避免这种情况(在代码的末尾(:
{?>
而这个:
<?php}
您不应该将括号直接放在打开/关闭php
标记附近,而应该用空格分隔它:
{ ?>
<?php {
还要避免<?
和使用<?php
我遇到了同样的错误,但我通过修改php.ini
文件来修复它。
找到你的 php.ini 文件 见伙计,我的 php.ini在哪里?
然后用您喜欢的编辑器打开它。
查找short_open_tag
属性,并应用以下更改:
; short_open_tag = Off ; previous value
short_open_tag = On ; new value
我有同样的错误,但我通过修改 php.ini 和/或编辑 PHP 文件来修复它!
有两种不同的方法可以绕过解析错误语法。
方法 1(您的 PHP 文件(
避免在 PHP 文件中出现以下情况:
<? } ?>
确保你这样说
<?php ?>
您的代码包含
<? ?>
注意:
<?
后缺少php
!
方法 2 (php.ini 文件(
还有一种简单的方法可以解决您的问题。搜索 short_open_tag
属性值(在文本编辑器中使用 Ctrl + F
!(,并应用以下更改:
; short_open_tag = Off
自
short_open_tag = On
根据核心 php.ini 指令的描述,short_open_tag
允许您使用短开放标记 ( <?
(,尽管这在与 xml 一起使用时可能会导致问题(启用此功能时<?xml
将不起作用(!
注意:重新加载服务器(例如:Apache(并在浏览器中重新加载PHP网页。
只需转到 php.ini然后找到设置为short_open_tag= On
short_open_tag= Off
<</p>
另外,请注意 heredoc 结束标识符。
无效示例:
// it's not working!!!
function findAll() {
$query=<<<SQL
SELECT * FROM `table_1`;
SQL; // <-------- THIS IS BAD
// ...
}
这将引发类似于以下内容的异常:
<br />
<b>Parse error</b>: syntax error, unexpected end of file in <b>[...][...]</b> on line <b>5</b><br />
其中数字 5 可能是文件的最后一行号。
根据 php 手册:
警告请务必注意,带有结束标识符的行不得包含除分号 (;) 之外的其他字符。这尤其意味着标识符不能缩进,分号前后不能有任何空格或制表符。还必须认识到,结束标识符之前的第一个字符必须是本地操作系统定义的换行符。这在 UNIX 系统(包括 macOS(上是 '。结束分隔符后面还必须跟有换行符。
TLDR:结束标识符不应缩进。
有效示例:
function findAll() {
$query=<<<SQL
SELECT * FROM `table_1`;
SQL;
// closing identifier should not be indented, although it might look ugly
// ...
}
查找任何未关闭的循环或语句。
当我留下一个php foreach:标签未关闭时,我遇到了这个麻烦。
<?php foreach($many as $one): ?>
使用以下方法关闭它解决了语法错误:unexpected end of file
<?php endforeach; ?>
希望它对某人有所帮助
检查您是否关闭了课程。
例如,如果您有带有方法的控制器类,并且您意外地删除了最后一个括号,该括号关闭了整个类,则会收到此错误。
class someControler{
private $varr;
public $varu;
..
public function method {
..
}
..
}// if you forget to close the controller, you will get the error
另外,查找一个注释//打破右大括号
if (1==1) { //echo "it is true"; }
右大括号不会正确关闭条件部分,PHP 将无法正确处理其余代码。
也避免这种情况<? } ?>
确保你输入<?php } ?>
我看到了一些错误,我在下面修复了这些错误。
这就是我得到的错误:
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";
}
这就是我会这样做的:
<html>
some code
<?php
function login()
{
if (empty ($_POST['username']))
{
return false;
}
if (empty ($_POST['password']))
{
return false;
}
$username = trim ($_POST['username']);
$password = trim ($_POST['password']);
$scrambled = md5 ($password . 'foo');
$link = mysqli_connect('localhost', 'root', 'password');
if (!$link)
{
$error = "Unable to connect to the database server";
include 'error.html.php';
exit ();
}
if (!mysqli_set_charset ($link, 'utf8'))
{
$error = "Unable to set database connection encoding";
include 'error.html.php';
exit ();
}
if (!mysqli_select_db ($link, 'foo'))
{
$error = "Unable to locate the foo database";
include 'error.html.php';
exit ();
}
$sql = "SELECT COUNT(*) FROM admin WHERE username = '$username' AND password = '$scrambled'";
$result = mysqli_query ($link, $sql);
if (!$result)
{
return false;
exit ();
}
$row = mysqli_fetch_array ($result);
if ($row[0] > 0)
{
return true;
}
else
{
return false;
}
}
if (login())
{
echo '<h2>Welcome Administrator</h2>
<a href='"upload.php'">Upload Files</a>
<br />
<a href='"points.php'">Edit Points Tally</a>';
}
else
{
echo "Incorrect login details. Please login";
}
?>
some more html code
</html>
就我而言,罪魁祸首是文件最后一行中唯一的打开<?php
标签。显然,它适用于某些配置,没有问题,但在其他配置上会导致问题。
如果您是 Linux 用户并在apache2
服务器上运行旧版 PHP 网站,请找到此文件/etc/php/<php version>/apache2/php.in
,如果您使用php example.php
之类的php cli
执行 PHP 脚本,则/etc/php/<php version>/cli/php.ini
将short_open_tag = Off
设置为 short_open_tag = On
并在 Apache 的情况下重新启动您的服务2 sudo systemctl restart apache2.service
此外,另一种难以发现的情况是,当您有一个只有一个函数的文件时,我知道这不是一个常见的用例,但它很烦人,必须发现错误。
<?php
function () {
}
上面的文件返回 erro Parse error: syntax error, unexpected end of file in
,而下面的文件则不返回。
<?php
function () {
};
这不是对代码的回答,而是对同一错误消息的回答。它可能对某人有所帮助。就我而言,我有一个错误"解析错误:语法错误,我的 PHP 代码中第 665 行的文件意外结尾"在我的情况下,问题在于关闭"html">
$html = <<<html
....
html
在版本 7.2 中,结束标记之前应该没有空格
$html = <<<html
....
html
为了补充其他答案,如果您使用的是像FileZilla这样的ftp客户端,这也可能是由于php脚本的自动缩小。确保传输类型设置为二进制,而不是 ASCII 或自动。ASCII 或自动传输类型可能会缩小您的 php 代码,从而导致此错误。
就我而言,这是一个未关闭的功能。我不得不逐个删除和恢复功能,以检查哪个功能正在影响代码。
我希望有人受益
对我来说,最常见的原因是省略了"}"字符,因此函数或控制语句块不会终止。
以下是查找此类问题的一种方法:
第 1 步:
创建源文件的备份。
第 2 步:
从文件前面开始,向前移动(或从文件后面向后移动(,删除以函数或控制语句块开头的任意 PHP 代码部分。
第 3 步::
以您通常的方式或使用在线 PHP 代码检查器测试您的代码。如果错误消息消失,则 PHP 代码的最后删除部分包含未终止的函数或控制语句块。添加"}"终止。如果错误消息仍然存在,请转到步骤 2 并继续执行同一方向。
如果您使用 parse_ini_file($file( 或例程正在处理 .ini 文件,请检查您的数据是否在 ini 文件中被引用。未引用的数据将导致此错误。前任;data1=test 会导致错误,data1="test" 不会。
我开发了一个插件并将其安装在运行在Nginx上的Wordpress网站上,这很好。当我切换到 Apache 时,我只遇到了这个错误,结果是 Web 服务器不接受<?
,所以我只是将 <?
标签替换为 <?php
然后它就可以工作了。