CGI C编程
来源:互联网 发布:phxsql mysql 5.7 编辑:程序博客网 时间:2024/06/06 03:55
CGI(common gateway interface)通用网关接口。CGI程序是指运行在web服务器上的程序,一般用来完成web网页中的表单处理,数据库查询与传统应用系统集成等工作。
举个例子来说明CGI程序到底是干嘛用的,当你在某网站注册用户的时候,你需要填写一系列的表单,当你点击提交,前端需要将你的用户名,密码等信息提交给server,server会查询数据库是否重名以及做各种检测工作,然后返还一个注册成功或者失败的消息给你。通过CGI程序你就能接受web前端提交的信息,并做相应的处理,然后将结果返还给前端。以上就是CGI程序通常所做的工作。
它是如何实现的呢??<from name="ace's from" action="http://www.ace.com/cgi-bin/ace.cgi" method=GET>如果你想传递一些参数给CGI程序呢?<from name="ace's from" action="http://www.ace.com/cgi-bin/ace.cgi?arg1+arg2+arg3" method=GET>只需在路径后加?再加上参数即可,参数之间用+隔开。
我在这里先列一下CGI的环境变量:
环境变量
意义
SERVER_NAME
CGI脚本运行时的主机名和IP地址.
SERVER_SOFTWARE
你的服务器的类型如: CERN/3.0 或 NCSA/1.3.
GATEWAY_INTERFACE
运行的CGI版本. 对于UNIX服务器, 这是CGI/1.1.
SERVER_PROTOCOL
服务器运行的HTTP协议. 这里当是HTTP/1.0.
SERVER_PORT
服务器运行的TCP口,通常Web服务器是80.
REQUEST_METHOD
POST 或 GET, 取决于你的表单是怎样递交的.
HTTP_ACCEPT
浏览器能直接接收的Content-types, 可以有HTTP Accept header定义.
HTTP_USER_AGENT
递交表单的浏览器的名称、版本 和其他平台性的附加信息。
HTTP_REFERER
递交表单的文本的 URL,不是所有的浏览器都发出这个信息,不要依赖它
PATH_INFO
附加的路径信息, 由浏览器通过GET方法发出.
PATH_TRANSLATED
在PATH_INFO中系统规定的路径信息.
SCRIPT_NAME
指向这个CGI脚本的路径, 是在URL中显示的(如, /cgi-bin/thescript).
QUERY_STRING
脚本参数或者表单输入项(如果是用GET递交). QUERY_STRING 包含URL中问号后面的参数.
REMOTE_HOST
递交脚本的主机名,这个值不能被设置.
REMOTE_ADDR
递交脚本的主机IP地址.
REMOTE_USER
递交脚本的用户名. 如果服务器的authentication被激活,这个值可以设置。
REMOTE_IDENT
如果Web服务器是在ident (一种确认用户连接你的协议)运行, 递交表单的系统也在运行ident, 这个变量就含有ident返回值.
CONTENT_TYPE
如果表单是用POST递交, 这个值将是 application/x-www-form-urlencoded. 在上载文件的表单中, content-type 是个 multipart/form-data.
CONTENT_LENGTH
对于用POST递交的表单, 标准输入口的字节数.
web前端又是如何将表单内的数据提交给CGI server的呢?主要有两种方式GET和POST:
1.GET
当你使用这种方式时,所有的数据和参数都是存储在环境变量QUERY_STRING中的,CGI通过getenv("QUERY_STRING")来获取数据,然后进行解析。GET有一定得限制,当数据超过1024字节的时候,你必须选择POST方式来提交数据。
2.POST
当你使用这种方式时,CGI程序通过stdin标准输入来获取数据。但是这种方式没有类似于EOF的结束标记。所以我们必须先通过环境变量CONTENT_LENGTH来获取数据的长度。然后读取准确的数据。
CGI程序与web前端交互的方式有四种:
从环境变量获取数据
从标准输入获取数据
标准输出到文件或前端
标准错误输出
CGI又有两种工作模式:一种是普通的CGI,另一种是FASTCGI。这里我转载一篇文章来说明CGI与FASTCGI的区别及FAST的工作原理:
FastCGI是什么:是一个可伸缩、高速的在web server和脚本语言间通迅的接口
CGI工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程(如php-cgi.exe),当CGI满足要求后,WEB服务器就杀死这个进程。
所以,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以 提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI的官方站点在http://www.fastcgi.com
FastCGI的工作原理是:
1、Web Server 启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】。
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。启动php-cgi FastCGI进程时,可以配置以TCP和UNIX套接字(socket)两种方式启动。
3、当客户端请求到达Web Server时,Web Server将请求采用TCP协议或socket方式转发到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程php-cgi.exe)。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
4、FastCGI子进程php-cgi.ex完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 而在CGI中,php-cgi子进程在此便被退出了。
在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接可以工作。
可以令PHP程序从原来的请求-启动-运行到请求-运行模式,大大提高了脚本的执行效率,减轻服务器的负荷。
- 【C/C++】CGI编程
- CGI C编程
- [Linux C]CGI编程
- C语言cgi编程入门
- C语言CGI编程入门(一)
- C语言CGI编程入门(一)
- CGI编程---CGI环境变量
- CGI编程
- CGI编程
- CGI编程
- CGI编程
- CGI 编程
- CGI编程
- CGI编程
- CGI编程
- CGI编程
- CGI编程
- linux c 编程之四 way-board.cgi 漏洞扫描器
- 使用lacewing解决HTTP+XML接口问题
- 毛路:有些事,让别人相信就行了
- ExtJS4新发现08_改变字体大小提示
- Hadoop体系结构指南
- 快速学习html、css的经典笔记(不看后悔偶)
- CGI C编程
- 主主循环同步配置
- strtok和strtok_r的源代码分析
- AdaBoost中利用Haar特征进行人脸识别算法分析与总结1——Haar特征与积分图 .
- 打印给定数目括号的组合
- ASP.NET MVC3学习心得-----视图和模型
- Class.forName()的资料搜集
- 2012来了,IT还得发展
- 读《哥德尔,艾舍尔,巴赫-集异壁之大成》