一直聽說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='按下去。。。' οnclick='alert(/"你按過了!!/")' />
</body>
<html>";
http://localhost/cgi-bin/a.pl運行結果:
hello boy!!
發現和c寫的區別了吧。這個可以換行寫,不影響顯示。第一次搞cgi就到這裏吧,好不容易一個週末呢。