Есть простой(основной) скрипт index.php
:
<?php
require 'cfg.php'; //файл с настройками
require 'langs/' . $CFG['lang'] . '.php'; // языковой файл, прописаный в файле с настройками. Языковой файл содержит фразы в виде массива
//echo 'P1>>>>>';
//var_dump($FO_LANG);
//echo '<br>';
if(file_exists($CFG['auth'])) { //если есть файл с настройками авторизации
//echo 'P2>>>>>';
//var_dump($FO_LANG);
//echo '<br>';
include $CFG['auth']; //добавить его в скрипт
//echo 'P3>>>>>';
//var_dump($FO_LANG);
if ($fo_userid > 0) { //если юзерID > ноля
echo $fo_userid; //вывести его ID
}
else { //если юзерID НЕ больше ноля
var_dump ($FO_LANG['0002_fo_not_authorized']); // вывести второй элемент массива из языкового файла
}
}
else { //если нет файла с настройками авторизации
var_dump ($FO_LANG['0001_fo_cfg_file_not_exist']); //вывести первый элемент массива из языкового файла
}
?>
В дополнительном файле langs/ru.php
как понятно, сохранены фразы, в виде массива:
<?php
$FO_LANG = array (
'0001_fo_cfg_file_not_exist' => 'Не верная конфигурация.',
'0002_fo_not_authorized' => 'Вы не авторизованы!',
);
?>
Файл авторизации joomla_cfg.php
, стандартный скрипт для получения данных текущего пользователя Joomla.
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname('../.') );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$mainframe->route();
$user =& JFactory::getUser();
$fo_userid = $user->get('id');
Проблема в том, что если условие file_exists($CFG['auth'])
, оказывается ложью, то фраза корректно считывается из массива в языковом файле. А если она оказывается истинной, и происходит "подключение" данных пользователя Joomla, то массива в видимости не оказывается и var_dump
выдаёт NULL
.
Понятное дело, что можно ещё раз сделать include
нужных файлов, но как этого избежать и правильно добавить массив, что-бы он был виден во всех случаях в пределах основного скрипта?
Файл конфигураций cfg.php
:
<?php
$FO_CFG = array (
'auth' => 'joomla_cfg.php',
'lang' => 'ru',,
);
После проведенного расследования выяснилось, что вредит строка
include $CFG['auth'];
А конкретно вызов JRequest::clean();
, в которой происходит, дословно, следующее:
foreach ($GLOBALS as $key => $value){
if ( $key != 'GLOBALS' ) {
unset ( $GLOBALS [ $key ] );
}
}
Методов борьбы несколько:
include $CFG['auth'];
на самый верх.langs/ru.php:
namespace langs;
class ru{
const fo_cfg_file_not_exist = 'Не верная конфигурация.';
const fo_not_authorized = 'Вы не авторизованы!';
}
index.php
$lang = 'langs\\'.$CFG['lang'];
spl_autoload_register(function ($class) {
include_once str_replace('\\', '/', $class).'.php';
});
echo $lang::fo_not_authorized;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужна база данных, для PHP, максимально простая, желательно на файлах, есть DB которые базируются на JSON или XMLИспользовать PDO нет желания, драйверы...
Есть фраза "высота|толщина кровати(слова "кровати" может и не быть) 21 см (или нет см)"
Для установки Bitrix в кодировке UTF-8 требуется параметру mbstringfunc_overload присвоить значение 2 (по умолчанию там 0)
Не подскажите почему на главной выводит слайдер через migx а на другой страницу не выводит