Я вручную повредил программный файл и после перезагрузки получаю сбой «[E_PARSE] syntax error»

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 15:37

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

В папке /var/log/ создаются события rm-2015-***.log со следующим содержимым:
URL:                 http://bonvagon.ru/admin
Версия Magento:      2.43.14 (1.9.1.0)
Версия PHP:          5.5.17-1~dotdeb.1
Время:               2015-04-18 15:31:34 MSK
***********************************
[E_PARSE] syntax error, unexpected '<'
File: /var/www/bonvagon.ru/includes/src/__adminhtml.php
Line: 168577
***********************************

Стало происходить это сразу после команды reboot по ssh. До этого момента войти в административную часть было возможно.

Прошу помощи, как это побороть.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 15:41

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

#3 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 15:47

Спасибо большое за оперативность!
Закоментировал эти строчки, перезагрузил сервер - все заработало!

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 15:50

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

#5 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 15:54

Вы писали, что отключение компиляции позволит установить файл, который был повреждён некачественным ручным редактированием.
Я бы рад это сделать, но по ссылке находится только информация об отключении, а в папке /var/log не создается событий, которые могли бы ссылаться на поврежденный файл. Если не затруднит, подскажите метод его обнаружения.

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 15:57

Например, можно открыть указанный сбойный файл includes/src/__adminhtml.php в указанной сбойной строке 168577 и посмотреть, что конкретно там синтаксически неправильно.

#7 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 16:11

Вы как всегда оказались правы, а я не проявил смекалку и не сходил сам в этот файл.
Я не программист и не знаю язка php, но удивило, что на этой строчке было повторное объявление php в виде "<?php". Удивительно, что он там делал, ручными правками программных файлов я не занимался.

После удаления этой строчки, раскоментирования обеих строчек в файле /includes/config.php и перезапуска сервера - административная часть по-прежнему загружается корректно, log-файлов об ошибках не создается. Проблема решена.

Огромное спасибо за оперативность!

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 16:13

Вручную править includes/src/__adminhtml.php неправильно, потому что этот файл автоматически создаётся в результате компиляции.
Правильно на основе сбойного кода скомпилированного файла определить, к какому исходному файлу принадлежит сбойный код, и исправлять исходный файл, а не скомпилированный.

#9 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 16:38

Анализ файлов показал, что в этот создаваемый огромный 8 мегабайтный файл __adminhtml.php помещается полное содержимое файла /app/code/core/Mage/Core/Model/Email/Template/Mailer.php который и начинается с первой строчки, что приводит ошибку:
	<?php


Правильно ли будет удалить из этого файла " <?php", чтобы при компилировании эта строчка не попадала в файл __adminhtml.php , что приводит к ошибке белого экрана?

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 16:40

Вставьте сюда программный код в радиусе 5 строк вверх и вниз от сбойной.

#11 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 16:44

        return parent::_beforeSave();
    }
}
}

if (!class_exists('Mage_Core_Model_Email_Template_Mailer', false) && !(interface_exists ('Mage_Core_Model_Email_Template_Mailer', false))) {
	<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *

Прикрепленные изображения

  • Прикрепленное изображение: scr.gif


#12 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 16:47

А в заголовке исходного файла app/code/core/Mage/Core/Model/Email/Template/Mailer.php что написано?

#13 Игорь Шмаков
  • Группа: Клиент
  • Сообщений: 42
  • Регистрация: 28.09.2014

18.04.2015 16:51

	<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER


Пунктуация (отступ у первой строчки) сохранена. Датат изменения файла - 24 февраля, день, когда происходила автоматическая загрузка файлов обновления Magento до версии 1.9.1
Стоит заметить, что рядом лежит файл Mailer.php-orig в котором этот отступ перед <?php отсутствует

#14 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

18.04.2015 16:57

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

Поделиться темой: