Silverlight1989 0 / 0 / 0 Регистрация: 28.05.2019 Сообщений: 24 |
||||||||
1 |
||||||||
29.05.2020, 16:17. Показов 3005. Ответов 4 Метки php bug (Все метки)
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
29.05.2020, 16:17 |
4 |
3102 / 2587 / 1219 Регистрация: 14.05.2014 Сообщений: 7,231 Записей в блоге: 1 |
|
29.05.2020, 17:09 |
2 |
Unexpected end of file. Как такое исправить? Полный текст ошибки выкладывайте
0 |
0 / 0 / 0 Регистрация: 28.05.2019 Сообщений: 24 |
|
29.05.2020, 17:14 [ТС] |
3 |
Полностью текст ошибки выглядит так:
0 |
3102 / 2587 / 1219 Регистрация: 14.05.2014 Сообщений: 7,231 Записей в блоге: 1 |
|
29.05.2020, 17:16 |
4 |
Нет закрывающей скобки для цикла while
1 |
0 / 0 / 0 Регистрация: 28.05.2019 Сообщений: 24 |
|
29.05.2020, 17:45 [ТС] |
5 |
В том же исходном файле ещё сервер ругается вот так:
0 |
За последние 24 часа нас посетили 11584 программиста и 1164 робота. Сейчас ищут 309 программистов …
-
- С нами с:
- 26 дек 2017
- Сообщения:
- 2
- Симпатии:
- 0
Помогите пожалуйста, не работает скрипт немогу понять в чем проблема, выбрасивает ошибку — syntax error, unexpected end of file. $arResult — многовимерний масив.
-
<?function build_tree($arResult,$previousLevel = 0){?>
-
<?foreach($arResult as $arItem):?>
-
<?if ($previousLevel && $arItem[«DEPTH_LEVEL»] < $previousLevel):?>
-
<?=str_repeat(«</ul></li>», ($previousLevel — $arItem[«DEPTH_LEVEL»]));?>
-
<?if ($arItem[«IS_PARENT»]):?>
-
<?if ($arItem[«DEPTH_LEVEL»] == 1):?>
-
<li class=»open current»><span class=»sb_showchild»></span><a href=»<?=$arItem[«LINK»]?>«><span><?=$arItem[«TEXT»]?></span></a>
-
<?build_tree($arResult[‘CHILDRENS’])?>
-
<li><a href=»<?=$arItem[«LINK»]?>«><?=$arItem[«TEXT»]?></a>
-
<?build_tree($arResult[‘CHILDRENS’])?>
-
<?if ($arItem[«PERMISSION»] > «D»):?>
-
<?if ($arItem[«DEPTH_LEVEL»] == 1):?>
-
<li class=»close»><a href=»<?=$arItem[«LINK»]?>«><span><?=$arItem[«TEXT»]?></span></a></li>
-
<li><a href=»<?=$arItem[«LINK»]?>«><?=$arItem[«TEXT»]?></a></li>
-
<?$previousLevel = $arItem[«DEPTH_LEVEL»];?>
-
<?if ($previousLevel > 1)://close last item tags?>
-
<?=str_repeat(«</ul></li>», ($previousLevel—1) );?>
-
<?if (!empty($arResult)):?>
-
<?build_tree($arResult);?>
-
Maputo
Активный пользователь- С нами с:
- 30 июл 2015
- Сообщения:
- 1.136
- Симпатии:
- 173
-
Sergey_Tsarev
Активный пользователь- С нами с:
- 17 мар 2016
- Сообщения:
- 502
- Симпатии:
- 105
@Peter98
Вот так перепиши:-
<?if ($previousLevel > 1):/*close last item tags*/?>
-
- С нами с:
- 1 ноя 2016
- Сообщения:
- 1.524
- Симпатии:
- 345
@Peter98, комментарий в 35-й строке тут, однако, ни при чём.
А вот хвост в 38-й — отчего он?
И хоть визуально упорядочить код не помешало бы… Короткие теги <? заменить на <?php (не трогая те, что <?=)
Несколько идущих подряд строк <? кодphp ?> объединить… в один тег <?php кодphp ?>
И убрать ?> в конце файла (если файл завершается кодом php) -
Sergey_Tsarev
Активный пользователь- С нами с:
- 17 мар 2016
- Сообщения:
- 502
- Симпатии:
- 105
Вот так удобнее мне кажется читать код:
-
function build_tree($arResult, $previousLevel = 0) {
-
foreach ($arResult as $arItem) {
-
if ($previousLevel && $arItem[«DEPTH_LEVEL»] < $previousLevel) {
-
echo str_repeat(«</ul></li>», ($previousLevel — $arItem[«DEPTH_LEVEL»]));
-
if ($arItem[«IS_PARENT»]) {
-
if ($arItem[«DEPTH_LEVEL»] == 1) {
-
echo ‘<li class=»open current»><span class=»sb_showchild»></span><a href=»‘ . $arItem[«LINK»] . ‘»><span>’ . $arItem[«TEXT»] . ‘</span></a><ul>’;
-
build_tree($arResult[‘CHILDRENS’]);
-
echo ‘<li><a href=»‘ . $arItem[«LINK»] . ‘»>’ . $arItem[«TEXT»] . ‘</a><ul>’;
-
build_tree($arResult[‘CHILDRENS’]);
-
if ($arItem[«PERMISSION»] > «D») {
-
if ($arItem[«DEPTH_LEVEL»] == 1) {
-
echo ‘<li class=»close»><a href=»‘ . $arItem[«LINK»] . ‘»><span>’ . $arItem[«TEXT»] . ‘</span></a></li>’;
-
echo ‘<li><a href=»‘ . $arItem[«LINK»] . ‘»>’ . $arItem[«TEXT»] . ‘</a></li>’;
-
$previousLevel = $arItem[«DEPTH_LEVEL»];
-
if ($previousLevel > 1) { //close last item tags
-
echo str_repeat(«</ul></li>», ($previousLevel — 1));
-
echo ‘<div class=»sb_nav»><ul>’;
-
Sergey_Tsarev
Активный пользователь- С нами с:
- 17 мар 2016
- Сообщения:
- 502
- Симпатии:
- 105
Само собой. Но то, что у ТС написано читать невозможно. Каждый пук в отдельной php-теге.
-
- С нами с:
- 27 июн 2016
- Сообщения:
- 7
- Симпатии:
- 0
пхп состоит из типов данных
-
Команда форума
Модератор- С нами с:
- 27 сен 2007
- Сообщения:
- 10.534
- Симпатии:
- 623
серьезно, то есть что закомментирован закрывающий дескриптор ?> и поэтому он не работает — это не важно?
если ты удалял комментарий вместе с ?> то конечно ничего не работало, ведь это та же самая ситуация.
-
Команда форума
Модератор- С нами с:
- 27 сен 2007
- Сообщения:
- 10.534
- Симпатии:
- 623
@Sail надо же и правда, ?> игнорируется только в комментариях в стиле /* */.
Моя ошибка:
Parse error: syntax error, unexpected end of file in the line
Мой код:
<html>
<?php
function login() {
// код функции логина
}
if (login())
{?>
<h2>Добро пожаловать, администратор</h2>
<a href=»upload.php»>Загрузка файлов</a>
<br />
<a href=»points.php»>Редактирование подсчета очков </a>
<?php}
Else {
echo «Недопустимый логин. Попробуйте еще раз»;
}
?>
Некоторый HTML код
</html>
В чем проблема?
Ответ 1
Вам следует избегать этого (в конце вашего кода):
{?>
или этого:
<?php}
Не следует ставить скобки непосредственно рядом с php тегом открытия/закрытия и разделять его пробелом:
{ ?>
<?php {
также избегайте ”<?” и используйте “<?php”
Ответ 2
У меня была такая же ошибка, но я исправил ее, изменив файл php.ini. Откройте его в своем любимом редакторе.
Найдите свойство short_open_tag и примените следующее изменение:
; short_open_tag = Off ; предыдущее значение
short_open_tag = On ; новое значение
Ответ 3
Есть два разных метода обойти ошибки синтаксического анализа.
Метод 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” не будет работать, если он активен)!
Ответ 4
Обратите внимание на закрывающие идентификаторы heredoc.
Неверный пример:
// Это не работает!!!
function findAll() {
$query=<<<SQL
SELECT * FROM `table_1`;
SQL; // <——— Здесь ошибка
// …
}
Это вызовет исключение, подобное следующему:
<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;
// закрывающий идентификатор не должен иметь отступ, хотя это может выглядеть некрасиво
// …
}
Ответ 5
Я обнаружил несколько ошибок, которые исправил ниже.
Вот, что я получил в итоге:
if (login())
{?>
<h2> Добро пожаловать, администратор </h2>
<a href=»upload.php»> Загрузка файлов </a>
<br />
<a href=»points.php»> Редактирование подсчета очков </a>
<?php}
else {
echo » Недопустимый логин. Попробуйте еще раз «;
}
Вот, как бы я это сделал:
<html>
Некоторый код
<?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 = «Невозможно подключиться к серверу базы данных «;
include ‘error.html.php’;
exit ();
}
if (!mysqli_set_charset ($link, ‘utf8’)) {
$error = «Невозможно установить кодировку подключения к базе данных «;
include ‘error.html.php’;
exit ();
}
if (!mysqli_select_db ($link, ‘foo’)) {
$error = «Невозможно найти базу данных foo «;
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> Добро пожаловать, администратор </h2>
<a href=»upload.php»> Загрузка файлов </a>
<br />
<a href=»points.php»> Редактирование подсчета очков </a>’;
} else {
echo » Недопустимый логин. Попробуйте еще раз «;
}
?>
Некоторый HTML код
</html>
- Печать
Страницы: [1] 2 Все Вниз
Тема: Помогите со скриптом (Прочитано 6432 раз)
0 Пользователей и 1 Гость просматривают эту тему.

Alexx_b
Только начал разбираться с написанием скриптов в linux и сразу получил проблему, которую не могу решить.
Пробую выполнить простейший скрипт:
#!/bin/bash
на что мне выводиться следующее сообщение:
if ["foo"="foo"]; then
echo Equals
fi
syntax error end of file unexpected (expecting «then»)
почему так?

ArcFi
arcfi@arcfi-laptop:~$ if [ "foo"="foo" ]; then echo Equals; fi
Equals
ps
Пробелы.

Alexx_b
так у меня тоже работает, но дело в том, что надо все это из файла запускать, т.е. у меня файл называется 123, я набираю команду sh 123 и получаю это ошибку. В строчку — тоже пробовал писать — не прокатывает
plin2s
« Последнее редактирование: 15 Апреля 2009, 10:11:42 от plin2s »

Alexx_b
Пробовал я и так:
#!/bin/bash
все равно не прокатывает.
if [ "foo" = "foo" ];
then
echo Equals;
fi
Может у меня какого-нить пакета не хватает?
Пользователь решил продолжить мысль 15 Апреля 2009, 10:14:49:
за ссылку — спасибо!
Но сам я взял данный пример из статьи по BASH программированию, а не сам придумал, вот и спрашиваю почему у меня не работает даже такая несложная штука
« Последнее редактирование: 15 Апреля 2009, 10:14:49 от Alexx_b »
plin2s
#!/bin/bash
if [ "foo" = "foo" ]
then echo Equals
fi

ArcFi
echo -e '#!/bin/bashnnif [ "foo"=="foo" ]nthenntecho Equalsnfi' > script-00.sh && chmod +x script-00.sh && ./script-00.sh

Alexx_b
#!/bin/bash
if [ "foo" = "foo" ]
then echo Equals
fi
Спасибо!
Вот именно так — работает…
Однако, чувствую не просто будет разобраться с BASH, при таком чувствительном отношении к пробелам, переносам строкии ;
Пользователь решил продолжить мысль 15 Апреля 2009, 08:25:00:
echo -e '#!/bin/bash
if [ "foo"=="foo" ]
then
echo Equals
fi' > script-00.sh && chmod +x script-00.sh && ./script-00.sh
Спасибо, конечно, но пока это слишком сложно для моего понимания… только начал разбираться с программированием в linux, а использовать то, чего не понимаю, не люблю…
Пользователь решил продолжить мысль 15 Апреля 2009, 10:37:05:
Ещё один вопрос — пытаюсь использовать переменные, пишу так:
#!/bin/bash
вылетает ошибка:
FOLDER=/home/user/lfolder/1
if [ $(stat -c %s $FOLDER) = $(stat -c %s $FOLDER) ]
then echo Equals
else echo NON
fi
stat: cannot stat ‘/home/user/lfolder/1r’: No such file or directory
Откуда берется r? И как следует использовать переменную в данном случае?
Причем, если вместо переменной писать реальный путь, то все работает.
« Последнее редактирование: 15 Апреля 2009, 10:37:05 от Alexx_b »

Sova777
С переносами всё нормально. Это тоже правильный код:
#!/bin/bash
if [ "foo"="foo" ]; then
echo Equals
fi
>if [ $(stat -c %s $FOLDER) = $(stat -c %s $FOLDER) ]
Это какой-то башизм? В классическом шеле пишут так:
STAT_VALUE=`stat -c %s $FOLDER`
« Последнее редактирование: 15 Апреля 2009, 11:11:23 от Sova777 »
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Alexx_b
написал вот так:
#!/bin/bash
все равно таже ошибка, т.е. в конец адреса добавляется r
FOLDER=$HOME/lfolder/1
ST=`stat -c %s $FOLDER`
if [ $ST = $ST ]
then echo 1
else echo 2
fi

Sova777
странно, а так:
#!/bin/bash
FOLDER=$HOME/lfolder/1
ST=`stat -c %s $FOLDER`
if [ "$ST" = "$ST" ]
then echo 1
else echo 2
fi
r — виндовый перевод строки. Подумай, может ты редактировал файл в Windows?
« Последнее редактирование: 15 Апреля 2009, 11:45:48 от Sova777 »
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Alexx_b
так тоже не прокатывает, т.е. путь подставляется правильно, но добавляется ещё r в конец и получается вот так:
stat ‘/home/user/lfolder/1r’

Sova777
Запусти такую комманду:
od -c <имя скрипта>
Что видно?
« Последнее редактирование: 15 Апреля 2009, 11:55:31 от Sova777 »
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Rosik
проясню некоторые вопросы с пробелами:
синтаксис оператора if уже приводили, но без пояснений.
код в общем случае выглядит как
if cmd1; then cmd2; fi;
здесь cmd1 это некоторая программа, которая делает return 0; либо return -1; (c++). если программа сделала return 0 то скрипт переходит к cmd2.
Теперь про квадратные скобки. Это ни что иное как альтернатива программе test (читай man test) отсюда и проблема с пробелами.
if [ "foo" = "foo" ]
Просто программа test хочет видеть 3 аргумента, а когда мы пишем test «boo»=»boo» она видит только 1 ( аргументы разделяются пробелами ), и мы получаем ошибку
эквивалентно
if test "foo" = "foo"
Со вторым скриптом не знаю, но двойные кавычки » не помешают. (с кавычками там вообще много веселья)
ЗЫ я когда-то читал http://www.opennet.ru/docs/RUS/bash_scripting_guide/ вроде ниче так.

Alexx_b
Запусти такую комманду:
od -c <имя скрипта>
Что видно?
вот что получается
alexx@serveru:~/lfolder$ od -c 1
0000000 # ! / b i n / b a s h r n F O L
0000020 D E R = $ H O M E / l f o l d e
0000040 r / 1 r n S T = ` s t a t — c
0000060 % s $ F O L D E R ` r n i f
0000100 [ » $ S T » = » $ S T
0000120 » ] r n t h e n e c h o 1
0000140 r n e l s e e c h o 2 r n f
0000160 i
0000161
alexx@serveru:~/lfolder$
Пользователь решил продолжить мысль 15 Апреля 2009, 08:58:28:
Rosik, спасибо за пояснения, стало чуть яснее.
« Последнее редактирование: 15 Апреля 2009, 13:04:30 от Alexx_b »
- Печать
Страницы: [1] 2 Все Вверх