- 浏览: 795276 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
aliang032:
文章很赞,有几个缺点:1、是你的服务端是单进程的,如果进程挂了 ...
php socket编程实例详解 -
最佳蜗牛:
最佳蜗牛 写道是不是缺少了一个toolbar.Realize( ...
wxPython写的简易编辑器(原创) -
最佳蜗牛:
是不是缺少了一个toolbar.Realize()?
wxPython写的简易编辑器(原创) -
最佳蜗牛:
2.7.3版本里不能显示工具栏的图标
wxPython写的简易编辑器(原创) -
sogo6:
我怎么安装的也不行? 裸奔啊。。。。。
让TextMate支持中文显示
No Response
有时对于一个CGI脚本也许一点没有输出. 有时你只是要从用户那儿收集点信息. 你就不用再调用一个新文本, 也不用输出结果或打开一个存在的文件. 在浏览器上的屏幕还是那个样子.很幸运, 这一切很容易. 你只要输出下面这个命令即可(后面跟一个空行):
echo Status: 204 No Response这个Status头部提供状态码给服务器(并且也给浏览器). 特别的204将传递给浏览器,如果能识别它,它将什么也不做.
echo
<note></note>
尽管无响应是一个官方HTTP规定的一部分,但也并不是适合所有的浏览器,也许会产生奇怪的结果,那你要多试验试试看啦.
处理表单的脚本
今天,大多数CGI脚本是用来处理表单输入的. 这个过程大致象上面说阐述的一样,但还是有些不同,比如CGI脚本只要被调用;数据怎样从服务器被发向浏览器.记住, 大多数表单有两个部分: HTML的表单格式;处理表单数据的CGI脚本. 这个CGI脚本使用标签 属性调用的.
表单形式和表单脚本
正如上面所说,由于表单有两个部分. 如下:这个ACTION属性包含着处理表单的脚本:
在这个表单中, 每个输入区都有一个NAME的属性, 用来称呼表单元素. 当这个表单数据被递交给你在ACTION中定义的CGI脚本, 这样这些name和输入内容被作为一个数字或字符传递给脚本.GET 和 POST
表单从浏览器发给服务器有两种方法. GET 和 POST.我们上面谈论的方法,实际是GET,它将数据打包放置在环境变量QUERY_STRING中作为URL整体的一部分传递给服务器。
POST做很多类似GET同样的事情, 不同的地方就是它是分离地传递数据给脚本. 你的脚本通过标准输入获取这些数据. (有些Web服务器是存储在临时文件中.) 这个QUERY_STRING环境变量将不再设置.
那你用那个方法呢? POST是个安全的方法, 尤其如果你的表单中有很多数据的话. 当你用GET, 这个服务器就分配变量QUERY_STRING给所有的表单数据, 但是这个变量可存储量是有限的. 换句话说,如果你有很多数据但是你又用GET,你会丢失很多数据.
如果你用POST, 你可以尽可能多地使用数据, 因为这些数据从来也不分配到一个变量里.
URL 编码
URL 编码是一种浏览器用来打包表单输入的格式. 浏览器从表单中获取所有的name和其中的值 ,将他们作为name/value参数编码, 移去那些不能传送的字符, 将数据排行等等,这些还取决于你用GET还是POST?作为URL的一部分或者分离地发给服务器. 不管哪种情况, 在服务器端的表单输入格式样子象这样:theName=Ichabod+Crane&gender=male&status=missing&headless=yesURL编码遵循下列规则:
- 每对name/value由&符分开.
- 每对来自表单的name/value由=符分开. 如果用户没有输入值给这个name,那么这个name还是出现,只是无值(象这样 "name=").
- 任何特殊的字符(就是那些不是简单的七位ASCII,如汉字) 将以百分符%用十六进制编码. 当然也包括象 =, &, 和 % 这些特殊的字符.
- 在输入区中的空格将以加号+显示.
这里介绍一个叫uncgi的解码程序, 你可以从http://www.hyperion.com/~koreth/uncgi.html. 得到原码,安装在你自己的cgi-bin目录下.
练习3: 告诉我你的名字.
让我们以这个例子来说明,如图5.
这个输入被发给脚本, 然后发回显示一个hello的信息(见图.6).
如果你在姓名输入处不输入任何东东,会怎样?见图7.
修改表单的HTML
现在我们举一个真实的例子:如果你在用uncgi从input中解码, 情况有点不同. 为了是uncgi正常工作, 你首先必须调用uncgi , 如果uncgi是个目录,加上实际的脚本名, 象这样:
这样,你不必修改表单中原始的HTML; 原始的HTML可以工作得很好.
脚本
处理表单输入的是个CGI脚本, 让我们来仔细地看看。在脚本中第一步是解码,在这个例子中, 我们已经使用uncgi解码输入数据, 实际这个表单已经为你做好解码. 通过建立一个uncgi的目录,一旦表单递交给服务器,服务器会自动进行解码,这样,所有的name/value已经准备就绪等待你的使用.
现在,一个例子开始部分假设是下面这样:
echo Content-type: text/html接下来,有两种情况要处理:一件是处理用户不输入名字的情况,一个是如果输入了向他们说hello.
echo
echo "<html></html><head></head>"
echo ""
echo ""
echo ""
这个Name元素的值, 是包含在WWW_theName环境变量中. 用一个简单的测试命令(-z), 你能查看环境变量是否是空的还是包括相应的输出值:
if [ ! -z "$WWW_theName" ]; then最后增加一个连接"go back" . 用来返回:
echo "Hello, "
echo $WWW_theName
else
echo "You don't have a name?"
fi
echo ""
echo ""
问题
这里是使用CGI脚本比较普遍的问题:- 脚本内容只显示不执行.
你正确配置了你的服务器运行CGI脚本? 你的脚本是放置在cgi-bin目录中吗?如果你的服务器允许带.cgi扩展名的CGI运行, 你的脚本文件名的扩展名是这样吗? - Error 500: Server doesn't support POST.
解答还是如上一条一样,然后你用命令行执行你的CGI,可以正常运行吗?是否有错误?. - Document contains no data.
确定你的头部行和数据部之间有一空行. - Error 500: Bad Script Request.
确定你的脚本是可执行的(在UNIX, 用chmod +x 你的脚本.cgi). 在从浏览器运行之前,你应当从命令行运行你的脚本,如果客户端是win95,可以用telnet登陆你的服务器,执行命令行,当然必须了解UNIX命令.
CGI变量
表2 总结那些环境变量.- <lh></lh>
表2. 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递交的表单, 标准输入口的字节数. |
表单输入的解码程序
目前有两个程序: 通用目的的uncgi, 和cgi-lib.pl, 这是个Perl库,用于perl编写的CGI脚本.当然也有表单上载时可以解码的程序,很少。
uncgi
说明原码可以从 http://www.hyperion.com/~koreth/uncgi.html获得。cgi-lib.pl
这是由Steve Brenner编写的, 帮助你管理输入. 他能从GET和POST获取输入并且放置在一个Perl列表或阵列中. 更新的版本也能处理来自表单的文件上传. 从这儿可以得到信息与原码 http://www.bio.cam.ac.uk/cgi-lib. 如果你决定用Perl语言处理你的表单输入,cgi-lib是个很好的库.为了使用cgi-lib.pl,你通常要这样写:
#!/usr/lib/perl
require 'cgi-lib.pl';cgi-lib中尽管有很多子程序, 最重要的是ReadParse子程. ReadParse 读取输入方便地将name/value储存在一个Perl阵列中. 在你的Perl脚本中通常是这样调用的:
&ReadParse(*in);此例中,阵列名是in, 可以随便取名的.
在表单输入解码后, 你能读取和处理这个name/value,方法是象下面这样:
print $in{'theName'};这个将显示名字name是theName的值value.
如果你有多个用同样名字的name对, cgi-lib.pl用(\0)分隔多个名字. 这样可以正常处理你的脚本.
解码上传的文件输入
基于表单的文件上传需要不同的表单输入,有一些程序可以对其进行解码。cgi-lib.pl 后来版本可以很好支持, 在http://www.bio.cam.ac.uk/cgi-lib/ 了解更多的情况.
另一个处理用Perl编写的CGI地址是 http://valine.ncsa.uiuc.edu/cgi_docs.html .
自己做
找专门书籍学习吧: ftp://ds.internic.net/rfc/rfc1867.txt.非解剖的脚本头部
按照本书阐述,大多数情况可以正常操作,在一些情况下不是这样的,你可以翻阅说明书了解。
可以搜索该索引。请键入要搜索的关键字:
脚本
为了在CGI中完成讨论组, 我们看看叫
可以搜索该索引。请键入要搜索的关键字:
的搜索. 这是早期在浏览器中用来向服务器发出搜索关键字的办法,参看以前的资料。
总结
CGI脚本, 有时叫服务器端脚本或网关脚本。 在internet上有很多免费资源,你可以搜索下载读懂他们,当然都是英文的,如果你下决心翻译他们(可能更加强理解). 这样一举两得啊.注意:上述程序可以用ultra edit来编辑,注意转换UNIX格式 ,必须采用UNIX格式存盘,再上载,用telnet登陆,在命令行键入perl sample.pl,看有无bug,再 在浏览器中调用。CGI程序包括放置CGI的目录一定要改属性为777, 要写入的HTML文件也要改属性为777.
现在网上有很多免费的cgi,基本可以满足一般需求,请到这个网址查询你要的cgi:http://www.itm.com/cgicollection/
本入门说明可以自由拷贝,但请不要删除板桥斋字样,到底我花了一些时间在上面,你我都是各取所需嘛:-)。
发表评论
-
基于libmemcached,php扩展memcached的安装
2011-03-29 18:23 1651一,为什么要装memcached扩展 memcached ... -
OpenCV和PHP的人脸识别技术
2011-03-15 00:52 4047OpenCV安装之前必须依赖的包:(请先安装好) pkgco ... -
php代码安全:增加这三行php代码的安全,性能和兼容性
2010-10-09 16:42 1313如何改进以下的这行php代码: <? echo(&q ... -
PHP代码安全:register_globals的设置off
2010-10-09 16:29 1411在PHP编码的时候,要考虑到很多安全问题,不然将可能被攻击。下 ... -
PHP 加速器:APC、eAccelerator、XCache比较
2010-09-29 11:24 2705一直想找一些关于PHP加速的文章,偶然看到杀 客 的这篇文 ... -
PHP APC 配置详解
2010-09-29 10:16 6527APC是Alternative PHP Cache的简称,是 ... -
安装PHP的Parsekit扩展
2010-09-29 09:54 1314安装PHP的Parsekit扩展 从http://pecl. ... -
PHP算法:折半查找法(又称二分查找法)
2010-09-26 13:12 2355二分查找又称折半查找 ,它是一种效率较高的查找方法。 ... -
PHP算法:直接插入排序
2010-09-26 12:56 1365直接插入排序(Straight Insertion Sort) ... -
PHP算法:冒泡排序与快速排序
2010-09-26 12:41 1898写一个排序算法,可以是冒泡排序或者快速排序,假设待排序对象是一 ... -
[转]PHP的错误报告error_reporting
2010-09-25 11:41 1579error_reporting 设定 ... -
PHP正则表达式:将1234567890转换成1,234,567,890 每3位用逗号隔开的形式
2010-09-25 10:52 1707“四项处理”的作用是与字符相匹配,然后根据是否能找到要匹配的字 ... -
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2010-09-25 10:19 4718PHP函数篇详解十进制、二进制、八进制和十六进制互相转 ... -
php socket通信的基础知识
2010-09-25 09:03 7477迷人而又让人容易糊涂的套接字(Sockets)。Sockets ... -
posix和perl标准的正则表达式区别
2010-09-25 08:29 5568正则表达式(Regular Expre ... -
php socket编程实例详解
2010-09-24 23:10 12627让我们以一个基本的例子开始---一个接收输入字符串,处理并返回 ... -
PHP SPL,遗落的宝石
2010-09-24 22:23 1191英文原文:http://www.rafae ... -
PHPER进阶必备知识:详解SQL性能优化十条经验
2010-09-17 22:02 8561.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ... -
mysql_fetch_array与mysql_fetch_row有什么区别?
2010-09-17 21:54 4050两种查询函数array / row区别 格式:mysql ... -
php 排序函数 sort、rsort、asort、arsort、ksort、krsort的区别
2010-09-17 18:43 34621,快速创建数组的函数range() 比如range()函数 ...
相关推荐
CGI脚本是什么? CGI脚本 怎样工作的? 一个简单的例子 我能用CGI脚本吗? 你的服务器配置允许CGI脚本吗? 你能编程吗? 你应该用什么编程语言? 你的服务器设置正确吗? 如果你的服务器不是UNIX系统呢? 解剖...
在这个过程中,我们将使用Nginx作为Web服务器,并通过fastCGI(Fast Common Gateway Interface)协议来执行CGI脚本。下面是详细的步骤: 1. **安装Nginx** 使用`apt-get`命令在基于Debian的系统(如Ubuntu)中安装...
【CGI脚本简介】 CGI(Common Gateway Interface)是一种标准,允许Web服务器与外部应用程序交互,从而生成动态网页内容。它使得开发者能够使用各种编程语言,如C、C++、Perl等创建Web应用程序。CGI脚本通常运行在...
本资源包含了一份关于CGI脚本的PDF文档和一个可能包含相关链接或资料的TXT文件。 CGI脚本的主要工作原理是,当用户通过Web浏览器发送请求到Web服务器时,服务器接收到请求后,会调用CGI程序,将请求数据传递给它。...
这个压缩包“计算机软件-编程源码-CGI脚本入门学习.zip”显然是一份用于初学者了解和学习CGI脚本编程的资料。 **CGI的原理** CGI为Web服务器提供了一个接口,当用户通过浏览器发送HTTP请求时,服务器接收到请求后会...
### CGI脚本入侵快速上手及脚本使用方法 #### 一、理解Shell与CGI **Shell**在计算机科学中通常指的是一个用户与操作系统之间的交互界面,它能够读取用户的命令并根据这些命令执行相应的操作。对于黑客或安全研究...
本教程详细介绍了CGI脚本的使用和概念,适合对Web服务器和脚本编程感兴趣的学习者。 **29.1 Web页面** Web页面是由HTML(HyperText Markup Language)标记组成的文档。当浏览器访问一个Web页面时,它解析HTML标记...
1. 用户通过浏览器访问一个带有CGI脚本的URL。 2. Web服务器接收到请求后,识别出需要执行CGI脚本。 3. 服务器创建一个新的进程来运行CGI程序,将请求信息作为环境变量传递给该程序。 4. CGI程序处理请求,可能涉及...
CGI 脚本使您的浏览器与用户能交互,为了在数据库中寻找一个名词,提供您写入的评论,或者从一个表单中选择几个条目并且能得到一个明确的回答。 CGI 脚本是什么? CGI 脚本简单地讲是个运行在 Web 服务器上的程序,...
fcgiwrap, CGI脚本的简单FastCGI包装 fcgiwrap信息:主页:作者:贡献者CGI脚本的简单FastCGI包装http://nginx.localdomain.pl/wiki/FcgiWrapGrzegorz Nosek <root@localdom
第6章 简单CGI脚本举例 第7章 编制脚本并设置Web服务器 第8章 修改CGI脚本 第9章 如何处理自定义图像映像 第10章 使用MIME 第四部分 使用CGI搜索引擎和数据库 第11章 为Web站点建立索引 第12章 使用WAIS与CGI 第13章...
内容翔实、材料丰富,从CGI的基本概念到复杂的CGI脚本的编写,循序渐进地引导读者成为CGI专家。从本书中读者可以学到如何开发CGI应用程序、创建搜索引擎、建立交互式HTML文档,编写数据库查询脚本、编写Web爬虫和...
在创建CGI程序时,DLL可以用于封装复杂的功能,例如数据库连接、加密解密等,使得CGI脚本能够调用这些功能而无需将所有代码都写在CGI脚本中。使用DLL的好处包括代码重用、减少内存占用和提高性能。在VB中,开发者...
在nginx下支持cgi脚本于支持node类似的,只要在nginx直接做个转发,转发到对应的cgi套接字就好。 使用Fcgiwrap Fcgiqwrap是另外一个CGI封装库,跟Simple CGI类似。 安装fcgiwrap apt-get install fcgiwrap 安装以后...
二、创建CGI脚本 1. 文件结构:通常,CGI脚本存放在Web服务器的`cgi-bin`目录下。在本例中,可能有一个名为`25_cgi.py`的文件,它就是我们的CGI脚本。 2. 脚本头部:CGI脚本需要告知Web服务器它是可执行的。在...
4. **环境变量**:介绍CGI脚本中常见的环境变量,如REQUEST_METHOD、QUERY_STRING、CONTENT_TYPE和CONTENT_LENGTH,这些都是CGI脚本获取请求信息的关键。 5. **错误处理和日志记录**:讲解如何在CGI脚本中处理错误...
你可以通过查看这些源码来学习如何与Boa服务器交互,以及如何编写简单的CGI脚本来处理HTTP请求。这包括如何获取HTTP头信息,如请求方法(GET、POST)、URL参数等,以及如何生成适当的HTTP响应。 为了优化Boa-cgi...
当用户通过浏览器发送请求到服务器,CGI脚本会被执行以处理这些请求,并返回动态生成的数据。在Linux环境下,CGI脚本通常用Perl、Python、C或PHP等语言编写,然后放在服务器的cgi-bin目录下。 在这个例子中,我们...
1. **理解CGI脚本的本质**:CGI脚本本质上是运行在Web服务器上的程序,可以由多种语言编写,如Perl、Python、C等。它们通常作为服务器与数据库或其他系统程序之间的桥梁。 2. **CGI脚本的工作流程**:当用户提交...