我遇到了问题 - 我在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为空数组。我试图添加&#34; 2&amp;&gt; 1&#34;在exec命令中,但仍未创建文件(但$ return为1)。我还尝试过其他php函数(system()和shell_exec()),但它仍然没有创建结果文件。
exe与php脚本位于同一目录中(我试图用绝对路径运行它 - 同样的问题)。结果catalouge存在。 php.ini中没有禁用的函数,在路径变量中我可以看到OpenCV的libs路径。当我运行此代码时:
<?php
echo "<pre>";
system("dir");
echo "</pre>";
?>
它有效。
操作系统:赢得8.1 x64
Apache 2.4.6 x64(apachelounge版)
PHP 5.6.13 x64(fcgi_mod)
任何想法我该怎么办?
我从这里获得了当前的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应用程序吗?