我在这之前问了一个问题:how-can-i-integrate-php-with-my-http-server 我编写了一个个人Web服务器,我尝试使用PHP-CGI将它与PHP集成,我运行一个系统命令(“PHP-CGI.exe路径/到/ php / script.php getvar = getValue”)我发送输出到浏览器,一切都很酷,除了输出在浏览器中显示为普通/文本页面,如:
X-Powered-By:PHP / 5.4.14 Set-Cookie: PHPSESSID = 9rurvleetdkucms44i4cac9a14; path = / Expires:1981年11月19日星期四 08:52:00 GMT Cache-Control:无存储,无缓存,必须重新验证, post-check = 0,pre-check = 0 Pragma:no-cache Content-type:text / html
ID值= AAAA< / H1>
这是PHP脚本:
<?php
session_start();
echo "< h1>ID value = < /h1>". $_GET['id'];
?>
和我使用的命令:php-cgi html_doc / index.php id = AAAA
我的问题是:为什么它以普通/文本而不是我想要的text / html发送数据?! 为什么它会像上面那样在浏览器中显示标题信息?! 谢谢大家! (注意:我分开了&lt; h1&gt;所以它可以出现!)
答案 0 :(得分:1)
这是使用C套接字的 BASIC html_to_browser
#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;
}
使用 sudo(允许端口80)在控制台上编译+执行或将addr.sin_port更改为大于'1024'的内容
... ctrl + z完成
答案 1 :(得分:1)
在php中,您可以header("Content-Type: text/html");
将php.INI中的default_mimetype
指令的默认更改设置为正确的mime类型。