【问题标题】:exec() on a java program in php-cgi on a raspberry piexec() 在树莓派上的 php-cgi 中的 java 程序上
【发布时间】:2014-02-07 21:54:13
【问题描述】:

所以,我有一个 php 应用程序,通过 cgi 和 nginx 运行。 我有一个用于打印条形码的 .jar 程序,猜猜看,条形码打印机 (Zebra)!。

我的 php 应用程序使用 exec() 命令运行 .jar 程序。在我的电脑上(php、cgi、nginx、debian 测试),它可以工作。

现在,我正在尝试同样的事情,但在树莓派上。 Debian(wheezy,覆盆子版),php,cgi,nginx。 exec() 命令不会失败(以我没有遇到严重的致命错误的方式),不会返回任何内容,也不会成功。

当我在 shell 中尝试使用 www-data 用户(运行 nginx/php-cgi 的用户)时,java 命令运行良好。当我将它放入 php-cli(cli,而不是 cgi)脚本中时,它可以工作,并使用 shell 中的 php 命令运行它,使用 www-data 用户:

<?php exec('java -cp /path/ Methode options');?>
$ php print.php

Cups 配置好像没问题(我(pi 用户)可以打印,www-data 用户可以通过命令行(shell)打印,root 可以打印,每个人都可以)。

我很困惑,找不到问题所在。

【问题讨论】:

  • 您是否尝试将额外的 &amp;$output 参数添加到 exec。以及var_dump执行java命令后的内容
  • 是的,我试过了,没有成功。

标签: java php cgi exec raspberry-pi


【解决方案1】:

尝试在 exec() 的末尾添加 2&gt;&amp;1,例如:exec('java -cp /path/ Method options 2&gt;&amp;1');

编辑: 如果它是真正的服务器,我不会建议您这样做;但由于它是 PI,您可以编辑 sudoers 文件并添加以下内容

运行sudo visudo

并添加:

www-data ALL=NOPASSWD: ALL

现在修改你的 exec 字符串: exec('sudo java -cp /path/ Method options');

【讨论】:

  • 嗯,我试过你的编辑,但没有更多的运气。我不明白。就好像 exec() 函数就像 'function exec() { return;}'
  • 你回应 exec(); 吗?您是否在使用和不使用 `2>&1` 的情况下进行了测试?
  • 好吧,我用 sudo 再次尝试,它成功了(之前的测试是在 java 版本降级之后)。问题是,www-data 在 lpadmin 组中。那应该没问题吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2014-01-18
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多