golangphp--GO解析PHP源码并实现一个miniPHP服务器
2017-04-12 10:43
615 查看
golangPHPcgi GOphp–GO解析PHP源码并实现一个miniPHP服务起器
by
golang php cgi github:https://github.com/webxscan/gophpBLOG: http://blog.csdn.net/webxscan/
BY:斗转星移 QQ:29295842
软件目的
实现一个本地PHP解析器,不用使用阿帕奇或者IIS。这样就可以实现很多自定义扩展。
后面还会持续更新,有兴趣的可以联系我一起交流。
软件目前写了4天,还有很多不完美的地方还希望大家予以纠正。
代码
package main import ( "fmt" "net" "strconv" "Public_file" //公用文件 "fastcgi" "time" "www" ) func main() { fmt.Println("PHP CGI WEB Server Example text V:1.0") fmt.Println("BY:29295842@qq.com") // fmt.Printf(Cmdexec(".\\php\\php546x161220011555\\php.exe", "windows")) // //fmt.Printf(Cmdexec(".\\php\\php546x161220011555\\php.exe .\\php\\php546x161220011555\\1.php", "windows")) ip := "127.0.0.1" //port := "9002" port := 9000 url := "" for { url = fmt.Sprintf("%s:%d", ip, port) //127.0.0.1 tcpAddr, _ := net.ResolveTCPAddr("tcp4", url) //转换IP格式 _, err := net.DialTCP("tcp", nil, tcpAddr) //查看是否连接成功 if err != nil { break //#跳出 } port++ time.Sleep(1 * time.Second) } Public_file.Cgi_ip = ip //记录 Public_file.Cgi_port = strconv.Itoa(port) //记录 go fastcgi.Run_cgi(ip, strconv.Itoa(port)) //PHP cgi http_url := "127.0.0.1:8070" go www.Www_root(http_url) //启动WEB网站 time.Sleep(1 * time.Second) for { //死循环 time.Sleep(10 * time.Second) } //make一个chan用于阻塞主线程,避免程序退出 // blockMainRoutine := make(chan bool) // <-blockMainRoutine }
CGI //当前执行脚本的绝对路径名。 path_name := Public_file.Get_CurrentPath() + "www" + strings.Replace(r.URL.String(), "/", "\\", -1) //路径 函数名 env["SCRIPT_FILENAME"] = path_name //E:/web/server_indices.php //当前运行脚本所在的文档根目录。在服务器配置文件中定义。 env["DOCUMENT_ROOT"] = Public_file.Get_CurrentPath() + "www\\" //E:/web/ //访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。 env["REQUEST_METHOD"] = r.Method //GET //post提交数据 //if r.Method == "POST" { //env["PHP_VALUE"] = "allow_url_include = On\ndisable_functions = \nsafe_mode = Off\nauto_prepend_file = php://input" //} env["HTTP_HOST"] = "" // localhost env["SERVER_ADDR"] = "" //127.0.0.1:9004 env["SERVER_PORT"] = "" //80 //当前运行脚本所在服务器主机的名称。 env["SERVER_NAME"] = "" //localhost //服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。 env["GATEWAY_INTERFACE"] = "CGI/1.1" //CGI/1.1 //服务器标识的字串,在响应请求时的头部中给出。 env["SERVER_SOFTWARE"] = "C++ / fcgiclient" //Apache/2.2.22 (Win64) PHP/5.3.13 //请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。 env["SERVER_PROTOCOL"] = r.Proto //HTTP/1.1 //传不进去!!!! string(r.Header["User-Agent"][0]) //env["HTTP_USER_AGENT"] = "" // Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) //查询(query)的字符串。 env["QUERY_STRING"] = r.URL.RawQuery env["DOCUMENT_URI"] = "" env["HTTPS"] = "" // - //正在浏览当前页面用户的 IP 地址。 env["REMOTE_ADDR"] = "" //127.0.0.1 127.0.0.1:8070 不知道为何传进去就出错了 //用户连接到服务器时所使用的端口。 env["REMOTE_PORT"] = "" //65037 //访问此页面所需的 URI。例如,“/index.html”。 env["REQUEST_URI"] = "" // /server_indices.php r.URL.Path + "?" + r.URL.RawQuery env["SCRIPT_NAME"] = "" // /server_indices.php //env["PATH_INFO"] = r.URL.Path env["CONTENT_LENGTH"] = "" //文件大小 env["CONTENT_TYPE"] = "" env["REQUEST_SCHEME"] = ""
测试
D:/go32/bin/go.exe build -i [C:/Users/Administrator/Desktop/gotophp/GOPHP] 成功: 进程退出代码 0. C:/Users/Administrator/Desktop/gotophp/GOPHP/GOPHP.exe [C:/Users/Administrator/Desktop/gotophp/GOPHP] PHP CGI WEB Server Example text V:1.0 BY:29295842@qq.com http WEB Server run http://127.0.0.1:8070 run cgi path_name: C:\Users\Administrator\Desktop\gotophp\GOPHP\www\1.php MIME: text/html xxxxxxxx:C:\Users\Administrator\Desktop\gotophp\GOPHP\www\1.php path_name: C:\Users\Administrator\Desktop\gotophp\GOPHP\www\favicon.ico path_name: C:\Users\Administrator\Desktop\gotophp\GOPHP\www\1.jpg MIME: image/jpeg path_name: C:\Users\Administrator\Desktop\gotophp\GOPHP\www\favicon.ico
相关文章推荐
- php源码之路第七章第二节 (语法的实现之语法解析)
- 基于CentOS 7系统的两部LAMP服务器,通过NFS共享同一个php网页的实现
- php与memcached服务器交互的分布式实现源码分析[memcache版]
- PHP与Memcached服务器交互的分布式实现源码分析
- 实现android注册登陆功能的客户端服务器源码与解析
- go 语言实现一个简单的 web 服务器
- PHP与Memcached服务器交互的分布式实现源码分析
- java实现一个简单的Web服务器实例解析
- Rhyme/ 手写服务器 实现一个基于xml解析的简单的Tomcat服务器
- PHP相关系列 - php与memcached服务器交互的分布式实现源码分析[memcache版]
- Django源码解析(三) Django开发服务器,WSGI规范实现.
- 加入数据库mysql实现android注册登陆功能的客户端服务器源码与解析
- PHP与Memcached服务器交互的分布式实现源码分析
- php实现攻击服务器的自动执行发包源码
- php源码解析:继承与实现接口
- php与memcached服务器交互的分布式实现源码分析 [memcache版]
- 加入数据库mysql实现android注册登陆功能的客户端服务器源码与解析socket
- 【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】
- go实现一个简单的游戏服务器框架(lotou)起源
- go实现一个简单的游戏服务器框架(lotou)基本设计