exec命令在终端中工作而不是PHP

时间:2011-03-01 13:14:16

标签: php exec

我正在编写一个让我通过PHP访问 recutils 的课程。

我在../database/中有一个名为books.rec的'数据库'文件,以及一个运行我的Recutils.php类的脚本。

我的班级只需使用正确的参数启动系统应用程序。

但是当我尝试将recins与PHP的exec函数一起使用时,该命令无效,是否可以在命令行中使用。

这是我的脚本执行的命令:

recins -f Title -v "Moi" -f Author -v "Moche" -f Location -v "loaned" -t Books ../database/books.rec

使用PHP:没有,没有插入记录(根本没有错误消息) 在终端:好的,命令工作正常,我的记录已插入。

我还有一个使用recsel进行选择操作的方法,它运行得很好,它会使用完全相同的文件(并且也从exec运行)

那么,有人可以解释一下,为什么命令不起作用另一个同一个文件有效吗?

由于

PS:更多信息:http://www.gnu.org/software/recutils/

2 个答案:

答案 0 :(得分:2)

我会从命令行和你的php脚本中仔细检查你是否以同一个用户身份运行命令。这可能是问题所在。 exec('whoami')

你说你有一个启动你的php脚本的脚本,它应该是与那个用户相同的。

您可能还想运行一个更简单的exec命令来查看它是否会先工作。

其他尝试:

  1. 尝试检查stderr输出exec('ls /tmp 2>&1', $out);这会将标准错误重定向到标准输出,以便您同时获得这两项。
  2. 尝试使用php shell_exec(),它将调用shell,就像从命令行运行一样(例如bash)。 shell_exec('ls /tmp 2>&1 >> /tmp/log')甚至应该将所有输出放入日志文件中。
  3. 我认为这不会对你有所帮助,但是如果所有其他方法都失败了,可以尝试一下,将其设置为后台进程并查看是否完成。 exec('nohup php process.php > process.out 2> process.err < /dev/null &')。 &amp;将命令设置为在后台运行并让脚本继续。
  4. 祝你好运

答案 1 :(得分:0)

PHP可以访问recins命令吗?也是books.rec正确的路径? 尝试绝对路径。