2010-02-16 58 views
0

我試着在我的本地主機的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"); 
?> 

回答

1

我使用的是免費託管服務Zymic(它有一個事實,即它的免費嗎?)。

也許。它已啓用safe_mode,並且不能更改LC_ALL環境變量。在每個啓用了safe_mode的主機上都會遇到這類問題,而大部分免費的人都會這樣。

嘗試刪除putenv()調用,然後看看會發生什麼。

3

第一個問題是您收到的警告消息,表示safe_mode已啓用 - 當您使用某些共享主機服務時,情況往往如此。

而且當啓用safe_mode時,不能設置任何類型的環境變量:可以使用putenv設置的唯一一個環境變量的名稱以safe_mode_allowed_env_vars中列出的名稱開頭。


LC_可能不是允許的前綴;這意味着你不能做到這一點:

putenv("LC_ALL=$locale"); 

這條線是沒用的,你可能想將其刪除 - 這至少會做出警告消失......


之後,你有一個第二個問題:功能bindtextdomain不存在 - 因此Fatal Error結束您的腳本。

該函數是由gettext extension提供其中的一個,我會說這擴展未安裝/在你的主機服務啓用...

您可以檢查運行包含頁:

<?php 
phpinfo(); 
?> 

它會列出所有已安裝/啓用的擴展;如果gettext不是其中之一,那麼你可以做的不多,不幸的是...

聯繫你的histing提供商,所以他們安裝該擴展將是一個想法...但是,對於免費的託管服務,我懷疑它會有幫助...您可能需要與另一個託管服務(即使它的成本幾美元/歐元...)

相關問題