Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: gettext в safe_mode
 
 автор: igrok54   (09.07.2009 в 20:17)   письмо автору
 
 

Проблема при локализации скрипта на хостинге с 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

  Ответить  
 
 автор: sim5   (09.07.2009 в 22:11)   письмо автору
 
   для: 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");
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования