Расширение Php gettext работает на моем локальном хосте, но не работает на моем хостинге

Я попробовал php gettext на своем локальном хосте, и все заработало, но когда я загрузил файлы на свой хостинг, он сказал следующее:

Warning: putenv(): Safe Mode warning: Cannot set environment variable 'LC_ALL' - it's not in the allowed list in /www/zxq.net/w/e/e/weedcl/htdocs/localization.php on line 4 Fatal error: Call to undefined function bindtextdomain() in /www/zxq.net/w/e/e/weedcl/htdocs/localization.php on line 6

Я использую бесплатный хостинг Zymic (это связано с тем, что он БЕСПЛАТНЫЙ?).

Мой localization.php:

<?php
$locale = "de_DE";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
bind_textdomain_codeset("messages", 'UTF-8');
textdomain("messages");
?>

person alexchenco    schedule 16.02.2010    source источник


Ответы (2)


Я использую бесплатный хостинг Zymic (это связано с тем, что он БЕСПЛАТНЫЙ?).

Вероятно. В нем включен safe_mode, и вы не можете изменить переменную среды LC_ALL. Вы столкнетесь с подобными проблемами на каждом хосте, на котором включен safe_mode, и у большинства бесплатных он такой.

Попробуйте удалить вызов putenv() и посмотрите, что произойдет потом.

person Daniel Dinu    schedule 16.02.2010

Первая проблема — это предупреждающее сообщение, которое вы получаете, в котором указано, что safe_mode, что слишком часто бывает, когда вы пользуетесь какой-либо службой виртуального хостинга.

И когда safe_mode включен, вы не можете устанавливать какие-либо переменные среды: единственная, которую вы можете установить, используя putenv , имеют имя, начинающееся с чего-то, указанного в safe_mode_allowed_env_vars.


LC_ вероятно не разрешенный префикс ; что означает, что вы не можете сделать это:

putenv("LC_ALL=$locale");

Эта строка бесполезна, вы можете удалить ее - это, по крайней мере, заставит предупреждение исчезнуть...


После этого возникает вторая проблема: функция bindtextdomain не не существует -- отсюда и Fatal Error, которым заканчивается ваш скрипт.

Поскольку эта функция является одной из функций, предоставляемых расширением gettext, я бы сказал, что это расширение не установлено/не включено на вашем хостинге...

Вы можете проверить, что запустив страницу, содержащую:

<?php
phpinfo();
?>

В нем будут перечислены все расширения, которые установлены/включены; если gettext не один из них, к сожалению, вы мало что можете сделать...

Было бы хорошей идеей связаться с вашим поставщиком услуг хостинга, чтобы он установил это расширение... Но с бесплатным хостингом я сомневаюсь, что это поможет... Вам, вероятно, придется воспользоваться другим хостингом (даже если он стоит несколько долларов/евро... )

person Pascal MARTIN    schedule 16.02.2010