我有一个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"命令执行脚本。例如:
-
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); ?>
-
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
-
通过命令"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
在PHP脚本中设置区域设置也许你总是可以在脚本顶部更改区域设置,比如这样:
setlocale(LC_ALL, 'en_US');
PHP配置
使用phpinfo()查看加载了哪个PHP ini。当您从CLI调用PHP脚本时,可能会有另一个具有其他区域设置的配置