【问题标题】:Calling jar from PHP从 PHP 调用 jar
【发布时间】:2010-09-06 18:21:02
【问题描述】:

我创建了一个可以生成 PDF 文件的 jar 文件。我已经像这样从命令行调用它 -

java -jar project.jar 'Author, An---A Title'

这很好用,但是当我使用以下代码从 PHP 文件调用相同的 jar 文件时,它会创建一个名称正确但为空且字节为零的文件。

<?php
    echo exec("java -jar project.jar 'Author, An---A Title'");
?>

我确定这不是 jar 的问题(因为它可以从命令行运行),而且我几乎可以肯定它不是来自 PHP 文件(因为它创建了空文件,所以它必须已被读取) ,所以我认为问题可能出在目录的权限上?我正在使用 linux,PHP 正在通过 OPT 目录中的 XAMMP 运行。有什么想法吗?

提前致谢。

【问题讨论】:

  • 这是您自己的 JAR 还是第 3 方的?哪一个?你懂 Java 吗?
  • 我已经这样做了很多次,应该可以按预期工作。也许这是一个用户/权利问题。您是否使用您的 webserver/php 进程使用的同一用户调用命令行?
  • 如果你可以“su”到 Apache 运行的用户,你可以测试你的权限理论。 su apache;java -jar ..etc.. 可能不起作用,Apache 用户通常没有外壳。可能需要一些侦探工作来找出你的 Apache 运行的用户,试试ps aux | grep apacheps aux | grep httpd。用户应该是ps 输出的第一列
  • 嗨 Robin,我更改了整个 Apache 目录的用户,但仍然无法正常工作,这是最奇怪的事情。我想不通。

标签: java php permissions jar


【解决方案1】:

我不确定您是否可以控制 Java 源代码,但至少症状表明它没有在相关文件的 OutputStreamWriter 上调用 close()


更新:试试shell_exec(),看看结果如何。可能它在中途抛出了一些异常,这些异常被写入了您完全错过的stderr 在 PHP 代码中。 exec() 即只捕获stdout

$result = shell_exec("java -jar project.jar 'Author, An---A Title'");
if ($result) {
    echo nl2br($result);
} else {
    echo "shell_exec() failed";
}

【讨论】:

  • 这似乎不起作用。我不认为这是一个编码问题,因为我从命令行调用它时没有问题。
  • 查看答案更新。或许您可以在 stderr 中找到更多有趣的信息。
  • 嗨,我刚刚尝试过更新代码,但没有成功。现在我确定它与权限有关。我尝试手动创建一个文本文件,该文件有效。然后,当我尝试保存一些我无法保存的东西时。 chmod 777 后我可以保存目录中的所有内容。我必须在手动创建每个文件后执行此操作。如何确保特定目录中的所有文件始终可写?谢谢。
猜你喜欢
  • 2016-04-08
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多