我使用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上的路径必须使用前斜杠而不是后斜杠作为分隔符。