教你用shell写CGI程序
以前用shell写过一些cgi的例子。今天向大家介绍一下。
CGI是一种接口的标准,并不区分编程语言,也就是说,CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。CGI会将标准输出重定向到给http的response,返回给浏览器。
CGI严格的介绍,公共网关接口CGI(Common GatewayInterface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
……
言归正传,下面详细介绍一下如何使用shell来写一个CGI。
对于CGI而言,最主要就是接收到用户的请求,从请求中,解析出get或者post方法传递过来的参数。这点,我认为也是对于初学者最麻烦的地方,这里提供一个已经完成这种功能的脚本—proccgi.sh(稍后会提供下载的网址)。这个脚本可以直接解析出get和post方法传过来的数据。
使用方法:
在CGI的shell脚本中调用eval `./proccgi.sh $*`语句,然后使用“$FROM_”和参数的key,就可以获得参数的值了,如task_id=”$FORM_taskid”。

上图就是一个最简单的shell的CGI程序了,从前台将taskid=XXXX,传给CGI程序。CGI中调用了proccgi.sh脚本,将taskid的值解析出来存放到变量FROM_taskid中。这样,就已经拿到taskid的值了。接下来print task_id,是将task_id的值输出到标准输出,到此CGI程序就全部结束了,CGI会将print到标准输出的内容全部当作http的response,返回给浏览器。
有人可能奇怪,这明明是个简单的shell的脚本。怎么就可以当作CGI来用呢。前面已经说过,CGI是一个接口的标准,只要程序的输出到标准输出的内容,第一行是“Content-type:text/html;charset=UTF-8\n”这种形式的,就可以当作CGI来使用。不相信的朋友,可以用这种语言试试。当然,写好的CGI必须放在apache的可执行目录下面啊。不然无法通过url访问到这个CGI。
最后关于CGI的命名,在公司,写完CGI之后,一般会将名字修改成XXXX.cgi。不管是脚本还是二进制程序,都可以这样修改它。其实这并没有什么规定,保留.exe、.sh或者.py,CGI照样可以执行。
其实说到底CGI就是后台一个可执行程序。

原创文章,转载请注明: 转载自成长的企鹅
本文链接地址: 教你用shell写CGI程序
关于我:成长的企鹅简介
教你用shell写CGI程序的更多相关文章
- C语言写CGI程序
一.CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给 ...
- 用 c 写 CGI 程序简要指南
文章摘要: CGI规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互.CGI程序可以用任何程序设计语言编写,如Shell脚本语 ...
- cgic 写CGI程序
CGIC是C语言CGI库函数,用于编写CGI程序 CGIC 主要完成以下功能: * 对数据进行语法分析 * 接收以 GET 和 PSOT 两种方式发送的数据 * 把 FORM 中的不同域连接成连续的串 ...
- C、Shell、Perl基于Tomcat开发CGI程序环境配置
基于Tomcat7.0版本号配置CGI开发环境,步聚例如以下: 以我的Tomcat7安装文件夹为例:TOMCA_HOME = /Users/yangxin/Documents/devToos/java ...
- 写一个CGI程序并运行
准备Linux和Apache我在/var/www/cgi-bin/下建一个文件get.c #include <stdio.h> #include <stdlib.h> int ...
- 一道面试题:用shell写一个从1加到100的程序
[试题描述] 请用shell写一个简短的程序,实现1+2+...+100的功能. [程序] 方法一: #!/bin/bash ..} do let sum+=$i done echo $sum 方法二 ...
- 教你在你的应用程序中扩展使用dynamic类型
教你在你的应用程序中扩展使用dynamic类型 相信大家在开发中经常会接触到mvc中的ViewBag,有心的同学会,发现这就是一个dynamic类型,查看源码一谈究竟,本文也是根据dynamic来扩展 ...
- 第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′
第一个CGI程序 ----完全就是普通的C语言嘛 '(*∩_∩*)′ PainterQ 2017年5月14日 上一篇博文里面叙述了Apache的安装和配置方法,恍恍惚惚我就拥有了自己的第一个http ...
- Hello World! 这是我的第一个 CGI 程序
Hello World! 这是我的第一个 CGI 程序上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上.在这里,值得注意一点,第一行输出 Content-ty ...
随机推荐
- ACM之跳骚---ShinePans
Description Z城市居住着非常多仅仅跳蚤.在Z城市周六生活频道有一个娱乐节目.一仅仅跳蚤将被请上一个高空钢丝的正中央.钢丝非常长,能够看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有 ...
- crawler_x-requested-with 请求头
在分析微博热点话题时 拿到异步请求后,有个关键参数 x-request-with 不携带不给正确响应 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步): 两种请求在请求的He ...
- Swift中文教程(四)--函数与闭包
原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...
- Linux C/C++计划Shell命令大杂烩(1)
1, 请参见发行信息 cat /etc/issue 2, 查看内核版本号 uname -r 查看内核版本号 uname -p 查看处理器类型32bit/64bit uname -n 查看网络主机名(o ...
- idea类似eclipse鼠标技巧java api信息
版权声明:本文博客原创文章,博客,未经同意,不得转载.
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...
- WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...
- sql分页查询公式
分页查询公式: select top PageRow(每页显示的数据行数) from 表名 where 主键 not in(select top PageRow*(当前页数-1) 主键 from ...
- AppiumDriver升级到2.0.0版本引发的问题--Cannot instantiate the type AppiumDriver
1. 问题描述和起因 在使用Appium1.7.0及其以下版本的时候,我们可以直接使用如下代码来创建一个AppiumDriver实例进行对安卓设备的操作. driver = new AndroidDr ...
- yii性能调节
网络应用程序的性能受很多因素的影响.数据库存取,文件系统操作,网络带宽等都是潜在的影响因素. Yii 已在各个方面减少框架带来的性能影响.但是在用户的应用中仍有很多地方可以被改善来提高性能. 1. 开 ...