我有一个启动java进程的php文件,该进程生成一个文件,应该通过http://www.servername.com/script.php
调用。当我从控制台尝试php script.php
时,文件被正确写入。如果我通过浏览器启动它,则文件名的编码存在问题。看来,www-data(当我通过浏览器启动它时是php脚本的用户)没有正确的语言环境。
有谁知道如何设置www-data的区域设置?
我在ubuntu trusty,php 5.5,java 1.7
谢谢, 斯文
答案 0 :(得分:0)
当您尝试从浏览器运行此文件时,它以apache用户身份运行。但是当您从CLI运行此文件时,它按预期工作。您可以做一件事,更改文件将生成的目录的所有者。
chown -R www-data:www-data [you path]
希望它能奏效。
答案 1 :(得分:0)
使用“ sudo”命令执行脚本。 例如:
创建exec.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);
?>
创建exec.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
通过命令“ visudo”编辑/ etc / sudoers,它允许执行脚本而无需输入su密码:
www-data ALL=(ALL) NOPASSWD: /var/www/html/exec.sh
通过exec.php(exec.php-> exec.sh-> script.php)调用script.php:
curl 'http://www.servername.com/exec.php'
调试:
more /var/www/html/run.log
答案 2 :(得分:0)
在PHP脚本中设置区域设置 也许您总是可以在脚本顶部更改语言环境,例如:
setlocale(LC_ALL, 'en_US');
PHP配置
使用phpinfo()查看哪个PHP ini被加载。当您从CLI调用PHP脚本时,可能会有另一个具有其他语言环境设置的配置