exec命令在Linux服务器上不起作用

时间:2012-09-04 12:25:57

标签: java php linux

我使用PHP调用Java函数。代码是:

exec('pushd d:\xampp\htdocs\file_excecute\class & java Autoingestion username password id   Sales Daily Summary 20120902',$output,$return);

此代码适用于Windows计算机,但它无法在Linux服务器上运行。代码是:

exec('pushd \var\www\domainname.com\itune_report\class & java Autoingestion username password id Sales Weekly Summary 20120901',$output,$return);

3 个答案:

答案 0 :(得分:0)

尝试从PHP脚本执行sudo命令时,以及在启用SELinux的机器上由PHP调用的外部脚本时,存在(可能无法克服的)困难。

确保在命令中使用Linux目录路径

Linux默认情况下不允许apache更改进程的组ID。

您可能需要使用其他解决方案,例如让PHP脚本将文件存放在由cron或inotify监控的目录中,并且将使用root权限调用另一个脚本。

答案 1 :(得分:0)

显然它在Linux上不起作用。命令pushd仅在Windows shell中定义。 linux上的路径必须使用forward而不是back slashe作为分隔符。

答案 2 :(得分:0)

您使用错误的斜杠作为字段分隔符,但这可能不是您唯一的问题。

该命令的输出显示在$ output中,因为您使用exec(command, output, return)表单。

但是,这只会给你stdout。 shell将向stderr发送错误消息。

不幸的是,exec()的版本没有读取stderr。

您可以通过在shell命令末尾添加$output将两个输出合并到2>&1

exec("mycommand 2>&1", $output, $return);

查看$ output,您将 找到成功命令错误消息的输出,您可以使用这些消息来确定它无法正常工作的原因。

如果你想写一些更严格的东西,分别对待stdout和stderr,你需要使用proc_open()代替:PHP StdErr after Exec()