Yürütme ve C tabanlı web sunucusu üzerinde çıkış PHP - Stuck!

1 Cevap php

Ben üniversite için kurs biraz yapıyorum ve ben tamamen şaşırmış değilim. Temelde ben şimdi herhangi bir. Php dosyası, php derleyici ve çıkışı ile çalıştırmak böylece bunu yapmak için var C. temel bir web sunucusu (soketi kullanır) yaptık.

Ben yaşıyorum sorun ben (ikincisi bizim öğretim üyesi tarafından tavsiye edildi)) sistemi () ve execlp (kullanarak denedim ve cant yerine terminalin sayfasında göstermek için nasıl bulmak olduğunu.

İşte şu anda var kodunu gösteren bir özü bulunuyor. Eğer ben işe almak için her türlü çalışıyorum gördüğünüz gibi ... tüm yorumlarınızı lütfen bağışlayın!

KOD:

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);
 }

Ben bu şey işe almak için her türlü çalışıyorum nerede son birkaç satır vardır.

Her tarayıcı pencereleri dökülür asıl kısmı sadece yukarıdaki kodu aşağıdaki gibidir:

 write(connsock, resp, rd);
 exit(1);
} 

Herkes tarayıcı penceresine bu nasıl alabilirim bir fikrin var mı? Ben en iyi yolu bir değişken içine php çıktı almak için olabilir, ve yazmak connsock önce 'solunum' ile birleştirmek sanırdım, bu doğru mu?

Zaman ayırdığınız için teşekkürler.

1 Cevap

popen() yerine sistemi () veya execlp () kullanmayı deneyin.

Popen () işlevi, bir boru oluşturarak bölmek ve kabuk çağırarak bir süreci açar. Bu geri programına yerine terminaline daha PHP çıktı yönlendirmek için izin vermelidir.

char buf[BUFSIZ];
FILE *fp;

if ((fp= popen("/bin/php -f /webserver/pages/test.php", "r")) != NULL)
{
    /* Read from the PHP command output */ 
    while (fgets(buf, BUFSIZ, fp) != NULL)
    {
        /* Process the output from PHP as desired */
        ...
    } 

    (void) pclose(ptr);
}

fclose(fp);