2015-10-13 3 views
0

Я пытаюсь найти локаль системы из PHP-скрипта на Debian. Путь я:Выяснить системный язык из PHP-скрипта на linux

<?php 
    $out = shell_exec('locale'); 
    print_r($out); 
    ?> 

Результат:

LANG=C 
    LANGUAGE= 
    LC_CTYPE="C" 
    LC_NUMERIC="C" 
    ... 

Но когда я пишу 'локаль' команду в моей системной консоли я получаю результат 'правильный':

LANG=ru_RU.UTF-8 
    LANGUAGE= 
    LC_CTYPE="ru_RU.UTF-8" 
    LC_NUMERIC="ru_RU.UTF-8" 
    ... 

Что такое правильный способ получить системный язык из PHP-скрипта?

Общая цель: В запросе принимаю путь к файлу, который может содержать кириллические символы. Затем мне нужно получить доступ к файлам в этом каталоге. Поэтому я хочу, чтобы мой PHP-скрипт работал с системами, которые используют разные локали (например, ru_Utf8, Koi8-r).

+3

Вы уверены, что системный языковой стандарт действительно является * системой * локали, а не только локали вашего пользователя? – zneak

+1

Apache с php-модулем запускается под пользователем «www-data». Я предположил, что php вернет свой язык, но я не уверен. Из командной строки команда «locale» возвращает utf8 по www-данным. – Sas

+1

Что у вас есть в '/ etc/default/locale'? – zneak

ответ

1

Один метод, чтобы получить истинную язык системы из PHP:

1) создать .sh скрипт, содержащий команду locale (и, конечно, заголовок #!/bin/bash)

2) Добавить/и т.д./sudoers www-data ALL=NOPASSWD: /path/to/locale.sh с ш скрипт вы только что создали

3) обновление PHP shell_exec к $out = shell_exec('sudo /bin/bash /path/to/locale.sh')

Это позволит локали выполнять как root, не требуя пароля.

+1

Я бы не советовал изменять файл sudoers только ради чтения переменных окружения. Кроме того, как вы можете быть уверены, что root wil имеет 'ru_RU.UTF-8'? – zneak

+1

Вы не можете быть уверены. Но когда кто-то запрашивает «системное» состояние, мой разум по умолчанию использует root-пользователя в Linux как «систему». Также согласитесь, что глупо общаться с sudoers для чего-то подобного. –

+0

@zneak thx для ответа, я думаю, что мне не будут предоставлены права делать это на сервере. Пожалуйста, проверьте мое редактирование на вопросе, он более четко говорит о проблеме. – Sas

Смежные вопросы