我想使用USB网络摄像头(在小型C ++ / OpenCV应用程序中)并从PHP脚本中调用它。我的测试应用程序看起来像这样:
int main( int argc, char **argv )
{
cv::VideoCapture C( 0 );
cout << "C.isOpened() = " << boolalpha << C.isOpened() << endl;
return 0;
}
PHP脚本如下所示:
<?php
exec( escapeshellcmd( '/thepath/theapp' ), $output, $result );
var_dump( $output );
?>
当我直接从命令行调用此应用程序时,它会返回 true 。
当我通过php调用此应用程序php -f /the_php_script.php
时,它会返回 true 。
当我通过一个html文件(带一个按钮)从AJAX调用的php调用应用程序时,它通过Apache然后返回 false 。
所以,我的应用程序运行正常。我的PHP脚本也可以正常工作。但是有一个许可或类似的东西阻止php通过Apache访问网络摄像头(用OpenCV库初始化它),但是权限足以让应用程序运行。
有人可以帮助我吗?有什么想法吗?
谢谢!
编辑1:
根据建议,我尝试使用php脚本启动我的应用程序而不使用AJAX。我获得了相同的结果,即OpenCV 无法初始化服务器上的USB网络摄像头。
答案 0 :(得分:1)
对于那些可能对这个问题感兴趣的人......
我遇到的问题有两个方面:通过从客户端调用的php脚本初始化USB网络摄像头,并从此php脚本启动应用程序 ,可以将图像写入文件夹中的磁盘{ {1}}。
/var/www/images
中,我发现子文件夹/var/www/images
属于用户 root 并且是组 root 的成员。由于Apache运行了调用我的应用程序的php脚本,因此我将images
的所有者切换为 www-data 。 正如我们用法语说的那样...... Voilà!
感谢所有给我一些提示的人!