PHP не может выполнить сценарий C ++ с OpenCV

У меня проблема — я написал простое приложение на C ++, которое использует библиотеку OpenCV:

#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int faceDetect(string filename);

int main(int argc, const char** argv) {
int result = 0;
string filename(argv[1]);

Mat image = imread("C:/Serwer/Apache24/htdocs/image/upload/" + filename, 1);

if (image.empty()) {
return 101;
}
CascadeClassifier faceCascade;
if( !faceCascade.load("C:/Serwer/Apache24/htdocs/image/haarcascade_frontalface_alt2.xml") ){
return 103;
};

Mat imageGray;
std::vector<Rect> faces;

cvtColor(image, imageGray, CV_BGR2GRAY);
equalizeHist(imageGray, imageGray);

feCascade.detectMultiScale(imageGray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faces.size(); i++) {
Rect face(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
rectangle(image, face, Scalar(195, 144, 212));
Mat faceROI = imageGray(faces[i]);
}

imwrite("C:/Serwer/Apache24/htdocs/image/result/" + filename, image);
return 1;

return result;
}

Когда я запускаю скрипт с cmd, все в порядке — файл результатов создается.

Я хотел бы использовать этот скрипт в моем веб-приложении (php + js + html), но когда я пытаюсь запустить его так:

<?php
$output = [];
$return = 0;
exec("test.exe lenna.png", $output, $return);
echo "return: " . $return . "<br>";
print_r($output);
?>

Файл не создан, $ return равен 255, а $ output — пустой массив. Я пытался добавить «2 &> 1 «в команде exec, но файл все еще не создан (но $ return равен 1). Я также пробовал другие функции php (system () и shell_exec ()), но он все еще не создал файл результатов.

Exe находится в той же директории, что и php скрипт (я пытался запустить его с абсолютным путем — все та же проблема). результат catalouge существует. В php.ini нет отключенных функций, в переменной path я вижу путь libs OpenCV. Когда я запускаю этот код:

<?php
echo "<pre>";
system("dir");
echo "</pre>";
?>

оно работает.

ОС: Win 8.1 x64
Apache 2.4.6 x64 (версия apachelounge)
PHP 5.6.13 x64 (fcgi_mod)

Есть идеи, что мне делать?


РЕДАКТИРОВАТЬ

Я обнаружил проблему — когда я запускаю PHP как mod_fcgid, мой cpp не работает. Когда я запускаю php как модуль apache (php5apache2_4.dll), все работает нормально.

Я получил мою текущую конфигурацию mod_fcgid отсюда: https://www.apachelounge.com/viewtopic.php?t=2394

И это выглядит так:

<IfModule fcgid_module>
FcgidIOTimeout 40
FcgidConnectTimeout 10

FcgidMaxProcesses 300
FcgidMaxProcessesPerClass 300

FcgidOutputBufferSize 64
ProcessLifeTime 0
FcgidMaxRequestsPerProcess 0
FcgidMinProcessesPerClass 0
FcgidFixPathinfo 0
FcgidProcessLifeTime 0
FcgidZombieScanInterval 20
FcgidMaxRequestLen 536870912
FcgidIOTimeout 120
FcgidTimeScore 3

FcgidPassHeader Authorization

FcgidInitialEnv PHPRC "C:\\Serwer\\PHP5"FcgidInitialEnv PATH "C:\\Serwer\\PHP5;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;"FcgidInitialEnv SystemRoot "C:\\Windows"FcgidInitialEnv SystemDrive "C:"FcgidInitialEnv TEMP "C:\\WINDOWS\\TEMP"FcgidInitialEnv TMP "C:\\WINDOWS\\TEMP"FcgidInitialEnv windir "C:\\WINDOWS"<Files ~ "\.php$">
Options Indexes FollowSymLinks ExecCGI
AddHandler fcgid-script .php
FcgidWrapper "C:/Serwer/PHP5/php-cgi.exe" .php
</Files>
</IfModule>

Нет ошибок в Apache error.log. Знаете ли вы, что я должен изменить в конфигурации fcgid для запуска внешнего приложения cpp?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]