如何在PHP脚本中运行涉及外部库的C程序?

时间:2012-06-25 18:26:30

标签: php c exec

我创建了一个简单的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". 

但库文件在那里。

3 个答案:

答案 0 :(得分: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的值。

答案 1 :(得分:1)

你有权利用exec运行myprogram吗?试试这个

chmod +x myprogram

答案 2 :(得分:0)

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