在Linux / Apache上通过PHP脚本访问USB摄像头

我想使用一个USB摄像头(在一个小的C ++ / OpenCV应用程序),并从PHP脚本中调用它。 我的testing应用程序如下所示:

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

当我通过AJAX从一个html文件(用一个button)调用这个应用程序的时候,它通过Apache,然后返回false

所以,我的应用程序工作正常。 我的PHP脚本也能正常工作。 但有一个许可或类似的东西,防止通过Apache访问networking摄像头(用OpenCV库初始化)的PHP, 但权限足以让应用程序运行

有人可以帮我吗? 任何想法?

谢谢!


编辑1:

build议之后,我尝试使用php脚本来启动我的应用程序,而不使用AJAX。 我获得了相同的结果,即OpenCV 无法初始化服务器上​​的USB摄像头。

对于那些可能对这个问题感兴趣的人…

我面临的问题有两个方面:通过从客户端调用的PHP脚本初始化USB摄像头,并从这个php脚本启动一个应用程序,该应用程序可以将文件写入文件夹/var/www/images磁盘。

  1. 为了启用USB摄像头,我只需要将用户www-data (Apache)添加到组视频 。 通过查看我自己的帐户,我发现它:我看到我是这个组的成员,所以加入Apache也是很自然的!
  2. 为了允许应用程序(从摄像头捕获图像)将它们存储在文件夹/var/www/images我观察到子文件夹images属于root用户,并且是组root的成员。 由于是Apache运行称为我的应用程序的PHP脚本,我把images的所有者切换到www数据

正如我们用法语所说… Voilà

感谢所有给我提示的人!