【发布时间】: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