Ошибка анализа: ошибка синтаксиса, неожиданный конец файла в моем 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>

В чем проблема?

Ответы

Ответ 1

Вам следует избегать этого (в конце вашего кода):

{?>

и это:

<?php}

Нельзя размещать скобки непосредственно рядом с тегом open/close php, но он разделяется пробелом:

{ ?>
<?php {

также избегать <? и использовать <?php

Ответ 2

У меня была такая же ошибка, но я исправил ее, изменив файл php.ini.

Найдите файл php.ini в разделе Чувак, где мой php.ini?

затем откройте его с помощью вашего любимого редактора.

Найдите свойство short_open_tag и примените следующее изменение:

; short_open_tag = Off ; previous value
short_open_tag = On ; new value

Ответ 3

  У меня была та же ошибка, но я исправил ее, изменив php.ini и/или изменив файл PHP!

Есть два разных способа обойти синтаксический синтаксический анализ ошибки.

Способ 1 (ваш файл PHP)

Избегайте в своем файле PHP этого:

<? } ?>

Убедитесь, что вы написали это так

<?php ?>

Ваш код содержит <? ?>

NOTE: The missing php after <?!

Метод 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 в браузере.

Ответ 4

Просто зайдите в php.ini, затем найдите short_open_tag= Off в short_open_tag= On

Ответ 5

Убедитесь, что вы закрыли свой класс.

Например, если у вас есть класс контроллера со способами, и случайно вы удаляете конечную скобку, которая закрывает весь класс, вы получите эту ошибку.

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error

Ответ 6

также, найдите комментарий //, который разбивает закрывающуюся фигурную скобку

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

закрывающая фигурная скобка не будет правильно закрывать условный раздел, и php не будет правильно обрабатывать оставшуюся часть кода.

Ответ 7

Поиск любых циклов или операторов остается незамкнутым.

Я столкнулся с этой проблемой, когда оставил php foreach: тег закрыт.

<?php foreach($many as $one): ?>

Завершая его, используя следующую синтаксическую ошибку: unexpected end of file

<?php endforeach; ?>

Надеюсь, что это поможет кому-то

Ответ 8

Избегайте этого, а также <? } ?> убедитесь, что вы положили <?php } ?>

Ответ 9

Я видел некоторые ошибки, которые я исправил ниже.

Это то, что я получил как ошибочное:

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>

Ответ 10

В моем случае виновником был открывающий тег <?php в последней строке файла. Очевидно, он работает на некоторых конфигурациях без проблем, но вызывает проблемы на других.

Ответ 11

Вы не можете разделить инструкции 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>

Ответ 12

Кроме того, еще один случай, когда трудно определить, когда у вас есть файл с просто функцией, я знаю, что это не обычный случай, но он раздражает и должен был обнаружить ошибку.

<?php
function () {

}

Файл выше возвращает ошибку Parse error: syntax error, unexpected end of file in, а ниже - нет.

<?php
function () {

};

Ответ 13

Если вы используете parse_ini_file ($ file) или подпрограмму для проверки файла .ini, проверьте, цитируются ли ваши данные в ini файле. Данные без кавычек вызовут эту ошибку. Ex; data1 = test приведет к ошибке, data1 = "test" не будет.

Ответ 14

Для меня наиболее частой причиной является пропущенный символ}, так что функция или блок операторов не завершены. Я исправляю это, вставляя символ} после моих последних правок и перемещая его оттуда. Я использую редактор, который может найти открывающие скобки, соответствующие закрывающей скобке, так что эта функция также помогает (она находит функцию, которая не была правильно завершена).

Мы можем надеяться, что когда-нибудь языковые интерпретаторы и компиляторы сделают некоторую работу, чтобы генерировать лучшие сообщения об ошибках, так как закрывающую скобку так легко опустить.

Если это кому-нибудь поможет, пожалуйста, проголосуйте за ответ.