Я делаю небольшую курсовую работу для университета, и я совершенно сбит с толку. По сути, я создал базовый веб-сервер (который использует сокеты) на C. Теперь мне нужно сделать так, чтобы любой файл .php запускался через компилятор php и выводил.
Проблема, с которой я столкнулся, заключается в том, что я пытался использовать system () и execlp () (последнее было рекомендовано нашим лектором) и не могу найти способ заставить его отображаться на странице вместо терминала.
Вот выдержка, показывающая код, который у меня сейчас есть. Пожалуйста, извините за все комментарии ... как вы видите, я пытался всячески заставить его работать!
КОД:
if(strncmp(resource, ".php", 4)==1) {
//cout << "test";
int php;
int phppipefds[2], phppid;
char phpc;
pipe(phppipefds);
phppid = fork();
if(phppid == 0) { // child will read pipe
close(0); // close stdin
dup2(phppipefds[0],0); // read pipe on stdin
close(phppipefds[1]); // we dont need to write pipe
execlp("/Applications/MAMP/bin/php5/bin/php", "php", httppath, NULL);
cerr << "exec failed\n";
exit(1);
}
// parent, if we redirect stdout printf will send down pipe
close(1);
dup2(phppipefds[1],1); // write pipe on stdout
close(phppipefds[1]); // dont need 2 write descriptors
close(phppipefds[0]); // we dont need to read pipe
cout << "words \ngoing \ndown \npipe \nbeing \nsorted\n";
close(1); // must close pipe or sort will hang
wait(0);
//php = system("/Applications/MAMP/bin/php5/bin/php /Users/rickymills/webserver/pages/test.php");
//strcat(resp, );
//strcat(resp, php);
}
В последних нескольких строках я пытался всячески заставить эту штуку работать.
Фактическая часть, где все выгружается в окна браузера, находится чуть ниже приведенного выше кода:
write(connsock, resp, rd);
exit(1);
}
Кто-нибудь знает, как я могу получить это в окне браузера? Я бы подумал, что лучшим способом было бы получить вывод php в переменную и объединить его с 'resp' перед записью connsock, это правильно?
Спасибо за ваше время.