CGI按照百度百科的定义,如下:

  CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。
  
  上面这一段话第一次接触cgi,可能不懂到底什么意思,下面举一个例子方便理解。
  以Apache为例,在配置文件httpd.conf中搜索cgi关键字,下面是主要的配置
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
</IfModule> <IfModule cgid_module>
#Scriptsock cgisock
</IfModule> <Directory "/usr/local/apache/cgi-bin">
AllowOverride All
Options None
Require all granted
</Directory>

  进入Apache下面的cgi-bin目录,创建一个文件,文件名为index.cgi,文件扩展名为.cgi,这个和php文件的扩展名是.php是一样的。

  index.cgi的内容如下:

#!/bin/bash
#index.cgi echo "Content-Type:text/html;charset=utf-8"
echo echo "hello world"

  然后在浏览器中访问localhost/cgi-bin/index.cgi,你就会看到结果如下:

  然后将index.cgi的内容改一下:

#!/bin/bash
#index.cgi echo "Content-Type:text/html;charset=utf-8"
echo mysql="mysql -uroot -proot"
sql="show databases"
$mysql -e "$sql"

  浏览器运行如下:

  

  其实,从上面的例子中,你就会得出一点结论,cgi就和php类似,只不过php文件中使用的使用php的语法,cgi中使用的shell命令,但是,都可以通过浏览器来运行脚本,获得结果。

  现在看一下CGI的定义:CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。

  是不是有点理解了。

 
 

最新文章

  1. nginx + tomcat配置负载均衡
  2. Emit学习(2) - IL - 常用指令介绍
  3. windows 2008 r2 下面搭建 iis+sql server +php5.6 环境遇见的一些问题记录一下
  4. XP明年就被停止技术支持,这会带来什么?谈谈如何做决策
  5. Weka 3: Data Mining Software in Java
  6. AP_HZ Party和Supplier、Bank表关系详解
  7. VMware 11 设置U盘启动,总是找不到physicalDrive1
  8. bash shell 合并文件
  9. 在Linux系详解Linux bash中的变量
  10. Android 的平台碎片化问题
  11. Python的核心数据结构
  12. Vue.js学习
  13. Ehcache 3.7文档—基础篇—Tiering Options
  14. Linux——目录结构思维导图
  15. 有序数组每个数平方后,不同数字的个数?O(n)
  16. vuejs监听苹果iphone手机键盘事件
  17. PAT 1052 卖个萌 (20)(代码+思路)
  18. cocos2d-x 3.0 将cpp-tests编译成Android版本号APK文件
  19. Android关于注解那点事(二)
  20. HDU 3689 Infinite monkey theorem(DP+trie+自动机)(2010 Asia Hangzhou Regional Contest)

热门文章

  1. 数据挖掘---Pandas的学习
  2. 安全之路 —— 利用APC队列实现跨进程注入
  3. php中jpgraph库的使用
  4. LeetCode算法题-Reverse Bits(Java实现)
  5. 关于IDE的选择
  6. JSP内置九个对象Request请求对象
  7. centos7下安装docker(15.4跨主机网络-flannel)
  8. spring jwt springboot RESTful API认证方式
  9. 五.JQuary 实例
  10. 极端恢复时用到的几个隐藏参数 Oracle hidden corruption recovery parameters