• 大小: 40KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-04
  • 语言: PHP
  • 标签: PHP  web  server  

资源简介

在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


评论

共有 条评论