资源简介
在linux下面,自动动手用socket实现了一个简单的php web server。经过测试,可以使用。
代码片段和文件信息
/*
* =====================================================================================
*
* Filename: phpServer.cpp
* Version: 0.1
* Created: 2011年05月16日 07时40分56秒
* Compiler: g++
*
* Author: zhxm501205289@qq.com
* Company: xd-1301
*
* =====================================================================================
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
//缓冲区大小
#define MAX_BUF_SIZE 1024*1024
//分段发送函数
int mySend(void* bufint sizeint sockfd)
{
int sended=0;
while(1)
{
int flag = send(sockfd (char*)buf+sendedsize-sended0);
if(flag ==-1)//发送失败
{
//重新试一试
flag = send(sockfd (char*)buf+sendedsize-sended0);
if(flag == -1)//如果还是失败,则放弃发送
break;
}
sended +=flag;
if(sended>=size)
{
break;
}
}
return sended;
}
//返回 PHP-cgi消息的头和内容的分界点
//php-cgi处理php的返回消息格式如下
//head \r\n
//\r\n
//content \r\n
char* dealPHPMes(char* dataint len)
{
char* p = data;
char* end = p+len-3;
for(;p {
if(*p==‘\r‘ && *(p+1) ==‘\n‘ && *(p+2)==‘\r‘ && *(p+3)==‘\n‘)
return p+4;
}
return data;
}
//从http请求头中获取请求的文件
//http典型请求头如下:
//GET /a.php?a=10&b=10 HTTP/1.1 \r\n
//
//函数返回./a.php
string getReq(char* bufint len)
{
string temp = “.“;
char *p=buf;
char* end = buf+len;
for(;p if(*p==‘/‘) break;
for(;p {
//空格 或者\r\n是典型的结束符号
if(*p==‘?‘ || *p == ‘ ‘) break;
temp +=*p;
}
return temp;
}
//从http请求头中获取请求的文件的类型
//http典型请求头如下:
//GET /a.php?a=10&b=10 HTTP/1.1 \r\n
//
//函数返回“php“
string getType(char* bufint len)
{
string temp = ““;
char *p=buf;
char* end = buf+len;
for(;p if(*p==‘.‘) break;
for(p++;p {
if(*p==‘?‘ || *p==‘ ‘) break;
temp +=*p;
}
return temp;
}
//从http请求头中获取请求的参数
//http典型请求头如下:
//GET /a.php?a=10&b=10 HTTP/1.1 \r\n
//
//函数返回“a=10 b=10“
string getArg(char* bufint len)
{
string temp = ““;
string method;
char tempBuf[10];
char *p=buf;
char* end = buf+len;
sscanf(buf“%s“tempBuf);
method=tempBuf;
if(method==“GET“)//只考虑GET POST 两种方法 GET方法参数紧跟请求文件后面 如a.php?a=10&b=10
{
for(;p if(*p==‘?‘) break;//‘?‘是参数列表的开始符号
for(p++;p {
if(*p==‘\r‘ && *(p+1)==‘\n‘) break;
if(*p==‘ ‘)break;
if(*p==‘&‘)//a=10&b=10 转成a=10 b=10
temp +=‘ ‘;
else
temp += *p;
}
return temp;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 37002 2011-05-05 19:24 0.png
文件 386 2011-05-17 13:02 a.php
文件 9268 2011-05-17 20:04 phpServer.cpp
----------- --------- ---------- ----- ----
46656 3
- 上一篇:采用php编写在线聊天室
- 下一篇:PHP和MySQL部门考核系统
相关资源
- 好用的php微信企业号
- 最专业的PHP集成环境秒杀phpStudy、xa
- THINKPHP商城,含支付宝、微信支付
- thinkPHP支付宝支付功能完整源码
- phpMyFAQ v3.0.1 多国语言版
- php MyFAQ问答系统 多国语言版 v3.0.4
- phpMyFAQ 问答系统
- phpMyFAQ v3.0.0 多国语言版
- phpMyFAQ 开源问答系统 v3.0.0 RC2
- PHP网页小游戏
- php小说采集demo
- PHP寄生虫繁殖劫持程序V3.0
- 韩顺平 PHP从入门到精通百度云资源(
- windows安装intl扩展
- phpSpreadsheet.zip
- Xblog、PHPwind、Oblog三款主流商用博客软
- PHP微信扫码关注公众号并授权登录.
- ZipFile.php(PHP压缩类打包)
- php聊天室源码群聊私聊多聊天室
- PHP支持手势的手机端图片裁剪上传
- 使用PHP+Sphinx建立高效的站内搜索引擎
- vip影视源码自动无需采集THINKPHP版
- ThinkPHP5.1 excel表的导入导出操作 (P
- PhpSpreadsheet Excel组件,PHPExcel升级版
- 追梦翔飞数字报刊管理系统PHPV7.3
- 拼团商城开源系统-基于thinkphp5-如花拼
- 微信支付Native扫码方式PHP
- 微信分享jssdk朋友圈带缩略图-utf8php通
- php简历模板
- php大马一句话数据库集合
评论
共有 条评论