2013-05-17 81 views
0

嗨,我在這裏問了一個問題:how-can-i-integrate-php-with-my-http-server 我編程的個人網絡服務器,我試圖使用PHP-CGI與PHP集成,我運行系統命令(「 PHP-CGI.exe path/to/php/script.php getvar = getValue「),然後我將輸出發送到瀏覽器,除了輸出在瀏覽器中顯示爲純文本/文本頁面之外,其他所有工作都很酷:如何發送文本/ html數據到瀏覽器

X-Powered-by:PHP/5.4.14 Set-Cookie: PHPSESSID = 9rurvleetdkucms44i4cac9a14;路徑= /過期時間:星期四,1981年11月19日 08:52:00 GMT Cache-Control:no-store,no-cache,must-revalidate, post-check = 0,pre-check = 0 Pragma:no-cache內容類型:這裏的text/html

ID值= AAAA </H1>

是PHP腳本:

<?php 
session_start(); 
echo "< h1>ID value = < /h1>". $_GET['id']; 
?> 

,我使用的命令:PHP-CGI html_doc /索引。 php id = AAAA

我的問題是:爲什麼它以簡單/文本發送數據而不是text/html我想要?! 爲什麼它會在瀏覽器中顯示如上所示的標題信息? 謝謝大家! (注意:ⅰ分隔< H1>所以可以出現!)

回答

1

這是一個BASIC html_to_browser用C插座

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 
#include <string.h> 
#include <strings.h> 


int main(int argc, char *argv[]){ 

    char *reply = 
    "HTTP/1.1 200 OK\n" 
    "Date: Thu, 19 Feb 2009 12:27:04 GMT\n" 
    "Server: Apache/2.2.3\n" 
    "Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT\n" 
    "ETag: \"56d-9989200-1132c580\"\n" 
    "Content-Type: text/html\n" 
    "Content-Length:156\n" 
    "Accept-Ranges: bytes\n" 
    "Connection: close\n" 
    "\n" 
    "o EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE GRANDE ___2 \n \r\n\r\n" 
    "THIS IS A HTTP RESPONSE TO BROWSER \n USING C SOCKETS _ \\_t 5 \n \r\n\r\n" 
    "\r\n\r\n \r\n\r\n \r\n\r\nNOT FINISHED AA _3\r\n\r\n"; 

    int sd = socket(PF_INET, SOCK_STREAM, 0); 

    struct sockaddr_in addr; 
    bzero(&addr, sizeof(addr)); 
    addr.sin_family = AF_INET; 
    addr.sin_port = htons(80); 
    addr.sin_addr.s_addr = INADDR_ANY; 

    if(bind(sd,(struct sockaddr*)&addr,sizeof(addr))!=0){ 
     printf("bind error\n"); 
    } 

    if (listen(sd, 16)!=0){ 
     printf("listen error\n"); 
    } 

    while(1){ 
     socklen_t size = sizeof(addr); 
     int client = accept(sd,(struct sockaddr*)&addr, &size); 

     if (client > 0) 
     { 
      printf("client connected\n"); 
      /*send(client, reply, sizeof(reply), 0);*/ 
     send(client, reply, strlen(reply)+1, 0); 
     } 
    } 
    return 0; 
} 

編譯+與須藤控制檯上執行(以允許端口80)或改變addr.sin_port到的東西比 '1024' 大

... CTRL + Z完成

+1

我使用的是WINSOCK,但是你寫頭的方式對我很有用,非常感謝你,這真的很有幫助! – EvilThinker

1

在PHP中w ^應該做header("Content-Type: text/html");將php.INI中的default_mimetype指令設置爲默認的MIME類型。

+0

header(「Content-Type:text/html」);不工作,實際上我在瀏覽器中看到了純文本/文本的Content-Type:text/html! – EvilThinker

+0

如果你看到標頭爲body,可能發生的事情是你的http服務器發送頭文件和邊界,然後傳遞給php並再次發送頭文件。對於PHP文件,我認爲你將不得不壓制在你的HTTP服務器發送標題,並讓PHP-CGI做它 – Orangepill

+0

我確實抑制了從我的服務器發送標題,只允許php-CGI標題,但他們不工作,當我在我的服務器中使用了@mf_的頭文件,並抑制了PHP-cgi頭文件,它運行的很酷,但當我在腳本中使用session_start()函數時遇到了新的麻煩:-Warning:session_start():無法發送會話cookie - 頭文件已在第6行的....... index.php中發送 - 警告:session_start():無法發送會話緩存限制器 - 已在第6行的........ index.php中發送的標頭 – EvilThinker

相關問題