php exec函数运行不正常

时间:2014-06-05 07:07:55

标签: php c++ opencv

我通过这个命令编译我的c ++文件: -

g ++ main.cpp -o main pkg-config --cflags --libs opencv

这很好。现在,当我使用此命令' ./ main'按命令行运行主文件时,它运行正常,并盯着我的网络摄像头。

但是当我在php中编写代码以通过php代码执行此文件时,它也运行但我的网络摄像头没有找到,并且给了我一个错误。  启动凸轮没有找到的网络摄像头

我不知道背后的原因是什么。 我正在为我的文件添加一些代码。

的main.cpp

     CvMemStorage *storage = cvCreateMemStorage(0);
CvHaarClassifierCascade *cascade =  (CvHaarClassifierCascade*)cvLoad("data/haarcascade_frontalface_default.xml");

printf("starting cam\n");
CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY);

if(capture == 0)
{
    printf("No webcam where found");
    return 1;
}

CvScalar red = CV_RGB(250,0,0);

// counters used for frame capture
int happy_count = 0;
int sad_count = 0;

printf("starting recognition\n");

output.php

  error_reporting(E_ALL);
  ini_set('display_errors', 1);
  echo shell_exec('./main');

运行php时出错: - 启动cam找不到网络摄像头。

注意: - 终端上的工作正常

2 个答案:

答案 0 :(得分:2)

这只是我的建议,但您可以在使用PHP exec时检查哪个用户正在执行程序吗?可能是apache(您使用的是?)拥有自己的用户,无法访问网络摄像头。我建议尝试以普通用户身份运行apache来检查是否有帮助,或者为apache用户提供访问网络摄像头的权限。

在这方面你有一些帮助。 https://serverfault.com/questions/125865/finding-out-what-user-apache-is-running-as

答案 1 :(得分:1)

似乎对我有权限问题。当您通过php脚本执行程序时,它由运行服务器进程的用户执行。我猜你正在使用apache2 webs服务器来提供php内容,它在Ubuntu中作为用户www-data运行。如果是这样,您只需将用户www-data添加到组视频中。

sudo usermod -a -G video www-data

如果您正在使用其他Web服务器或其他Linux发行版,或者您的Web服务器与其他用户一起运行,则需要相应地修改该命令。