|
|
|
| Проблема при локализации скрипта на хостинге с 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" и т.п. - ничего внятного не нашел. Может не туда копаю? Есть ли какой-нибудь путь это победить?
содержание файла которым тестировал:
$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 выводит текст по русски.
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 | |
|
|
|
|
|
|
|
для: igrok54
(09.07.2009 в 20:17)
| | void putenv (string setting)
Добавляет setting в окружение сервера. Переменная окружения существует только в период существования текущего запроса. В конце запроса окружение восстанавливается в оригинальное состояние.
Установка некоторых переменных окружения может, потенциально, пробить брешь в защите. Директива safe_mode_allowed_env_vars содержит список префиксов с разделением запятыми. В Safe Mode пользователь может изменять только те переменные окружения, имена которых начинаются с префиксов, предоставляемых этой директивой. По умолчанию пользователи могут устанавливать только переменные окружения, начинающиеся с PHP_ (например, PHP_FOO=BAR).
Примечание: если это пустая директива, PHP позволит пользователю модифицировать ЛЮБУЮ переменную окружения!
Директива safe_mode_protected_env_vars содержит список переменных окружения с разделением запятыми, который пользователь не может изменять с помощью putenv(). Эти переменные будут защищены, даже если safe_mode_allowed_env_vars разрешает их изменять.
Предупреждение! Эти директивы работают только тогда, когда режим safe-mode включён!
<?
define("LANG","en");
echo ini_get("safe_mode_allowed_env_vars"); // PHP_
putenv("PHP_LANG=".LANG);
echo getenv("PHP_LANG");
?>
|
| |
|
|
|