PHP gettext扩展在我的本地主机上工作,但它不能在我的主机上工作

时间:2010-02-16 17:00:50

标签: php hosting gettext

我在我的localhost中尝试了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");
?>

2 个答案:

答案 0 :(得分:3)

第一个问题是您收到的警告消息,表示safe_mode已启用 - 这在您使用某些共享托管服务时经常出现这种情况。

当启用safe_mode时,您无法设置任何类型的环境变量:您可以使用putenv设置的唯一一个,其名称以{safe_mode_allowed_env_vars中列出的内容开头。 {3}}


LC_可能不是允许的前缀;这意味着你不能这样做:

putenv("LC_ALL=$locale");

这条线没用,你可能想删除它 - 这至少会使警告消失......


之后,您遇到第二个问题:函数bindtextdomain不存在 - 因此Fatal Error结束了您的脚本。

该功能是gettext extension提供的功能之一,我会说您的托管服务未安装/启用此扩展程序...

您可以检查是否正在运行包含以下内容的页面:

<?php
phpinfo();
?>

它将列出已安装/启用的所有扩展程序;如果gettext不是其中之一,那么你可以做的并不多,不幸的是......

联系您的提供商,以便他们安装该扩展程序将是一个想法...但是通过免费托管服务,我怀疑它会有所帮助......您可能必须使用其他托管服务(即使它花费几美元/欧元......)

答案 1 :(得分:1)

  

我正在使用免费托管服务Zymic(它是否与免费托管服务有关?)。

可能。它已启用safe_mode,您无法更改LC_ALL环境变量。你会在每个启用了safe_mode的主机上遇到这类问题,大多数免费的主机都会这样。

尝试删除putenv()调用,看看会发生什么。