Усталяваў на сайт. Наладзіў дадзены кампанент у адміністрацыйнай панэлі Joomla 3.8. Якое ж было маё здзіўленне, калі пры кліку па спасылцы [XML Sitemap] замест карты сайта адкрылася старонка з памылкай 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'); з кода кампанента.
У наступным артыкуле я апісаў працэс стварэння пункта меню ў выглядзе шрыфтавы абразкі.
На гэтым сёння ўсё. Поспехаў Вам у распрацоўцы.
Але, давайце разбярэмся, што мы адключылі дадзенай запісам, і за што адказвае канструкцыя require_once?