c++ server не отображает ПХП

230
13 сентября 2018, 00:40

есть код:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
char webPage[]=
"HTTP/1.1 200 OK\r\n"
"Content-Type:text/html;charset=UTF-8\r\n\r\n"
"<!DOCTYPE html>\r\n"
"<?php phpinfo(); ?>"
"<html><head><title>SERVA4ok</title>\r\n"
"<style>body{background-color:#FFFF00}</style></head>\r\n"
"<body><center><h1>SERVER</h1><br>\r\n";
//"<img src=\"doctest.png\"></center></body></html>\r\n"
int main(int argc,char *argv[])
{
    struct sockaddr_in server_addr,client_addr;
    socklen_t sin_len=sizeof(client_addr);
    int fd_server,fd_client;
    char buf[2048];
    int fdimg;
    int on=1;
    fd_server=socket(AF_INET,SOCK_STREAM,0);
    if(fd_server<0)
    {
        perror("socket");
    }
    setsockopt(fd_server,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(int));
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(7500);
    server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    if(bind(fd_server,(struct sockaddr *)&server_addr,sizeof(server_addr))==-1)
    {
        perror("bind");
        close(fd_server);
        exit(1);
    }
    if(listen(fd_server,10)==-1)
    {
        perror("listen");
        close(fd_server);
        exit(1);
    }
    while(1)
    {
        fd_client=accept(fd_server,(struct sockaddr *)&client_addr,&sin_len);
        if(fd_client==-1)
        {
            perror("Connection failed ... \n");
            continue;
        }
        printf("Got client connection ...\n");
        if(!fork())
        {
            close(fd_server);
            memset(buf,0,2048);
            read(fd_client,buf,2048);
            printf("%s\n",buf);

            write(fd_client,webPage,sizeof(webPage)-1);
        close(fd_client);
        printf("closeing....");
        exit(0);
        }
        close(fd_client);
    }
    return 0;
}

с ХТМЛ все работает но не с ПХП помогите пожалуйста с чем сможете

Answer 1

Поскольку в вашем коде нету даже намека на парсинг заголовков запроса, писать про полноценный CGI интерфейс не стану. Вот для начала такая идея:

  1. Открывается через popen(); труба к php интерпретатору (первым аргументом путь к интерпретатору). Получаем поток к нему (а точнее как бы два - стандартный ввод и вывод);
  2. Скармливаем в поток исходник PHP, получаем оттуда же результат выполнения;
  3. Отдаем результат клиенту;

Получите минимальный функционал. В дальнейшем, если захотите развить свой код, нужно будет парсить заголовки запроса, заменить php на php-cgi и передавать заголовки и прочую информацию через переменные окружения в интерпретатор. Через поток будете получать результат и заголовки ответа перед ним

READ ALSO
В edit нужно рисовать таблицу

В edit нужно рисовать таблицу

Мне нужно в окне рисовать таблицу в qt Я делаю так: Создаю таблицу:

197
Добавить несколько лет к дате в строке

Добавить несколько лет к дате в строке

Есть String lastyear в которой лежит значение 2015; Нужно к ней добавить 10 лет, чтобы получить в итоге:

182
Не получается парсить JSON

Не получается парсить JSON

Есть Веб Сервис написанный на Jax-rs 20

186