2015-10-13 37 views
0

我试图从Debian上的PHP脚本中找出系统区域设置。顺便我做的:在linux上从PHP脚本中查找系统区域设置

<?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

您确定系统语言环境确实是* system's *语言环境,而不仅仅是您的用户语言环境吗? – zneak

+1

Apache与php模块在'www-data'用户下运行。我认为PHP会返回它的语言环境,但我不确定。从命令行'locale'命令在www-data下返回utf8。 – Sas

+1

'/ etc/default/locale'中有什么? – zneak

回答

1

一种方法从PHP得到真实的系统区域:

1)创建包含locale命令.SH脚本(当然还有#!/bin/bash报头)

2)添加到/ etc/sudoers文件www-data ALL=NOPASSWD: /path/to/locale.sh与您刚刚创建

3 sh脚本)更新你的PHP shell_exec$out = shell_exec('sudo /bin/bash /path/to/locale.sh')

这将允许区域设置以root身份执行,而不需要密码。

+1

为了读取环境变量,我不建议修改sudoers文件。此外,你如何确定root会有'ru_RU.UTF-8'? – zneak

+1

你不能确定。但是当有人要求“系统”状态时,我的大脑在Linux中默认为root用户为“系统”。 也同意这是愚蠢的混乱sudoers这样的事情。 –

+0

@zneak thx回答,我认为我不会被授予在服务器上做这个工作人员的权利。请检查我的编辑问题,更清楚地说明问题。 – Sas