准備Linux和Apache
我在/var/www/cgi-bin/下建一個文件get.c
#include <stdio.h> #include <stdlib.h> int main(void) { char *data; long m,n; printf("Content-type: text/html\n\n"); printf("<TITLE>Mult Result</TITLE>"); printf("<H3>Mult Result</H3>"); data = getenv("QUERY_STRING"); if(data == NULL) printf("<P>Don't transfer data or transfer error"); else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2) printf("<P>Error, invalid format, data have to number"); else printf("<P>%ld and %ld result: %ld", m, n, m * n); printf("<br><h>Thank you to use the zongshuai webserver</h1>"); return 0; }
然后編譯
gcc -o get.cgi get.c
編譯完后會生成一個get.cgi文件
然后我配置Apache,我是這么配置的(我的Apache是2.4.23版本)
將LoadModule cgid_module modules/mod_cgid.so前面的#去掉
添加addHandler cgi-script .cgi .pl
然后配置虛擬空間
<VirtualHost *:80> ServerName cgi.xxx.com ServerAdmin admin@xxx.com DocumentRoot /var/www/cgi-bin <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted </Directory> ErrorLog "logs/error.cgi.log" CustomLog "/var/www/cgi.log" combined </VirtualHost>
然后重啟Apache
在瀏覽器中輸入cig.xxx.com/get.cgi?m=3&n=7
輸出如下內容:
Mult Result
3 and 7 result: 21
Thank you to use the zongshuai webserver
以下轉自網絡
Linux CGI編程基礎
1.為什么使用CGI?
如前面所見,任何的HTML均是靜態網頁,它無法實現一些復雜的功能,而CGI可以為我們實現。如:a.列出服務器上某個目錄中的文件,對目錄中的文件進行操作;b.通過CGI實現串口通訊;c.實現數據庫接口;d.實現從攝像頭讀取一張圖片顯示在網頁上… 等等
2. CGI是什么?
CGI全稱是 Common Gate Intergace ,在物理上,CGI是一段程序,它運行在Server上,提供同客戶端 Html頁面的接口。
3. CGI編程語言
你可以用任何一種你熟悉的高級語言, C,C++,C shell,Perl和VB都可以。
4. CGI的安全性
實際上CGI是比較安全的,至少比 那些沒有數字簽名的ActiveX控件要安全的多。除非你有意在程序里加入了破壞Server的命令, 否則一般不會有什么嚴重的后果。
簡單的說來,CGI是用來溝通HTML表單和服務器端程序的接口(interface)。說它是接口,也就是說CGI並不是一種語言,而是可以被其他語言所應用的一個規范集。理論上講,你可以用任何的程序語言來編寫CGI程序,只要在編程的時候符合CGI規范所定義的一些東西就可以了。由於C語言在平台無關性上表現不錯(幾乎在任何的系統平台下都有其相應編譯器),而且對大多數程序員而言都算得上很熟悉(不像Perl),因此,C是CGI編程的首選語言之一。這兒我們介紹的,就是如何使用C來編寫CGI程序。
作為CGI編程的最為簡單的例子,就是進行表單的處理。因而在這篇文章中,我們主要介紹的就是如何用C來編寫CGI程序來進行表但處理。
5.傳送方法:
所謂方法是指調用CGI程序的途徑。事實上,要執行程序時,你用一種方法向服務器提出請求,此請求定義了程序如何接受數據。 下面介紹常用的兩種方法:GET和POST 1.GET 當使用這種方法時,CGI程序從環境變量QUERY_STRING獲取數據。
QUERY_STRING 被稱為環境變量,就是這種環境變量把客戶端的數據傳給服務器。為了解釋和執行 程序,CGI必須要分析(處理)此字符串。
POST 使用POST方法時,WEB服務器通過stdin(標准輸入),向CGI程序傳送數據。服務器 在數據的最后沒有使用EOF字符標記,因此程序為了正確的讀取stdin,必須使用CONTENT_LENGTH 。當你發送的數據將改變
Web服務器端的數據或者你想給CGI程序傳送的數據超過了1024 字節,這是url的極限長度,你應該使用POST方法。 實現方法:
GET實現方法
<form name=“guyi‘s form” action=“http://www.yourname.com/cgi/your.cgi” method=GET>
POST實現方法:
<form method=post>