【发布时间】:2023-03-21 14:20:01
【问题描述】:
我想调用一个 java 程序并在标准输出中获取它的输出。我遵循了stackoverflow 中的建议。但它不起作用。
我已将类文件添加到我的 CLASSPATH。我可以正确执行cmd中的命令如下:
在我的 PHP 文件中,我将这个程序称为
exec("java Hello", $output);
print_r($output);
它只产生:
Array()
有什么问题?我该如何解决这个问题?
ps: Hello 是一个演示程序,实际上我要调用的程序要复杂得多,在我的机器(i5 4G)上可能需要 2 秒或更长时间。
【问题讨论】:
-
试试看
passthru()回馈什么(而不是exec())。exec()有时可能会选择性地仅捕获返回的值而不是打印的内容。使用escapeshellarg()保护您的脚本免受黑客攻击。 -
@Allendar passthru 返回返回值?反正浏览器给
1。 -
如果您的 JAVA 程序中的
main()函数返回 1(返回 0 = 没有错误,1 = 有问题;))这意味着有一个错误。 PHP 的命令行无法像在cmd中那样获取您的 JAVA,这可能与此有关。两者当然是不同的设置。就像cakil回答的那样,它可能会在您返回的 Array() 上循环,因为默认情况下 PHP 中的 echo/print 不会显示 Array 的内部,就像您在其他语言中可能习惯的那样。 -
@Allendar 谢谢,我仔细检查了返回的数组以确保我没有遗漏任何内容,但它是空的。而
passthru实际上没有提供任何比1更重要的信息,我说1因为我错误地设置了课程。无论如何,谢谢你。如果这无论如何都不起作用,我也可以尝试将其包装在 jsp 文件或其他一些服务器脚本语言中。我只是想让它在线,以便用户可以访问 java 程序处理后的数据。最坏的情况是我必须将 java 程序翻译成 PHP 或其他服务器脚本语言... -
尝试将
return 0;放在您的JAVA 类中,至少测试passthru()是否并不总是返回1。它应该读取RAW-input,因此调用JAVA 从PHP 脚本。也许(测试)也尝试从它的绝对路径执行 JAVA。你测试的越多,你就会越了解:)