Php 如何将文本/html数据发送到浏览器
嗨,在这里之前我问了一个问题: 我编写了一个个人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 如何将文本/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月
<?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
#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;
}
标题(“内容类型:text/html”)
default\u mimetype