Ответ 1
Вам следует избегать этого (в конце вашего кода):
{?>
и это:
<?php}
Нельзя размещать скобки непосредственно рядом с тегом open/close php
, но он разделяется пробелом:
{ ?>
<?php {
также избегать <?
и использовать <?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>
В чем проблема?
Вам следует избегать этого (в конце вашего кода):
{?>
и это:
<?php}
Нельзя размещать скобки непосредственно рядом с тегом open/close 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!
Есть два разных способа обойти синтаксический синтаксический анализ ошибки.
Избегайте в своем файле PHP этого:
<? } ?>
Убедитесь, что вы написали это так
<?php ?>
Ваш код содержит
<? ?>
NOTE: The missing
php
after<?
!
Существует также простой способ решить вашу проблему.
Найдите значение свойства 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
Убедитесь, что вы закрыли свой класс.
Например, если у вас есть класс контроллера со способами, и случайно вы удаляете конечную скобку, которая закрывает весь класс, вы получите эту ошибку.
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 foreach: тег закрыт.
<?php foreach($many as $one): ?>
Завершая его, используя следующую синтаксическую ошибку: unexpected end of file
<?php endforeach; ?>
Надеюсь, что это поможет кому-то
Избегайте этого, а также <? } ?>
убедитесь, что вы положили <?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
в последней строке файла. Очевидно, он работает на некоторых конфигурациях без проблем, но вызывает проблемы на других.
Вы не можете разделить инструкции 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>
Кроме того, еще один случай, когда трудно определить, когда у вас есть файл с просто функцией, я знаю, что это не обычный случай, но он раздражает и должен был обнаружить ошибку.
<?php
function () {
}
Файл выше возвращает ошибку Parse error: syntax error, unexpected end of file in
, а ниже - нет.
<?php
function () {
};
Если вы используете parse_ini_file ($ file) или подпрограмму для проверки файла .ini, проверьте, цитируются ли ваши данные в ini файле. Данные без кавычек вызовут эту ошибку. Ex; data1 = test приведет к ошибке, data1 = "test" не будет.
Для меня наиболее частой причиной является пропущенный символ}, так что функция или блок операторов не завершены. Я исправляю это, вставляя символ} после моих последних правок и перемещая его оттуда. Я использую редактор, который может найти открывающие скобки, соответствующие закрывающей скобке, так что эта функция также помогает (она находит функцию, которая не была правильно завершена).
Мы можем надеяться, что когда-нибудь языковые интерпретаторы и компиляторы сделают некоторую работу, чтобы генерировать лучшие сообщения об ошибках, так как закрывающую скобку так легко опустить.
Если это кому-нибудь поможет, пожалуйста, проголосуйте за ответ.