Установил на сайт карту сайта. Настроил данный компонент в административной панели Joomla 3.8. Каково же было мое удивление, когда при клике по ссылке [XML Sitemap] вместо карты сайта открылась страница с ошибкой 500 Internal Server Error.

Ошибка карты сайта в Joomla - 500 Internal Server Error

Помогла тема на форуме. Причина была в лишней строчке в компоненте карты.
В файле "components/com_xmap/helpers/xmap.php" в строке 12 видим запись:
require_once(JPATH_SITE .'/includes/application.php');
Если закомментировать эту строку то компонент заводится.

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

require_once -  конструкция однократных включений.

В больших PHP сценариях инструкции require применяются довольно часто. Поэтому становится довольно сложно контролировать, как бы случайно не включить один и тот же файл несколько раз, что чаще всего приводит к ошибке, которую сложно обнаружить.
В PHP предусмотрено решение данной проблемы. Используя конструкцию однократного включения require_once можно быть уверенным, что один файл не будет включен дважды. Работает конструкция однократного включения require_once так же, как и require. Разница в ее работе лишь в том, что перед включением файла интерпретатор проверяет, включен ли указанный файл ранее или нет. Если да, то файл не будет включен вновь.
Конструкция однократного включения require_once позволяет включать удаленные файлы, если такая возможность включена в конфигурационном файле PHP.

Включение удаленных файлов

PHP позволяет работать с объектами URL, как с обычными файлами. Упаковщики, доступные по умолчанию, служат для работы с удаленными файлами с использованием протокола ftp или http.
Если "URL fopen-оболочки" включены в PHP (как в конфигурации по умолчанию), вы можете специфицировать файл, подключаемый с использованием URL (через HTTP), вместо локального пути. Если целевой сервер интерпретирует целевой файл как PHP-код, переменные могут передаваться в подключаемый файл с использованием URL-строки запроса, как в HTTP GET. Строго говоря, это не то же самое, что подключение файла и наследование им области видимости переменных родительского файла; ведь скрипт работает на удалённом сервере, а результат затем подключается в локальный скрипт.
Для того, чтобы удаленное включение файлов было доступно, необходимо в конфигурационном файле (php.ini) установить allow_url_fopen=1.
Обратите внимание: Версии PHP для Windows до PHP 4.3.0 не поддерживают возможность использования удаленных файлов этой функцией даже в том случае, если опция allow_url_fopen включена.

Устанавливать ли настройку allow_url_fopen=1, или просто закомментировать 12-ю строку в файле "components/com_xmap/helpers/xmap.php" - решать Вам. Я не стал экспериментировать с настройками PHP и убрал require_once(JPATH_SITE .'/includes/application.php'); из кода компонента. 

В следующей статье я описал процесс создания пункта меню в виде шрифтовой иконки.

На этом сегодня все. Успехов Вам в разработке.

Добавить комментарий

Авторам некорректных комментариев доступ на сайт будет заблокирован