一直听说apache的cgi比php运行要快,c比php快这个是很对的,perl写的html比较古老。具体有什么优势,以后再看。
现在我想要用cgi,怎么办?
有两种方式,用c还是perl,反正现在都不知道,两种都试试。
我的服务器是apache。我要使用cgi。就要找是否已经装载了cgi模块。
找到httpd.conf里面的
LoadModule cgi_module modules/mod_cgi.so //一定要加载
然后设置cgi运行目录,当然可以直接指定一个目录使其php,cgi都能用,但现在才开始,纯粹点。
ScriptAlias /cgi-bin/ "D:/Apache2.2/cgi-bin/" 这个一般文件里有了,自己改下地址
这句话是说在根目录下的cgi-bin这个目录就是访问的D:/Apache2.2/cgi-bin/里面的文件。
下面设置cgi目录的权限,能运行的cgi程序的后缀名可以不在这儿设置,在这儿设置就只在这个文件夹下用这几个后缀名了。重要的是要使这个目录能运行cgi程序,加入Options +ExecCGI
<Directory "D:/Apache2.2/cgi-bin">
AllowOverride Options
Order allow,deny
Allow from ALL
Options +ExecCGI
# AddHandler cgi-script .cgi .pl .exe
</Directory>
在<IfModule mime_module>里面加入下面的,所有能运行的文件后缀都放这里,找着方便。
AddHandler cgi-script .exe .pl .cgi
后面就是写cgi,写一个cgi要运行,如果是c写的编译成exe后,就不需要解析器来解析了,应该可以直接用。但我用ie后发现老是会下载下来,后来发现是迅雷监视了浏览器,一出现exe文件就跳出下载框。后来直接编译成cgi为后缀的文件了。写cgi的格式查了下apache手册,上面说主要是两个问题,1、最开始要输入你想显示的mime类型,这里一般是html,有时候也可能是一张图片,第一点很重要没有这个页面显示错误;2、显示格式最好是html格式或者网页能显示的格式,写成html最好,简单点直接输出字符串也行,反正前面一点已经告诉浏览器输出的是一个html了,也能输出了。
用c写的cgi例子 保存为a.cgi,放到D:/apache2.2/cgi-bin/里面:
#include <stdio.h>
int main(){
printf("content-type:text/html/n/n");
printf("<html>");
printf("<head><title>welcome</title></head><body>");
printf("hello,boy!<br />");
printf("</body><html>");
}
使用http://localhost/cgi-bin/a.cgi 访问得到
hello,boy!
c里面不能在写html的时候使用换行,只能一行一行的输出,所以还是很麻烦的。
*******************************************************************************************
使用perl写cgi
这个和以往的cgi实现方式应该还是有些不一样,以往的方式是先安装perl,然后用perl去生成一个apache的模块,加载到apache中,然后就能用了。现在简单点实现,由于前面已经加载了cgi模块(见前面),所以apache能使用cgi的方式来接入perl。不过这里就需要有个perl解析器了,因为perl的脚本和c编译后的不一样,c编译后的是应用程序了,但perl的还是脚本。所以在编写perl的cgi的时候一般会先告诉脚本是使用哪里的解析器来解析的。这里就需要装perl软件,自己去下一个吧。我的装在d盘的。我的是#!D:/Perl/bin/perl
其中的perl.exe在D:/Perl/bin/里面,所以这样写。当然还可以写成#!D:/Perl/bin/perl.exe
两种方式我都试了,都可以。perl支持mysql,在cmd里面ppm install DBD::mysql
下面是perl写的一个脚本保存为a.pl到d:/apache2.2/cgi-bin/:
#!D:/Perl/bin/perl.exe
print "Content-type:text/html;charset=utf-8/n/n";
print "<html>
<head>
</head>
<body>
<font color='red'>hello boy!!</font><br />
<input type='button' value='按下去。。。' onclick='alert(/"你按过了!!/")' />
</body>
<html>";
http://localhost/cgi-bin/a.pl运行结果:
hello boy!!
发现和c写的区别了吧。这个可以换行写,不影响显示。第一次搞cgi就到这里吧,好不容易一个周末呢。