【问题标题】:Php gettext extension works on my local host but its not working on my hostingPhp gettext 扩展适用于我的本地主机,但不适用于我的主机
【发布时间】:2010-02-17 01:14:23
【问题描述】:

我在本地主机中尝试了 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");
?>

【问题讨论】:

    标签: php hosting gettext


    【解决方案1】:

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

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


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

    putenv("LC_ALL=$locale");
    

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


    在那之后,你有一个第二个问题:函数bindtextdomain不存在——因此结束你的脚本的Fatal Error

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

    您可以检查正在运行的页面包含:

    <?php
    phpinfo();
    ?>
    

    它会列出所有已安装/启用的扩展;如果 gettext 不是其中之一,那么不幸的是,您无能为力...

    联系您的历史服务提供商以便他们安装该扩展是一个不错的主意...但是对于免费托管服务,我怀疑它会有所帮助...您可能不得不使用另一个托管服务 (即使花费几美元/欧元......)

    【讨论】:

      【解决方案2】:

      我正在使用免费的托管服务 Zymic(这与它是免费的事实有关吗?)。

      大概吧。它启用了安全模式,您无法更改 LC_ALL 环境变量。你会在每台启用了安全模式的主机上遇到这类问题,而且大多数免费主机都是这样。

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

      【讨论】:

        猜你喜欢
        • 2016-01-28
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        相关资源
        最近更新 更多