我创建了一个简单的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".
但库文件在那里。
答案 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。