Неожиданный конец файла, не может найти недостающую скобку в коде :( [duplicate]

Этот ответ должен быть довольно коротким и сладким, чтобы ответить (часть) озаглавленного вопроса. Если вы хотите получить более подробный ответ, объясняющий, почему вы должны их там поместить, пожалуйста, перейдите здесь .


Общее правило для размещения typename в основном, когда вы используете параметр шаблона, и хотите получить доступ к вложенному typedef или с использованием псевдонима, например:

template
struct test {
    using type = T; // no typename required
    using underlying_type = typename T::type // typename required
};

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

template
struct test {
    // typename required
    using type = typename std::conditional::type;
    // no typename required
    using integer = std::conditional::type;
};

Общие правила добавления определителя template в основном аналогичны, за исключением они обычно включают шаблонные функции-члены (статические или другие) структуры / класса, которые сами шаблоны, например:

Учитывая эту структуру и функцию:

template
struct test {
    template
    void get() const {
        std::cout << "get\n";
    }
};

template
void func(const test& t) {
    t.get(); // error
}

Попытка доступа t.get() изнутри функции приведет к ошибке:

main.cpp:13:11: error: expected primary-expression before 'int'
     t.get();
           ^
main.cpp:13:11: error: expected ';' before 'int'

Таким образом, в этом контексте вам понадобится ключевое слово template заранее и вызвать его так:

t.template get()

Таким образом, компилятор будет анализировать это правильно, а не t.get < int.

130
задан Alex 12 November 2015 в 09:10
поделиться

11 ответов

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

{?>

и это:

<?php}

Вы не должны устанавливать скобки непосредственно близко к открытому / close php, но он разделен пробелом:

{ ?>
<?php {

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

253
ответ дан mgraph 18 August 2018 в 06:31
поделиться
  • 1
    В случае, если это помогает кому-либо: у меня есть аналогичная ошибка, но вызвана <? } ?> вместо <?php } ?>. – Adam Libuša 7 November 2013 в 15:06
  • 2
    У меня был подобный птоблем, но в моем случае я имел short_open_tag = Off в своем php.ini. Когда я включил On, мой код работал. – bksi 12 February 2014 в 21:31
  • 3
    Обратите внимание, в то время как Apache принимает этот Nginx, а не (или, скорее, fcgi), поэтому, если вы столкнулись с тем, почему это работает на одном веб-сервере, а не в другом, вы знаете, почему – Sammaye 18 July 2014 в 14:53
  • 4
    Код в OP был полностью написан мной. – pratnala 2 November 2015 в 22:14
  • 5
    Перемещение устаревшего PHP-приложения с Debian 4 на Debian 8 и более новый php, и это спасло мне часы вырванных волос! спасибо – konung 27 November 2016 в 22:22

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

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

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>
2
ответ дан Chris Forrence 18 August 2018 в 06:31
поделиться
  • 1
    Ну, вещь внутри if (login ()), у меня есть много кода для написания, это всего лишь образец. В любом случае первый ответ здесь решил. Я не знал, что нужно положить пространство. Спасибо за помощь! – pratnala 14 July 2012 в 10:36
  • 2
    Ты просто помогаешь мне в любом случае, я понял, но мне просто нравится это делать. И ты уверен – ryanc1256 14 July 2012 в 10:38

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

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

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

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

; short_open_tag = Off ; previous value
short_open_tag = On ; new value
61
ответ дан Community 18 August 2018 в 06:31
поделиться
  • 1
    Этот ответ особенно важен при работе с устаревшим кодом. Я унаследовал код, написанный кем-то другим, и кодовая база была заполнена <? ?> (обратите внимание, что отсутствует php). Мне поручено добавлять или изменять функции, и обычно не рекомендуется просто менять все только на одну или две функции. Ваш ответ действительно помог. – Salehen Rahman 11 February 2016 в 19:54
  • 2
    Ну, я бы попробовал удачу с поиском и заменой;) "<?" => "<?php" – 9KSoft 18 October 2016 в 15:14
  • 3
    Пятно, это особенно примечательно, если вы, например, обновились до нового хостинга Plesk или обновили свою версию PHP. Мы обнаружили, что настройки php.ini были повреждены, и нам пришлось пройти их снова, это было необходимо, чтобы избежать неожиданного завершения файловой ошибки – Tahir Khalid 17 October 2017 в 20:33

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

2
ответ дан Gpak 18 August 2018 в 06:31
поделиться

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

9
ответ дан Hamzah Akram 18 August 2018 в 06:31
поделиться

Ищите какие-либо петли или заявления оставлены незакрытыми.

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

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

Закрытие его с помощью после устранения синтаксической ошибки: unexpected end of file

<?php endforeach; ?>

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

3
ответ дан Imtiaz 18 August 2018 в 06:31
поделиться
  • 1
    У меня это вызвало не замкнутый цикл while. благодаря! – Tarik 28 April 2018 в 23:17

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

<?php
function () {

}

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

<?php
function () {

};
0
ответ дан neisantos 18 August 2018 в 06:31
поделиться

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

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

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error
5
ответ дан olga 18 August 2018 в 06:31
поделиться
  • 1
    В общем случае недостающая закрывающая скобка может вызвать эту ошибку. Я отсутствовал в if. Спасибо за Ваш ответ. – pgr 10 March 2017 в 10:40

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

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

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

4
ответ дан Steve Wasiura 18 August 2018 в 06:31
поделиться

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

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

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

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

<? } ?>

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

<?php ?>

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

ПРИМЕЧАНИЕ: Отсутствует php после <?!

< / blockquote>

Способ 2 (файл php.ini)

Существует также простой способ решить вашу проблему. Найдите значение свойства short_open_tag (используйте в текстовом редакторе с помощью Ctrl + F!) [/ ​​G2] и примените следующее изменение:

; short_open_tag = Off

-

short_open_tag = On

Согласно описанию основных директив php.ini , short_open_tag позволяет использовать короткий открытый тег (<?), хотя это может вызвать проблемы при использовании с xml (<?xml не будет работать, если это включено)!

ПРИМЕЧАНИЕ: Перезагрузите свой сервер (например, Apache) и перезагрузите веб-страницу PHP в своем браузере.

< / BLOCKQUOTE>
20
ответ дан Suriyaa 18 August 2018 в 06:31
поделиться

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

0
ответ дан Wynn 18 August 2018 в 06:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: