getenv

getenv是函式名,從環境中取字元串,獲取環境變數的值,getenv()用來取得參數envvar環境變數的內容。參數envvar為環境變數的名稱,如果該變數存在則會返回指向該內容的指針。環境變數的格式為envvar=value。getenv函式的返回值存儲在一個全局二維數組裡,當你再次使用getenv函式時不用擔心會覆蓋上次的調用結果。

函式簡介

函式名: getenv

功 能: 從環境中取字元串,獲取環境變數的值

頭檔案: stdlib.h

用 法:char *getenv(char *envvar);

函式說明:getenv()用來取得參數envvar環境變數的內容。參數envvar為環境變數的名稱,如果該變數存在則會返回指向該內容的指針。環境變數的格式為envvar=value。getenv函式的返回值存儲在一個全局二維數組裡,當你再次使用getenv函式時不用擔心會覆蓋上次的調用結果。

返回值: 執行成功則返回指向該內容的指針,找不到符合的環境變數名稱則返回NULL。如果變數存在但無關聯值,它將運行成功並返回一個空字元串,即該字元的第一個位元組是null。

相關函式:_wgetenv、getenv_s、_wgetenv_s

程式示例

程式例1:

執行:COMSPEC = name

程式例2:

下面這個例子來自MSDN

Sample Output(輸出結果):

Original LIB variable is: C:\progra~1\devstu~1\vc\lib

New LIB variable is: c:\mylib;c:\yourlib

PHP

在PHP中getenv(參數)函式是一個用於獲取環境變數的函式,根據提供不同的參數可以獲取不同的環境變數,具體如下:

“PHP_SELF”

當前正在執行腳本的檔案名稱,與document root 相關。

如果PHP 以命令行方式運行,該變數在PHP 4.3.0 之前無效。

“argv”

傳遞給該腳本的參數。當腳本運行在命令行方式時,argv 變數傳遞給程式C 語言樣式的命令行參數。當調用GET 方法時,該變數包含請求的數據。

“argc”

包含傳遞給程式的命令行參數的個數(如果運行在命令行模式)。

“GATEWAY_INTERFACE”

伺服器使用的CGI 規範的版本。例如,“CGI/1.1”。

“SERVER_NAME”

當前運行腳本所在伺服器主機的名稱。如果該腳本運行在一個虛擬主機上,該名稱是由那個虛擬主機所設定的值決定。

“SERVER_SOFTWARE”

伺服器標識的字串,在回響請求時的頭信息中給出。

“SERVER_PROTOCOL”

請求頁面時通信協定的名稱和版本。例如,“HTTP/1.0”。

“REQUEST_METHOD”

訪問頁面時的請求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。

注: 如果請求的方式是HEAD,PHP 腳本將在送出頭信息後中止(這意味著在產生任何輸出後,不再有輸出緩衝)。

“REQUEST_TIME”

請求開始時的時間戳。從PHP 5.1.0 起有效。

“QUERY_STRING”

查詢(query)的字元串(URL 中第一個問號? 之後的內容)。

“DOCUMENT_ROOT”

當前運行腳本所在的文檔根目錄。在伺服器配置檔案中定義。

“HTTP_ACCEPT”

當前請求的Accept: 頭信息的內容。

“HTTP_ACCEPT_CHARSET”

當前請求的Accept-Charset: 頭信息的內容。例如:“iso-8859-1,*,utf-8”。

“HTTP_ACCEPT_ENCODING”

當前請求的Accept-Encoding: 頭信息的內容。例如:“gzip”。

“HTTP_ACCEPT_LANGUAGE”

當前請求的Accept-Language: 頭信息的內容。例如:“en”。

“HTTP_CONNECTION”

當前請求的Connection: 頭信息的內容。例如:“Keep-Alive”。

“HTTP_HOST”

當前請求的Host: 頭信息的內容。

“HTTP_REFERER”

連結到當前頁面的前一頁面的URL 地址。不是所有的用戶代理(瀏覽器)都會設定這個變數,而且有的還可以手工修改HTTP_REFERER。因此,這個變數不總是真實正確的。

“HTTP_USER_AGENT”

當前請求的User-Agent: 頭信息的內容。該字元串表明了訪問該頁面的用戶代理的信息。一個典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。也可以使用get_browser() 得到此信息。

“HTTPS”

如果腳本是通過HTTPS 協定被訪問,則被設為一個非空的值。

“REMOTE_ADDR”

正在瀏覽當前頁面用戶的IP 地址。

“REMOTE_HOST”

正在瀏覽當前頁面用戶的主機名。反向域名解析基於該用戶的REMOTE_ADDR。

注: 必須配置Web 伺服器來建立此變數。例如Apache 需要在httpd.conf 中有HostnameLookups On。參見gethostbyaddr()。

“REMOTE_PORT”

用戶連線到伺服器時所使用的連線埠。

“SCRIPT_FILENAME”

當前執行腳本的絕對路徑名。

注: 如果腳本在CLI 中被執行,作為相對路徑,例如file.php 或../file.php,$_SERVER['SCRIPT_FILENAME'] 將包含用戶指定的相對路徑。

“SERVER_ADMIN”

該值指明了Apache 伺服器配置檔案中的SERVER_ADMIN 參數。如果腳本運行在一個虛擬主機上,則該值是那個虛擬主機的值。

“SERVER_PORT”

伺服器所使用的連線埠。默認為“80”。如果使用SSL 安全連線,則這個值為用戶設定的HTTP 連線埠。

“SERVER_SIGNATURE”

包含伺服器版本和虛擬主機名的字元串。

“PATH_TRANSLATED”

當前腳本所在檔案系統(不是文檔根目錄)的基本路徑。這是在伺服器進行虛擬到真實路徑的映像後的結果。

注: PHP 4.3.2 之後,PATH_TRANSLATED 在Apache 2 SAPI 模式下不再和Apache 1 一樣隱含賦值,而是若Apache 不生成此值,PHP 便自己生成並將其值放入SCRIPT_FILENAME 伺服器常量中。這個修改遵守了CGI 規範,PATH_TRANSLATED 僅在PATH_INFO 被定義的條件下才存在。

Apache 2 用戶可以使用httpd.conf 中的AcceptPathInfo On 來定義PATH_INFO。

“SCRIPT_NAME”

包含當前腳本的路徑。這在頁面需要指向自己時非常有用。__FILE__ 包含當前檔案的絕對路徑和檔案名稱(例如包含檔案)。

“REQUEST_URI”

訪問此頁面所需的URI。例如,“/index.html”。

“PHP_AUTH_DIGEST”

當作為Apache 模組運行時,進行HTTP Digest 認證的過程中,此變數被設定成客戶端傳送的“Authorization”HTTP 頭內容(以便作進一步的認證操作)。

“PHP_AUTH_USER”

當PHP 運行在Apache 或IIS(PHP 5 是ISAPI)模組方式下,並且正在使用HTTP 認證功能,這個變數便是用戶輸入的用戶名。

“PHP_AUTH_PW”

當PHP 運行在Apache 或IIS(PHP 5 是ISAPI)模組方式下,並且正在使用HTTP 認證功能,這個變數便是用戶輸入的密碼。

CGI

定義

通用網關接口Common Gateway Interface,簡稱CGI。在物理上是一段程式,運行在伺服器上,提供同客戶端HTML頁面的接口。這樣說大概還不好理解。那么我們看一個實際例子: 現在的個人主頁上大部分都有一個留言本。留言本的工作是這樣的:先由用戶在客戶端輸入一些信息,如名字之類的東西。接著用戶按一下“留言”(到目前為止工作都在客戶端),瀏覽器把這些信息傳送到伺服器的CGI目錄下特定的cgi程式中,於是cgi程式在伺服器上按照預定的方法進行處理。在本例中就是把用戶提交的信息存入指定的檔案中。然後cgi程式給客戶端傳送一個信息,表示請求的任務已經結束。此時用戶在瀏覽器里將看到“留言結束”的字樣。整個過程結束。

CGI程式示例

本例就處理get方式表單的CGI進行講解:(程式名mult.c)

具體的C語法就不多講了,我們來看看它作為CGI程式所特殊的地方。

前面已經提到標準輸出的內容就是要被顯示在瀏覽器中的內容。第一行的輸出內容是必須的,也是一個CGI程式所特有的:printf("Content-Type:text/html\n\n"),這個輸出是作為HTML的檔案頭。因為CGI不僅可以像瀏覽器輸出HTML文本,而且可以輸出圖像,聲音之類的東西。這一行告訴瀏覽器如何處理接受到的內容。在Content-Type的定義後面跟有兩行的空行,這也是不可缺少的。因為所有CGI程式的頭部輸出都是相近的,因而可以為其定義一個函式,來節省編程的時間。這是CGI編程常用的一個技巧。

程式在後面調用了用了庫函式getevn來得到QUERY_STRING的內容的位元組數,然後使用sscanf函式把每個參數值取出來,要注意的是sscanf函式的用法。其他的就沒有什麼了,和一般的C程式沒有區別。

Linux系統下用gcc編譯把程式編譯為mult.cgi並/cgi-bin/目錄下面,就可以被表單調用了。這樣,一個處理GET方式表單的CGI程式就大功告成了。

代碼

< FORM ACTION="/cgi-bin/mult.cgi" >

< P >請在下面填入乘數和被乘數,按下確定後可以看到結果。

< INPUT NAME="m" SIZE="5" >

< INPUT NAME="n" SIZE="5" >< BR >

< INPUT TYPE="SUBMIT" VALUE="確定" >

< /FORM >

相關詞條

相關搜尋

熱門詞條

聯絡我們