0

我创建了一个简单的 C 程序,它接受一个整数参数并输出该整数加 2。我可以在终端中运行它

./simplep 2

在 PHP 中

exec('./simplep 2', $output).

我有一个更复杂的程序myprogram,它涉及一个外部库。我可以在终端中运行它

./myprogram a.mov

但如果我在 PHP 中运行它会失败

exec('./myprogram a.mov', $output)

没有产生任何输出,这让我觉得程序根本没有运行。

PS。我在 Mac 上工作。

更新

从错误输出中我知道问题出在库上。它说

dyld: Library not loaded: /opt/local/lib/libjpeg.8.dylib". 

但是库文件在那里。

4

3 回答 3

2

它可能会产生错误,但它会stderr代替stdout. 在此处查看的一种简单方法stderr是更改​​:

exec('./myprogram a.mov', $output)

exec('./myprogram a.mov 2>err.out', $output)

并查看文件err.out以查看错误消息是什么。

编辑:

现在您发布了错误,看起来动态库没有被加载。最可能的原因是没有将环境变量传递给exec,并且DYLD_LIBRARY_PATH正在清除环境变量。查看DYLD_LIBRARY_PATH终端上的内容(通过env),然后尝试运行:

exec('env DYLD_LIBRARY_PATH=XYZ ./myprogram a.mov 2>err.out', $output)

其中 XYZ 是DYLD_LIBRARY_PATH终端上的值。

于 2012-06-25T18:57:07.087 回答
1

您是否具有使用 exec 运行 myprogram 的正确权限?尝试这个

chmod +x myprogram
于 2012-06-25T18:29:46.840 回答
0

如果您的程序在命令行上运行,请尝试使用 shell_exec 而不是 exec。

于 2012-06-25T18:41:46.343 回答