getenv

用來取得參數環境變數值的函數

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

函數簡介


函數名: getenv
功 能: 從環境中取字元串,獲取環境變數的值
頭文件: stdlib.h
用 法:char *getenv(char *envvar);
返回值: 執行成功則返回指向該內容的指針,找不到符合的環境變數名稱則返回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 >