gettext в safe_mode

igrok54

Ищущий
gettext в safe_mode

Проблема при локализации скрипта на хостинге с safe_mode on
Подключаю файлы локализации так:
$lang = 'ru';

if(empty($lang)) {define('LANG','en');}
else {define('LANG',$lang);}

putenv("LANG=".LANG); // Вот из-за этой строки вся проблема!

setlocale(LC_ALL,LANG);
bindtextdomain(LANG, SPATH . "locale/");
textdomain(LANG);
bind_textdomain_codeset(LANG, 'UTF-8');

На хостинге с safe_mode off все работает без проблем, а на хостинге с safe_mode on локализация не подключается, вместо страниц - белый лист

Safe_mode ругается именно на функцию putenv.
Если убрать строку putenv("LANG=".LANG); - локализация не включается нигде.

Поддерживается putenv для переменных с префиксом PHP_ в условиях safe_mode on

Если прописать дополнительное условие что-то типа:
if( ini_get('safe_mode') ) {
putenv("PHP_LANG=".LANG); // - эта строка неверна, может ее можно переписать? сам не могу допереть.
}else{
putenv("LANG=".LANG);
}

Весь Гугл перерыл с запросами "gettext safe_mode", "putenv safe_mode" и т.п. - ничего внятного не нашел. Может не туда копаю? Есть ли какой-нибудь путь это победить?
 

Gas

может по одной?
вместо страниц - белый лист
может дело не в safe_mode, а функция putenv стоит в списке desable_functions и при её вызове валится fatal error, а показ и логирование ошибок у тебя везде отключено и ты видишь только дулю, в смысле "белый лист". Исключительно предположие, по первым бы делом проверил это.
 

igrok54

Ищущий
Warning приходит именно от Safe Mode.
Да, показ ошибок отключен на сервере, но я создавал тестовый файл для отладки именно этой функции, выдается надпись:

Warning: putenv(): Safe Mode warning: Cannot set environment variable 'LANG' - it's not in the allowed list in /data/home/сайт/t.php on line 11

Text for example in England

Warning: putenv(): Safe Mode warning: Cannot set environment variable 'LANG' - it's not in the allowed list in /data/home/сайт/t.php on line 38

содержание файла:
$lang='ru';
$domain = 'messages';
putenv("LANG=".$lang);
setlocale (LC_ALL,$lang);
bindtextdomain ($domain, "./lang");
textdomain ($domain);
bind_textdomain_codeset($domain, 'UTF-8');

echo _('Text for example in England');

На другом хостинге с safe_mode off выводит текст по русски.
 

Gas

может по одной?
Да, я не угадал, по данному вопросу сейчас идей нет.
 
Сверху