如何设置www数据区域设置


How to set www-data locale

我有一个php文件,它启动一个生成文件的java进程,应该通过http://www.servername.com/script.php调用。当我从控制台尝试php script.php时,文件会被正确写入。如果我通过浏览器启动它,文件名的编码就会出现问题。看起来,www数据(当我通过浏览器启动php脚本时,它是php脚本的用户)没有正确的区域设置。

有人知道如何设置www数据的区域设置吗?

我在ubuntu trusty上,php 5.5,java 1.7

谢谢,Sven

当您尝试从浏览器运行此文件时,它将以apache用户的身份运行。但是,当您从CLI运行此文件时,它会按预期工作。不过,您可以做一件事,更改将生成文件的目录的所有者。

chown -R www-data:www-data [you path]

希望它能起作用。

或者尝试通过PHP 执行根命令

使用"sudo"命令执行脚本。例如:

  1. createexec.php:

    <?php
    file_put_contents("/var/www/html/run.log", "run!'n"); 
    exec("/usr/bin/sudo /var/www/html/exec.sh", $out);
    file_put_contents("/var/www/html/run.log", var_export($out,true), FILE_APPEND); 
    ?>
    
  2. createexec.sh:

    #!/bin/sh
    #set you locale:
    export LC_ALL=en_EN.UTF-8
    #file that start a java process:
    /usr/bin/php -q /var/www/html/script.php
    
  3. 通过命令"visudo"编辑/etc/sudoers,它允许在没有su密码的情况下执行脚本:

    www-data ALL=(ALL) NOPASSWD: /var/www/html/exec.sh
    
  4. 通过exec.php(exec.php->exec.sh->script.php)调用script.php:

    curl 'http://www.servername.com/exec.php'
    
  5. 调试:

    more /var/www/html/run.log
    

在PHP脚本中设置区域设置也许你总是可以在脚本顶部更改区域设置,比如这样:

setlocale(LC_ALL, 'en_US');

PHP配置

使用phpinfo()查看加载了哪个PHP ini。当您从CLI调用PHP脚本时,可能会有另一个具有其他区域设置的配置