Php 如何将文本/html数据发送到浏览器

Php 如何将文本/html数据发送到浏览器,php,c,http,browser,http-headers,Php,C,Http,Browser,Http Headers,嗨,在这里之前我问了一个问题: 我编写了一个个人web服务器,并尝试使用PHP-CGI将其与PHP集成,我运行一个系统命令(“PHP-CGI.exe path/to/PHP/script.PHP getvar=getValue”),然后将输出发送到浏览器,除了输出在浏览器中显示为纯文本页面外,其他一切都很酷,如: X-Powered-By:PHP/5.4.14设置Cookie: PHPSESSID=9rurvleetdkucms44i4cac9a14;path=/Expires:1981年11月

嗨,在这里之前我问了一个问题: 我编写了一个个人web服务器,并尝试使用PHP-CGI将其与PHP集成,我运行一个系统命令(“PHP-CGI.exe path/to/PHP/script.PHP getvar=getValue”),然后将输出发送到浏览器,除了输出在浏览器中显示为纯文本页面外,其他一切都很酷,如:

X-Powered-By:PHP/5.4.14设置Cookie: PHPSESSID=9rurvleetdkucms44i4cac9a14;path=/Expires:1981年11月19日星期四 08:52:00 GMT缓存控制:无存储,无缓存,必须重新验证, 后检查=0,预检查=0 Pragma:无缓存内容类型:text/html

ID值=AAAA

以下是PHP脚本:

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

我使用的命令是:php cgi html_doc/index.php id=AAAA

我的问题是:为什么它发送纯文本数据而不是我想要的text/html?! 为什么它会像上面那样在浏览器中显示标题信息?! 提前谢谢大家!
(注意:我分离了

以便可以显示!)

这是一个使用C套接字的基本html\u-to\u浏览器

#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
字符*回复=
“HTTP/1.1 200正常\n”
日期:2009年2月19日星期四12:27:04 GMT\n
“服务器:Apache/2.2.3\n”
上次修改:2003年6月18日星期三16:05:58 GMT\n
“ETag:\“56d-9989200-1132c580\”\n”
“内容类型:text/html\n”
“内容长度:156\n”
“接受范围:字节\n”
“连接:关闭\n”
“\n”
“o EEEEEEEEEEEEEEEEEEEEEEEEEEEEE GRAND uuu2\n\r\n\r\n”
“这是使用C套接字对浏览器\n的HTTP响应\u\\\ t 5\n\r\n\r\n”
“\r\n\r\n\r\n\r\n\r\n\r\n未完成AA\u 3\r\n\r\n”;
int sd=套接字(PF_INET,SOCK_STREAM,0);
地址中的结构sockaddr\u;
bzero(地址和地址,sizeof(地址));
addr.sin_family=AF_INET;
地址sin_端口=htons(80);
addr.sin\u addr.s\u addr=INADDR\u ANY;
如果(绑定(sd,(结构sockaddr*)和地址,sizeof(地址))!=0){
printf(“绑定错误\n”);
}
如果(听(sd,16)!=0){
printf(“侦听错误\n”);
}
而(1){
插座尺寸=尺寸(地址);
int client=accept(sd,(struct sockaddr*)&addr,&size);
如果(客户端>0)
{
printf(“已连接的客户端”);
/*发送(客户端,回复,sizeof(回复),0)*/
发送(客户端,回复,strlen(回复)+1,0);
}
}
返回0;
}
使用sudo在控制台上编译并执行(允许端口80)
或将addr.sinu端口更改为大于“1024”的值


…按住ctrl+z键以完成

在php中,您可以执行
标题(“内容类型:text/html”)
要设置默认值,请将php.INI中的
default\u mimetype
指令更改为正确的mime类型。

我正在使用WINSOCK,但您编写标题的方式对我很有用,非常感谢,这非常有用!标题(“内容类型:文本/html”);不工作,事实上我在浏览器中看到内容类型:纯文本/html!如果您将头视为主体,那么可能发生的情况是您的http服务器正在发送头和边界,然后将其传递给php并再次发送头。对于php文件,我认为您必须禁止在http服务器中发送头,让php cgi执行iti禁止从我的服务器发送头,只允许php cgi头,但它们不起作用,当我在服务器中使用@mf_的头并禁止php cgi头时,它工作得很酷,但是当我在脚本中使用session_start()函数时,我遇到了一个新的问题:-警告:session_start():无法发送会话cookie-第6行的头已经发送了…….index.php-警告:session_start():无法发送会话缓存限制器-第6行的头已经发送了…….index.php