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


exec command is not working on Linux server

我使用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);

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

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

然而,这只会给您stdout。shell将向stderr发送错误消息。

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

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

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

查看$output,您将找到成功命令的输出错误消息,您可以使用这些错误消息来找出它不起作用的原因。

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

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

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

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

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

显然它在Linux上不起作用。命令pushd仅在windows shell中定义。linux上的路径必须使用前斜杠而不是后斜杠作为分隔符。