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