我想使用一个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
磁盘。
/var/www/images
我观察到子文件夹images
属于root用户,并且是组root的成员。 由于是Apache运行称为我的应用程序的PHP脚本,我把images
的所有者切换到www数据 。 正如我们用法语所说… Voilà !
感谢所有给我提示的人!