2012-10-05 60 views
1

我有一段代码,工作得很好。如何运行一点PHP代码C

FILE *pipe_fp; 
    if((pipe_fp = popen("php", "w")) == NULL) { 
    perror("popen(PHP)"); 
    exit(1); 
    } 

    fputs("<?php echo process('xx'); ?>", pipe_fp); 
    int ret = pclose(pipe_fp); 
    if(WIFEXITED(ret)) 
    printf("%d\n", WEXITSTATUS(ret)); 

问题是,当我尝试这样:

// up to this point i am starting a socket servers and wait for clients 
int bSize; 
int nSize; 
char buffer[MAXBUF+1]; 
char receive[MAXBUF+1]; 
while(1) { 
    bSize = recv(new_fd, buffer, MAXBUF, 0); 
    if(bSize > 0) { 
    buffer[bSize] = '\0'; 
    strcat(receive, buffer); 
    } 
} 

// I rote this part based on this post: http://stackoverflow.com/questions/1383649/concatenating-strings-in-c-which-method-is-more-efficient 
char * first= "<?php echo process('"; 
char * second = "'); ?>"; 
char * code = NULL; 
asprintf(&code, "%s%s%s", first, receive, second); 

// the above code somes here, i just copied the part that has changed 
fputs(code, pipe_fp); 

我已经尝试了一堆所有导致失败的其他例子。 我在C 3天。

+1

http://stackoverflow.com/questions/705443/how-to-mix-up-c-and-php 是否链接帮助? – Friedrich

+0

Apache httpd是开源的,就像PHP一样。只要看看源代码。 –

+1

可能是有一个PHP库,它提供了apis来执行php脚本 – MOHAMED

回答

1

而不是使用临时文件,您可以启动php进程,并将脚本传递给标准输入,从标准输出获得结果。

+0

是的,这也是一个类似的方法。我正在寻找类似于apache的东西,它不需要我通过整个apache源代码来了解他们是如何做到的。我敢打赌,其他人已经试图做到这一点,必须有一些虚拟指导。 – transilvlad

+0

有一个示例代码? – transilvlad

0

您可能想要使用system()调用,您可以在其中启动PHP并运行脚本。

+0

这是我已经知道的东西,我想通过一个库,而不是作为一个shell应用程序 – transilvlad

0

我有它取代标准输入代码:

int spipe[2]; 
if(pipe(spipe) == -1) 
    return 0; 
int pid = fork(); 
if(pid == -1) 
    return 0; 
if(!pid) 
{ 
    close(spipe[1]); 
    dup2(spipe[0], 0); //dup2(spipe[0], stdin); 
    if(execl(PROGRAM_NAME, PROGRAM_NAME, PROGRAM_PARAM, NULL) != 0) 
     exit(1); 
} 
close(spipe[0]); 

您可以用另一根管相同的方式替换标准输出。