【问题标题】:Accessing USB webcam via a PHP script on Linux/Apache在 Linux/Apache 上通过 PHP 脚本访问 USB 网络摄像头
【发布时间】:2013-12-12 14:54:58
【问题描述】:

我想使用 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 -f /the_php_script.php 这样通过 php 调用应用程序时,它返回 true

当我通过 AJAX 从 html 文件(带有按钮)调用的 php 调用应用程序时,它会通过 Apache,然后返回 false

所以,我的应用运行良好。我的 php 脚本也可以正常工作。但是有一个权限或类似的东西可以阻止 php 通过 Apache 访问网络摄像头(使用 OpenCV 库对其进行初始化),但该权限足以允许应用程序运行

有人可以帮我吗?有什么想法吗?

谢谢!


编辑 1:

根据建议,我尝试使用 php 脚本在不使用 AJAX 的情况下启动我的应用程序。我得到了相同的结果,即 OpenCV 无法初始化服务器上​​的 USB 网络摄像头。

【问题讨论】:

  • 你能在不使用 AJAX 的情况下检查吗?
  • 什么意思?我需要一个 AJAX 请求来启动 php 脚本,不是吗?
  • 您实际上不必使用 AJAX 来调用 PHP 脚本,现在尝试在没有 AJAX 的情况下调用脚本,正常的 HTTP 调用,看看会得到什么
  • cli 上的 PHP 以与通过 Apache 运行的 PHP 不同的用户身份运行。您需要检查用户 www-data(或在您的系统上运行的任何 Apache)是否有权运行您的程序。我怀疑它没有。
  • 我认为这可能是权限问题或与之相关的问题,为了确保这一点,我建议您执行以下程序(不使用 AJAX):1)在您的 PHP 脚本中, 在前 2 行写 error_reporting(E_ALL); ini_set('display_errors', true); 2) 执行脚本后,检查您的 Web 服务器的错误和访问日志。请分享你的收获。

标签: php linux apache webserver userid


【解决方案1】:

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

我面临的问题有两个:通过从客户端调用的 php 脚本初始化 USB 网络摄像头,并启动一个应用程序从此 php 脚本,该应用程序可以将图像写入文件夹 @ 中的磁盘987654321@.

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

正如我们用法语所说的...... Voilà

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

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 2012-09-21
    • 2013-09-05
    • 2016-08-04
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多