Битрикс: Class ‘Bitrix\Landing\Agent’ not found

После восстановления резервной копии, при открытии сайта, созданного на CMS Битрикс, отображается ошибка: Fatal error: Class ‘Bitrix\Landing\Agent’ not found in /home/sergeyvita/domains/ap-r.ru/public_html/bitrix/modules/main/classes/mysql/agent.php(163) : eval()’d code on line 1.

Временно решить эту проблему можно, отключив выполнение агентов, путём добавления в начало файла agent.php следующей строки:

define(‘NO_AGENT_CHECK’, true);

При дальнейшей отладке, ошибка может быть выявлена в БД сайта, для исправления которой, потребуется загрузить актуальный дамп базы.

Сторонние ссылки на сайте

Если Вы получили сообщение от Google:

Мы считаем, что Ваш сайт взломан. Вероятно, хакер изменил существующие страницы или разместил на Вашем сайте контент, содержащий спам.

или аналогичное от Яндекса, то стоит проверить страницы своего сайта на факт присутствия ссылок на сторонние сайты, которые Вы не размещали. Причем не только те, которые обнаружил поисковый робот. Как правило это ссылки на коммерческие сайты по впариванию каких-либо сомнительных товаров, типа Canada Pharmacy.
В случае выявления таких ссылок, следует просмотреть исходный код станицы, на которой они отображаются. Навряд ли это будут статические блоки, скорее всего это динамический генерируемый код, упакованный в div или span контейнер, с отличным от остальных элементов html форматом id. Вдобавок к этому, на такой странице может присутствовать ещё и JavaScript код, с какой-либо обработкой контейнера со ссылками. Выделить такой скрипт можно также по использованию не типичного для данной страницы id элемента html.
В случае, если чужеродные ссылки генерируются PHP кодом, искать их в файлах сайта не имеет смысла. Скорее всего ссылки подтягиваются со стороннего ресурса или генерируются определённым алгоритмом. Поиск по id контейнера тоже не имеет смысла, поскольку он также генерируется при каждом обращении к данной странице сайта. В таком случае в файлах сайта следует искать куски контейнеров, элементы чужеродного JS кода. К примеру, командой grep:

grep -rl '<script>(function($){var eventList = ' /var/www/site.ru/

В итоге получаем список файлов, которые могут содержать чужеродный код. Открываем их и смотрим, что там. Стоит также обратить внимание на расположение файла в структуре сайта, это также может быть целый сторонний модуль CMS, например расширение xcalendar в директории plugins/system.
Если удалось идентифицировать файл с вредоносным кодом и выявлено, что файл содержит полностью чужеродный код, то делаем копию таких файлов, удаляем их и проверяем результат, дабы сайт не поломался.

vmError: Failed to retrieve the Currency Converter XML document

При использовании конвертера валют в Джумле не происходит обновления курса (в моём случае использовался файл convertCBRF.php для парсинга котировок с сайта ЦБ РФ), при этом в панели администратора, в разделе Товары, отображается ошибка vmError: Failed to retrieve the Currency Converter XML document.
Для начала требуется проверить, не заблокировал ли сайт ЦБ IP-адрес сервера. Для этого можно попробовать получить данные котировок программой wget (URL, по которому обращается сценарий, указан в самом файле):

cd
wget http://www.cbr.ru/scripts/XML_daily.asp?date_req=12/11/2014

Если сайт ЦБ отдаёт данные (файл скачался и содержит котировки), то можно попробовать вывести значение переменной с необработанными данными. Для этого создаём в директории сайта тестовый php файл, с содержимым:

<?php
header('Content-type: text/xml; charset=windows-1251');
$contents = file_get_contents( 'http://www.cbr.ru/scripts/XML_daily.asp?date_req=12/11/2014' );   
print_r($contents); 
?>

Если при запросе этого файла обозреватель верно отобразит котировки (как на сайте ЦБ), то проблема в коде файла конвертера. Если отобразится ошибка Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0, то значит на сервере отключён HTTP враппер. Включить его можно, изменив значение в php.ini на allow_url_fopen=0, либо добавив строку php_admin_value[allow_url_fopen] = 1 в конфигурационный файл конкретного сайта, при использовании пула конфигураций PHP-FPM, либо добавить строку php_admin_flag allow_url_fopen On в файл httpd.conf, при использовании PHP в качестве модуля.

Call-time pass-by-reference has been deprecated — argument passed by value.

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

Notice: Undefined index: ORIG_PATH_TRANSLATED in…

Данная ошибка порой встречается на различных CMS. Она возникает, когда сервер не отдает CMS значение глобальной переменной $_SERVER[‘ORIG_PATH_TRANSLATED’], а программа CMS не проверяет существование этой переменной. Проблему можно решить двумя способами:

  • изменить в коде проблемного файла имя переменной $_SERVER[‘ORIG_PATH_TRANSLATED’] на иную, например $_SERVER[‘ORIG_SCRIPT_FILENAME’];
  • настроить на сервере переменную $_SERVER[‘ORIG_PATH_TRANSLATED’], например, при использовании nginx, прописать в файле fastcgi_params строку
    fastcgi_param ORIG_PATH_TRANSLATED $document_root$fastcgi_script_name;