У меня работал код, все было отлично. Но вчера бот отказался работать, а ошибку выдает такую:
Parse error: syntax error, unexpected end of file in /var/www/www-root/data/www/botfrombot3.site/app/controllers/madeline.php on line 145
Не могу понять ошибку, ведь раньше он работал стабильно и без нареканий, а тут резко какую-то ошибку выбил.
Вот код-
<?php
namespace danogMadelineProto;
if (defined('MADELINE_PHP')) {
throw new Exception('Please do not include madeline.php twice!');
}
if (!defined('MADELINE_ALLOW_COMPOSER') && class_exists(ComposerAutoloadClassLoader::class)) {
throw new Exception('Composer autoloader detected: madeline.php is incompatible with Composer, please require MadelineProto using composer.');
}
define('MADELINE_PHP', __FILE__);
class Installer
{
const RELEASE_TEMPLATE = 'https://phar.madelineproto.xyz/release%s?v=new';
const PHAR_TEMPLATE = 'https://github.com/danog/MadelineProto/releases/latest/download/madeline%s.phar?v=%s';
/**
* Phar lock instance.
*
* @var resource|null
*/
private static $lock = null;
/**
* Installer lock instance.
*
* @var resource|null
*/
private $lockInstaller = null;
/**
* PHP version.
*
* @var string
*/
private $version;
/**
* Constructor.
*/
public function __construct()
{
if ((PHP_MAJOR_VERSION === 7 && PHP_MINOR_VERSION < 1) || PHP_MAJOR_VERSION < 7) {
throw new Exception('MadelineProto requires at least PHP 7.1 to run');
}
if (PHP_INT_SIZE < 8) {
throw new Exception('A 64-bit build of PHP is required to run MadelineProto, PHP 8.0+ recommended.');
}
$backtrace = debug_backtrace(0);
if (count($backtrace) === 1) {
if (isset($GLOBALS['argv']) && !empty($GLOBALS['argv'])) {
$arguments = array_slice($GLOBALS['argv'], 1);
} elseif (isset($_GET['argv']) && !empty($_GET['argv'])) {
$arguments = $_GET['argv'];
} else {
$arguments = [];
}
if (count($arguments) >= 2) {
define(MADELINE_WORKER_TYPE::class, array_shift($arguments));
define(MADELINE_WORKER_ARGS::class, $arguments);
} else {
die('MadelineProto loader: you must include this file in another PHP script, see https://docs.madelineproto.xyz for more info.'.PHP_EOL);
}
define('MADELINE_REAL_ROOT', dirname($backtrace[0]["file"]));
}
$this->version = (string) min(81, (int) (PHP_MAJOR_VERSION.PHP_MINOR_VERSION));
define('MADELINE_PHAR_GLOB', getcwd().DIRECTORY_SEPARATOR."madeline*-{$this->version}.phar");
define('MADELINE_RELEASE_URL', sprintf(self::RELEASE_TEMPLATE, $this->version));
}
/**
* Destructor.
*/
public function __destruct()
{
if ($this->lockInstaller) {
flock($this->lockInstaller, LOCK_UN);
fclose($this->lockInstaller);
$this->lockInstaller = null;
}
}
/**
* Extract composer package versions from phar.
*
* @param string|null $release
* @return array<string, string>
*/
private static function extractVersions($release)
{
$phar = "madeline-$release.phar";
$packages = ['danog/madelineproto' => 'old'];
if (!file_exists("phar://$phar/vendor/composer/installed.json")) {
return $packages;
}
$composer = json_decode(file_get_contents("phar://$phar/vendor/composer/installed.json"), true) ?: [];
if (!isset($composer['packages'])) {
return $packages;
}
foreach ($composer['packages'] as $dep) {
$name = $dep['name'];
if (strpos($name, 'phabel/transpiler') === 0) {
$name = explode('/', $name, 3)[2];
}
$version = $dep['version_normalized'];
if ($name === 'danog/madelineproto' && substr($version, 0, 2) === '90') {
$version = substr($version, 2);
}
$packages[$name] = $version;
}
return $packages;
}
/**
* Report installs to composer.
*
* @param string $local_release
* @param string $remote_release
*
* @return void
*/
private static function reportComposer($local_release, $remote_release)
{
$previous = self::extractVersions($local_release);
$current = self::extractVersions($remote_release);
$postData = ['downloads' => []];
foreach ($current as $name => $version) {
if (isset($previous[$name]) && $previous[$name] === $version) {
continue;
}
$postData['downloads'][] = [
'name' => $name,
'version' => $version
];
}
if (defined('HHVM_VERSION')) {
$phpVersion = 'HHVM '.HHVM_VERSION;
} else {
$phpVersion = 'PHP '.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION.'.'.PHP_RELEASE_VERSION;
?>
Silverlight1989 0 / 0 / 0 Регистрация: 28.05.2019 Сообщений: 24 |
||||||||
1 |
||||||||
29.05.2020, 16:17. Показов 3078. Ответов 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 |
Моя ошибка:
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>
За последние 24 часа нас посетили 10945 программистов и 564 робота. Сейчас ищут 389 программистов …
-
- С нами с:
- 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.528
- Симпатии:
- 346
@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.535
- Симпатии:
- 623
серьезно, то есть что закомментирован закрывающий дескриптор ?> и поэтому он не работает — это не важно?
если ты удалял комментарий вместе с ?> то конечно ничего не работало, ведь это та же самая ситуация.
-
Команда форума
Модератор- С нами с:
- 27 сен 2007
- Сообщения:
- 10.535
- Симпатии:
- 623
@Sail надо же и правда, ?> игнорируется только в комментариях в стиле /* */.