Ошибка разбора: синтаксическая ошибка, неожиданный конец файла в моем коде PHP
Я получил ошибку:
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>
В чем проблема?
22 ответа
Вам следует избегать этого (в конце вашего кода):
{?>
и это:
<?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= Off
установлен в short_open_tag= On
Также обратите внимание на закрывающие идентификаторы heredoc.
Неверный пример:
function findAll() {
$query=<<<SQL
SELECT * FROM `table_1`;
SQL;
// ... omitted
}
Это вызовет исключение, подобное следующему:
<br />
<b>Parse error</b>: syntax error, unexpected end of file in <b>[...][...]</b> on line <b>5</b><br />
где цифра 5 может быть номером последней строки вашего файла.
Согласно руководству по php:
Предупреждение. Очень важно отметить, что строка с закрывающим идентификатором не должна содержать никаких других символов, кроме точки с запятой (;). Это, в частности, означает, что идентификатор не может иметь отступа, а также не должно быть никаких пробелов или табуляции до или после точки с запятой. Также важно понимать, что первый символ перед закрывающим идентификатором должен быть новой строкой, как это определено локальной операционной системой. Это \n в системах UNIX, включая macOS. За закрывающим разделителем также должна стоять новая строка.
TL; DR: закрывающие идентификаторы НЕ должныиметь отступ.
Действительный пример:
function findAll() {
$query=<<<SQL
SELECT * FROM `table_1`;
SQL;
// closing identifier should not be indented, although it might look ugly
// ... omitted
}
Ищите любые циклы или операторы, оставленные незамеченными.
Я столкнулся с этой проблемой, когда оставил 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 } ?>
если вы пользователь Linux и используете свой устаревший веб-сайт php на
apache2
server , затем найдите этот файл
/etc/php/<php version>/apache2/php.in
и если вы выполняете php-скрипт, используя
php cli
как
php example.php
тогда
/etc/php/<php version>/cli/php.ini
установлен
short_open_tag = Off
к
short_open_tag = On
и перезапустите службу в случае apache2
sudo systemctl restart apache2.service
Я видел некоторые ошибки, которые я исправил ниже.
Вот что я получил как ошибочный:
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
тег в последней строке файла. Очевидно, он работает на некоторых конфигурациях без проблем, но вызывает проблемы на других.
Это не ответ на ваш код, а ответ на то же сообщение об ошибке. Это может быть кому-то полезно. В моем случае у меня была ошибка «Ошибка анализа: синтаксическая ошибка, неожиданный конец файла в моем PHP-коде в строке 665». В моем случае проблема была в строке 45.
$html = <<<html
....
html
В версии 7.2 закрывающий тег должен быть БЕЗ пробелов перед
$html = <<<html
....
html
Кроме того, еще один случай, когда трудно определить, когда у вас есть файл с просто функцией, я знаю, что это не обычный случай, но он раздражает и должен был обнаружить ошибку.
<?php
function () {
}
Файл выше возвращает ошибку Parse error: syntax error, unexpected end of file in
в то время как ниже нет.
<?php
function () {
};
В моем случае это была незакрытая функция. Мне пришлось удалять и восстанавливать функции одну за другой, чтобы проверить, какая из них влияет на код.
Надеюсь, кому-то будет выгодно
Для меня наиболее частой причиной является пропущенный символ}, так что функция или блок операторов не завершены. Я исправляю это, вставляя символ} после моих последних правок и перемещая его оттуда. Я использую редактор, который может найти открывающие скобки, соответствующие закрывающей скобке, так что эта функция также помогает (она находит функцию, которая не была завершена правильно).
Мы можем надеяться, что когда-нибудь интерпретаторы языка и компиляторы сделают некоторую работу, чтобы генерировать лучшие сообщения об ошибках, так как закрывающую скобку так легко опустить.
Если это кому-нибудь поможет, пожалуйста, проголосуйте за ответ.
Чтобы дополнить другие ответы, это также может быть связано с автоматической минимизацией вашего php-скрипта, если вы используете ftp-клиент, такой как FileZilla. Убедитесь, что тип передачи установлен на Двоичный, а не на ASCII или авто. Тип передачи ASCII или автоматический может уменьшить ваш PHP-код, что приведет к этой ошибке.
Я не видел упоминания об этом, но если вы получаете это после создания нового файла, это может быть проблемой с кодировкой файла . Убедитесь, что для него установлено значениеUTF-8
или что-то еще, что ожидает ваша система.
Вы не можете разделить инструкции IF/ELSE на два отдельных блока. Если вам нужен HTML-код для печати, используйте echo.
<html>
<?php
function login()
{
// Login function code
}
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>
Если вы используете parse_ini_file($file) или подпрограмму для проверки файла.ini, проверьте, цитируются ли ваши данные в ini-файле. Данные без кавычек вызовут эту ошибку. Ex; data1= тест вызовет ошибку, data1="тест" не будет.
Я разработал плагин и установил его на сайте Wordpress, работающем на Nginx, и все прошло нормально. У меня была эта ошибка только тогда, когда я переключился на Apache, оказалось, что веб-сервер не принимает, поэтому я просто заменил
<?
теги к
<?php
тогда это сработало.
В моем случае я скопировал содержимое в другой файл, а затем удалил файл php и создал новый, снова скопировал содержимое в тот же файл, и это сработало.