2

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

3 回答 3

0

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

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

然而,这只给你标准输出。shell 会将错误消息发送到 stderr。

不幸的是,没有exec()读取标准错误的版本。

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

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

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

如果您想编写更严格的东西来分别处理 stdout 和 stderr,则需要proc_open()改用:PHP StdErr after Exec()

于 2012-09-04T12:47:31.430 回答
0

在启用 SELinux 的机器上尝试从 PHP 脚本和 PHP 调用的外部脚本执行 sudo 命令时,存在(也许是无法克服的)困难。

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

默认情况下,Linux 不会让 apache 更改进程的组 ID。

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

于 2012-09-04T12:30:43.490 回答
0

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

于 2012-09-04T12:31:01.770 回答