我在我的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");
?>
答案 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()调用,看看会发生什么。