通过Linux / Apache上的PHP脚本访问USB网络摄像头

时间:2013-11-27 05:15:28

标签: php linux apache webserver userid

我想使用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网络摄像头。

1 个答案:

答案 0 :(得分:1)

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

我遇到的问题有两个方面:通过从客户端调用的php脚本初始化USB网络摄像头,并从此php脚本启动应用程序 ,可以将图像写入文件夹中的磁盘{ {1}}。

  1. 要启用USB摄像头,我只需将用户 www-data (Apache)添加到 video 组。我通过查看自己的帐户找到了它:我看到我是这个组的成员所以将Apache添加到它中似乎很自然!
  2. 要允许应用程序(从相机捕获图像)将它们存储在文件夹/var/www/images中,我发现子文件夹/var/www/images属于用户 root 并且是组 root 的成员。由于Apache运行了调用我的应用程序的php脚本,因此我将images的所有者切换为 www-data
  3. 正如我们用法语说的那样...... Voilà

    感谢所有给我一些提示的人!