
- C++基礎
- C++首頁
- C++概述
- C++環境設定
- C++基本語法
- C++註釋
- C++ Hello World
- C++省略名稱空間
- C++常量/字面量
- C++關鍵字
- C++識別符號
- C++資料型別
- C++數值資料型別
- C++字元資料型別
- C++布林資料型別
- C++變數型別
- C++變數作用域
- C++多個變數
- C++基本輸入/輸出
- C++修飾符型別
- C++儲存類
- C++運算子
- C++數字
- C++列舉
- C++引用
- C++日期和時間
- C++控制語句
- C++決策
- C++ if語句
- C++ if else語句
- C++巢狀if語句
- C++ switch語句
- C++巢狀switch語句
- C++迴圈型別
- C++ while迴圈
- C++ for迴圈
- C++ do while迴圈
- C++ foreach迴圈
- C++巢狀迴圈
- C++ break語句
- C++ continue語句
- C++ goto語句
- C++建構函式
- C++建構函式和解構函式
- C++複製建構函式
C++網頁程式設計
什麼是CGI?
通用閘道器介面(CGI)是一套標準,定義了Web伺服器和自定義指令碼之間如何交換資訊。
CGI規範目前由NCSA維護,NCSA將CGI定義如下:
通用閘道器介面(CGI)是外部閘道器程式與資訊伺服器(如HTTP伺服器)互動的標準。
當前版本為CGI/1.1,CGI/1.2正在開發中。
網頁瀏覽
要理解CGI的概念,讓我們看看當我們點選超連結瀏覽特定網頁或URL時會發生什麼。
您的瀏覽器聯絡HTTP Web伺服器並請求URL,即檔名。
Web伺服器將解析URL並查詢檔名。如果找到請求的檔案,則Web伺服器將該檔案傳送回瀏覽器,否則傳送錯誤訊息,指示您請求的檔案錯誤。
Web瀏覽器接收來自Web伺服器的響應,並根據接收到的響應顯示接收到的檔案或錯誤訊息。
但是,可以以這樣的方式設定HTTP伺服器:每當請求某個目錄中的檔案時,都不會將該檔案傳送回;相反,它將作為程式執行,並將程式產生的輸出傳送回您的瀏覽器以顯示。
通用閘道器介面(CGI)是一種標準協議,用於使應用程式(稱為CGI程式或CGI指令碼)能夠與Web伺服器和客戶端互動。這些CGI程式可以用Python、PERL、Shell、C或C++等編寫。
CGI架構圖
以下簡單程式顯示了CGI的簡單架構:

Web伺服器配置
在繼續進行CGI程式設計之前,請確保您的Web伺服器支援CGI,並且已配置為處理CGI程式。所有要由HTTP伺服器執行的CGI程式都儲存在預配置的目錄中。此目錄稱為CGI目錄,按照慣例命名為/var/www/cgi-bin。按照慣例,CGI檔案將以.cgi作為副檔名,儘管它們是C++可執行檔案。
預設情況下,Apache Web伺服器配置為在/var/www/cgi-bin中執行CGI程式。如果要指定其他目錄來執行CGI指令碼,可以修改httpd.conf檔案中的以下部分:
<Directory "/var/www/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> <Directory "/var/www/cgi-bin"> Options All </Directory>
在這裡,我假設您的Web伺服器已成功啟動並執行,並且您可以執行任何其他CGI程式,例如Perl或Shell等。
第一個CGI程式
考慮以下C++程式內容:
#include <iostream> using namespace std; int main () { cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Hello World - First CGI Program</title>\n"; cout << "</head>\n"; cout << "<body>\n"; cout << "<h2>Hello World! This is my first CGI program</h2>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
編譯上述程式碼並將可執行檔案命名為cplusplus.cgi。此檔案儲存在/var/www/cgi-bin目錄中,其內容如下。在執行CGI程式之前,請確保您已使用chmod 755 cplusplus.cgi UNIX命令更改了檔案的模式,以使檔案可執行。
我的第一個CGI程式
上述C++程式是一個簡單的程式,它將其輸出寫入STDOUT檔案,即螢幕。有一個重要且額外的功能可用,即第一行列印Content-type:text/html\r\n\r\n。此行傳送回瀏覽器並指定要在瀏覽器螢幕上顯示的內容型別。現在您必須瞭解CGI的基本概念,並且可以使用Python編寫許多複雜的CGI程式。C++ CGI程式可以與任何其他外部系統(例如RDBMS)互動以交換資訊。
HTTP頭
Content-type:text/html\r\n\r\n行是HTTP頭的部分,傳送到瀏覽器以瞭解內容。所有HTTP頭都將採用以下形式:
HTTP Field Name: Field Content For Example Content-type: text/html\r\n\r\n
在您的CGI程式設計中,您將經常使用一些其他重要的HTTP頭。
序號 | 頭和描述 |
---|---|
1 | Content-type 定義返回檔案的格式的MIME字串。例如Content-type:text/html。 |
2 | Expires: 日期 資訊變得無效的日期。瀏覽器應使用此資訊來確定何時需要重新整理頁面。有效的日期字串應採用01 Jan 1998 12:00:00 GMT格式。 |
3 | Location: URL 應返回的URL,而不是請求的URL。您可以使用此欄位將請求重定向到任何檔案。 |
4 | Last-modified: 日期 資源上次修改的日期。 |
5 | Content-length: N 返回資料的長度(以位元組為單位)。瀏覽器使用此值來報告檔案的估計下載時間。 |
6 | Set-Cookie: 字串 設定透過字串傳遞的cookie。 |
CGI環境變數
所有CGI程式都可以訪問以下環境變數。這些變數在編寫任何CGI程式時都起著重要作用。
序號 | 變數名和描述 |
---|---|
1 | CONTENT_TYPE 內容的資料型別,在客戶端將附加內容傳送到伺服器時使用。例如檔案上傳等。 |
2 | CONTENT_LENGTH 僅對POST請求可用的查詢資訊的長度。 |
3 | HTTP_COOKIE 以鍵值對的形式返回設定的cookie。 |
4 | HTTP_USER_AGENT User-Agent請求頭欄位包含有關發出請求的使用者代理的資訊。它是Web瀏覽器的名稱。 |
5 | PATH_INFO CGI指令碼的路徑。 |
6 | QUERY_STRING 使用GET方法請求傳送的URL編碼資訊。 |
7 | REMOTE_ADDR 發出請求的遠端主機的IP地址。這對於記錄或身份驗證目的很有用。 |
8 | REMOTE_HOST 發出請求的主機的完全限定名稱。如果此資訊不可用,則可以使用REMOTE_ADDR獲取IR地址。 |
9 | REQUEST_METHOD 用於發出請求的方法。最常見的方法是GET和POST。 |
10 | SCRIPT_FILENAME CGI指令碼的完整路徑。 |
11 | SCRIPT_NAME CGI指令碼的名稱。 |
12 | SERVER_NAME 伺服器的主機名或IP地址。 |
13 | SERVER_SOFTWARE 伺服器正在執行的軟體的名稱和版本。 |
這是一個列出所有CGI變數的小型CGI程式。
#include <iostream> #include <stdlib.h> using namespace std; const string ENV[ 24 ] = { "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE", "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING", "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION", "HTTP_HOST", "HTTP_USER_AGENT", "PATH", "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT", "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME", "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN", "SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL", "SERVER_SIGNATURE","SERVER_SOFTWARE" }; int main () { cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>CGI Environment Variables</title>\n"; cout << "</head>\n"; cout << "<body>\n"; cout << "<table border = \"0\" cellspacing = \"2\">"; for ( int i = 0; i < 24; i++ ) { cout << "<tr><td>" << ENV[ i ] << "</td><td>"; // attempt to retrieve value of environment variable char *value = getenv( ENV[ i ].c_str() ); if ( value != 0 ) { cout << value; } else { cout << "Environment variable does not exist."; } cout << "</td></tr>\n"; } cout << "</table><\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
C++ CGI庫
對於實際示例,您需要透過CGI程式執行許多操作。有一個為C++程式編寫的CGI庫,您可以從ftp://ftp.gnu.org/gnu/cgicc/下載,並按照步驟安裝庫:
$tar xzf cgicc-X.X.X.tar.gz $cd cgicc-X.X.X/ $./configure --prefix=/usr $make $make install
您可以在‘C++ CGI庫文件中檢視相關文件。
GET和POST方法
您肯定遇到過許多需要將一些資訊從瀏覽器傳遞到Web伺服器,最終傳遞到CGI程式的情況。瀏覽器最常使用兩種方法將此資訊傳遞到Web伺服器。這些方法是GET方法和POST方法。
使用GET方法傳遞資訊
GET方法傳送附加到頁面請求的編碼使用者資訊。頁面和編碼資訊由?字元分隔,如下所示:
http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2
GET方法是將資訊從瀏覽器傳遞到Web伺服器的預設方法,它會生成一個出現在瀏覽器Location:框中的長字串。如果要將密碼或其他敏感資訊傳遞到伺服器,請勿使用GET方法。GET方法有大小限制,您可以在請求字串中傳遞最多1024個字元。
使用GET方法時,資訊使用QUERY_STRING http頭傳遞,並且可以透過QUERY_STRING環境變數在CGI程式中訪問。
您可以透過簡單地連線鍵值對以及任何URL來傳遞資訊,或者可以使用HTML <FORM>標籤使用GET方法傳遞資訊。
簡單URL示例:GET方法
這是一個簡單的URL,它將使用GET方法將兩個值傳遞給hello_get.py程式。
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI下面是一個程式,用於生成cpp_get.cgi CGI程式來處理Web瀏覽器提供的輸入。我們將使用C++ CGI庫,這使得訪問傳遞的資訊變得非常容易:
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc formData; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Using GET and POST Methods</title>\n"; cout << "</head>\n"; cout << "<body>\n"; form_iterator fi = formData.getElement("first_name"); if( !fi->isEmpty() && fi != (*formData).end()) { cout << "First name: " << **fi << endl; } else { cout << "No text entered for first name" << endl; } cout << "<br/>\n"; fi = formData.getElement("last_name"); if( !fi->isEmpty() &&fi != (*formData).end()) { cout << "Last name: " << **fi << endl; } else { cout << "No text entered for last name" << endl; } cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
現在,按如下方式編譯上述程式:
$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc
生成cpp_get.cgi並將其放入您的CGI目錄中,然後嘗試使用以下連結訪問:
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI這將生成以下結果 -
First name: ZARA Last name: ALI
簡單的表單示例:GET 方法
這是一個簡單的示例,它使用 HTML 表單和提交按鈕傳遞兩個值。我們將使用相同的 CGI 指令碼 cpp_get.cgi 來處理此輸入。
<form action = "/cgi-bin/cpp_get.cgi" method = "get"> First Name: <input type = "text" name = "first_name"> <br /> Last Name: <input type = "text" name = "last_name" /> <input type = "submit" value = "Submit" /> </form>
這是上面表單的實際輸出。您輸入姓氏和名字,然後單擊提交按鈕以檢視結果。
使用 POST 方法傳遞資訊
將資訊傳遞到 CGI 程式的一種通常更可靠的方法是 POST 方法。此方法以與 GET 方法完全相同的方式打包資訊,但它不是在 URL 中的 ? 後面傳送為文字字串,而是將其傳送為單獨的訊息。此訊息以標準輸入的形式進入 CGI 指令碼。
相同的 cpp_get.cgi 程式也將處理 POST 方法。讓我們以與上面相同的示例為例,該示例使用 HTML 表單和提交按鈕傳遞兩個值,但這次使用 POST 方法,如下所示 -
<form action = "/cgi-bin/cpp_get.cgi" method = "post"> First Name: <input type = "text" name = "first_name"><br /> Last Name: <input type = "text" name = "last_name" /> <input type = "submit" value = "Submit" /> </form>
這是上面表單的實際輸出。您輸入姓氏和名字,然後單擊提交按鈕以檢視結果。
將複選框資料傳遞到 CGI 程式
當需要選擇多個選項時,使用複選框。
以下是帶有兩個複選框的表單的 HTML 程式碼示例 -
<form action = "/cgi-bin/cpp_checkbox.cgi" method = "POST" target = "_blank"> <input type = "checkbox" name = "maths" value = "on" /> Maths <input type = "checkbox" name = "physics" value = "on" /> Physics <input type = "submit" value = "Select Subject" /> </form>
此程式碼的結果是以下表單 -
以下是 C++ 程式,它將生成 cpp_checkbox.cgi 指令碼以處理 Web 瀏覽器透過複選框按鈕給出的輸入。
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc formData; bool maths_flag, physics_flag; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Checkbox Data to CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; maths_flag = formData.queryCheckbox("maths"); if( maths_flag ) { cout << "Maths Flag: ON " << endl; } else { cout << "Maths Flag: OFF " << endl; } cout << "<br/>\n"; physics_flag = formData.queryCheckbox("physics"); if( physics_flag ) { cout << "Physics Flag: ON " << endl; } else { cout << "Physics Flag: OFF " << endl; } cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
將單選按鈕資料傳遞到 CGI 程式
當只需要選擇一個選項時,使用單選按鈕。
以下是帶有兩個單選按鈕的表單的 HTML 程式碼示例 -
<form action = "/cgi-bin/cpp_radiobutton.cgi" method = "post" target = "_blank"> <input type = "radio" name = "subject" value = "maths" checked = "checked"/> Maths <input type = "radio" name = "subject" value = "physics" /> Physics <input type = "submit" value = "Select Subject" /> </form>
此程式碼的結果是以下表單 -
以下是 C++ 程式,它將生成 cpp_radiobutton.cgi 指令碼以處理 Web 瀏覽器透過單選按鈕給出的輸入。
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc formData; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Radio Button Data to CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; form_iterator fi = formData.getElement("subject"); if( !fi->isEmpty() && fi != (*formData).end()) { cout << "Radio box selected: " << **fi << endl; } cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
將文字區域資料傳遞到 CGI 程式
當必須將多行文字傳遞到 CGI 程式時,使用 TEXTAREA 元素。
以下是帶有 TEXTAREA 框的表單的 HTML 程式碼示例 -
<form action = "/cgi-bin/cpp_textarea.cgi" method = "post" target = "_blank"> <textarea name = "textcontent" cols = "40" rows = "4"> Type your text here... </textarea> <input type = "submit" value = "Submit" /> </form>
此程式碼的結果是以下表單 -
以下是 C++ 程式,它將生成 cpp_textarea.cgi 指令碼以處理 Web 瀏覽器透過文字區域給出的輸入。
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc formData; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Text Area Data to CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; form_iterator fi = formData.getElement("textcontent"); if( !fi->isEmpty() && fi != (*formData).end()) { cout << "Text Content: " << **fi << endl; } else { cout << "No text entered" << endl; } cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
將下拉框資料傳遞到 CGI 程式
當我們有很多選項可用但只需要選擇一兩個時,使用下拉框。
以下是帶有下拉框的表單的 HTML 程式碼示例 -
<form action = "/cgi-bin/cpp_dropdown.cgi" method = "post" target = "_blank"> <select name = "dropdown"> <option value = "Maths" selected>Maths</option> <option value = "Physics">Physics</option> </select> <input type = "submit" value = "Submit"/> </form>
此程式碼的結果是以下表單 -
以下是 C++ 程式,它將生成 cpp_dropdown.cgi 指令碼以處理 Web 瀏覽器透過下拉框給出的輸入。
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc formData; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Drop Down Box Data to CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; form_iterator fi = formData.getElement("dropdown"); if( !fi->isEmpty() && fi != (*formData).end()) { cout << "Value Selected: " << **fi << endl; } cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
在 CGI 中使用 Cookie
HTTP 協議是一種無狀態協議。但是對於商業網站,需要在不同頁面之間維護會話資訊。例如,一個使用者註冊在完成多個頁面後結束。但是如何在所有網頁之間維護使用者會話資訊呢?
在許多情況下,使用 Cookie 是記住和跟蹤偏好、購買、佣金以及其他改善訪客體驗或網站統計資訊所需資訊的最有效方法。
工作原理
您的伺服器以 Cookie 的形式向訪客的瀏覽器傳送一些資料。瀏覽器可能會接受 Cookie。如果接受,它將作為純文字記錄儲存在訪客的硬碟驅動器上。現在,當訪客訪問您網站上的另一個頁面時,Cookie 可供檢索。檢索後,您的伺服器就會知道/記住儲存的內容。
Cookie 是 5 個可變長度欄位的純文字資料記錄 -
Expires - 這顯示 Cookie 將過期的日期。如果為空,則 Cookie 將在訪客退出瀏覽器時過期。
Domain - 這顯示您網站的域名。
Path - 這顯示設定 Cookie 的目錄或網頁的路徑。如果您想從任何目錄或頁面檢索 Cookie,則此路徑可以為空。
Secure - 如果此欄位包含單詞“secure”,則 Cookie 只能使用安全伺服器檢索。如果此欄位為空,則不存在此類限制。
Name = Value - Cookie 以鍵值對的形式設定和檢索。
設定 Cookie
向瀏覽器傳送 Cookie 非常容易。這些 Cookie 將與 HTTP 標頭一起傳送,位於 Content-type 欄位之前。假設您要將 UserID 和 Password 設定為 Cookie。因此,Cookie 設定將如下進行
#include <iostream> using namespace std; int main () { cout << "Set-Cookie:UserID = XYZ;\r\n"; cout << "Set-Cookie:Password = XYZ123;\r\n"; cout << "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"; cout << "Set-Cookie:Path = /perl;\n"; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Cookies in CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; cout << "Setting cookies" << endl; cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
透過此示例,您必須已瞭解如何設定 Cookie。我們使用Set-Cookie HTTP 標頭來設定 Cookie。
此處,可以選擇設定 Cookie 屬性,如 Expires、Domain 和 Path。值得注意的是,Cookie 在傳送神奇行"Content-type:text/html\r\n\r\n"之前設定。
編譯上述程式以生成 setcookies.cgi,並嘗試使用以下連結設定 Cookie。它將在您的計算機上設定四個 Cookie -
檢索 Cookie
檢索所有已設定的 Cookie 很容易。Cookie 儲存在 CGI 環境變數 HTTP_COOKIE 中,並且將具有以下形式。
key1 = value1; key2 = value2; key3 = value3....
以下是如何檢索 Cookie 的示例。
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc cgi; const_cookie_iterator cci; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>Cookies in CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; cout << "<table border = \"0\" cellspacing = \"2\">"; // get environment variables const CgiEnvironment& env = cgi.getEnvironment(); for( cci = env.getCookieList().begin(); cci != env.getCookieList().end(); ++cci ) { cout << "<tr><td>" << cci->getName() << "</td><td>"; cout << cci->getValue(); cout << "</td></tr>\n"; } cout << "</table><\n"; cout << "<br/>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
現在,編譯上述程式以生成 getcookies.cgi,並嘗試獲取計算機上所有可用 Cookie 的列表 -
這將生成上一節中設定的所有四個 Cookie 以及計算機上設定的所有其他 Cookie 的列表 -
UserID XYZ Password XYZ123 Domain www.tutorialspoint.com Path /perl
檔案上傳示例
要上傳檔案,HTML 表單必須將 enctype 屬性設定為multipart/form-data。帶有檔案型別的 input 標籤將建立一個“瀏覽”按鈕。
<html> <body> <form enctype = "multipart/form-data" action = "/cgi-bin/cpp_uploadfile.cgi" method = "post"> <p>File: <input type = "file" name = "userfile" /></p> <p><input type = "submit" value = "Upload" /></p> </form> </body> </html>
此程式碼的結果是以下表單 -
注意 - 上述示例已故意停用,以阻止人們在我們的伺服器上上傳檔案。但是,您可以使用您的伺服器嘗試上述程式碼。
以下是處理檔案上傳的指令碼cpp_uploadfile.cpp -
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <stdlib.h> #include <cgicc/CgiDefs.h> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main () { Cgicc cgi; cout << "Content-type:text/html\r\n\r\n"; cout << "<html>\n"; cout << "<head>\n"; cout << "<title>File Upload in CGI</title>\n"; cout << "</head>\n"; cout << "<body>\n"; // get list of files to be uploaded const_file_iterator file = cgi.getFile("userfile"); if(file != cgi.getFiles().end()) { // send data type at cout. cout << HTTPContentHeader(file->getDataType()); // write content at cout. file->writeToStream(cout); } cout << "<File uploaded successfully>\n"; cout << "</body>\n"; cout << "</html>\n"; return 0; }
以上示例用於將內容寫入cout流,但您可以開啟檔案流並將上傳檔案的內容儲存在所需位置的檔案中。
希望您喜歡本教程。如果喜歡,請傳送您的反饋。