2017-01-07 16 views
3

У меня здесь странная проблема. Вот код:i18n не работает через php-fpm в debian

cat ./test.php 
<?php 

setlocale(LC_ALL,""); 
//setlocale(LC_MESSAGES,'ru'); 
//setlocale(LC_CTYPE,'ru'); 
putenv("LANG=ru"); 
putenv("LANGUAGE=ru"); 

$domain = 'messages'; 
bindtextdomain($domain, "./locale"); 
textdomain($domain); 
//var_dump($r); 
//exit; 

echo gettext("Welcome to My PHP Application"); 
print "\n"; 
echo gettext("ololo"); 

Здесь находятся файлы локализации:

find ./locale/ 
./locale/ 
./locale/ru 
./locale/ru/LC_MESSAGES 
./locale/ru/LC_MESSAGES/messages.mo 
./locale/ru/LC_MESSAGES/messages.po 
./locale/en 
./locale/en/LC_MESSAGES 
./locale/en/LC_MESSAGES/messages.mo 
./locale/en/LC_MESSAGES/messages.po 

Когда я выполнить скрипт с помощью CLI, все в порядке:

php ./test.php 
Добро пожаловать! 
452231 

Но когда я звоню это из Интернета, я получаю только:

Welcome to My PHP Application 
ololo 

Что мне не хватает? Я использую Debian 8.6, nginx, php-fpm 5.6.29. Модули Gettext и Intl включены в конфигурациях CLI и FPM.

Спасибо!

+0

Кстати, тот же код работает довольно хорошо на ближайшем Centos 6.6. Это заставляет меня смущаться. –

+0

Это может иметь какое-то отношение к текущему рабочему каталогу, отличающемуся между CLI и вашим веб-сервером. Пробовали ли вы искать в журнале ошибок, чтобы убедиться, что вы не получаете никаких ошибок в отношении отсутствующих файлов локализации? –

+0

@ S.Imp Я пытался отладить fpm через 'strace' и получил почти ничего: http://pastebin.com/pTG6WkBs PHP-FPM задает правильный каталог локалей и ничего не делает после. Невозможно, если он пытается получить любой файл * .mo вообще –

ответ

1

решение было сделано автором: РНР-fpm.conf clear_env параметр был установлен в Да по умолчанию: предотвращает произвольные переменные среды от достижения рабочих процессов FPM по очистке окружающей среды в рабочих перед тем окр вары, указанные в данной конфигурации пула добавляются следует выставиться в нет не смотрите руководство http://php.net/manual/en/install.fpm.configuration.php#clear-env