久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

PHP預(yù)定義變量

2024-01-04 166

PHP預(yù)定義變量是在腳本執(zhí)行之前就已經(jīng)定義好的變量,可以直接在腳本中使用。這些變量提供了與服務(wù)器和環(huán)境相關(guān)的信息,以及與用戶交互的輸入數(shù)據(jù)。了解PHP預(yù)定義變量對于編寫高效和可靠的PHP代碼非常重要。本教程將介紹一些常見的PHP超全局變量及其用法。

一、超全局變量

超全局變量 — 在全部作用域中始終可用的內(nèi)置變量

PHP 中的許多預(yù)定義變量都是“超全局的”,這意味著它們在一個(gè)腳本的全部作用域中都可用。在函數(shù)或方法中無需執(zhí)行 global $variable; 就可以訪問它們。

這些超全局變量是:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

二、$GLOBALS

$GLOBALS — 引用全局作用域中可用的全部變量。關(guān)聯(lián)數(shù)組 array,包含當(dāng)前腳本內(nèi)定義成全局范圍的所有變量的引用。 數(shù)組的鍵就是變量的名字。

1、用法

<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>

以上示例的輸出類似于:

$foo in global scope: Example content
$foo in current scope: local variable

注意:從 PHP 8.1.0 起,不再支持對整個(gè) $GLOBALS 數(shù)組的寫訪問:

寫入整個(gè) $GLOBALS 將會(huì)導(dǎo)致錯(cuò)誤:

<?php
// 生成編譯時(shí)錯(cuò)誤:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...以及對 $GLOBALS 的任何其他寫入/讀寫操作
?>

2、注釋

Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。與所有其他超全局變量不同,$GLOBALS在PHP中總是可用的。

從 PHP 8.1.0 起, $GLOBALS 現(xiàn)在是全局符號表的只讀副本。 也就是說,全局變量不能通過副本進(jìn)行修改。 在之前的版本中,$GLOBALS 數(shù)組和 PHP 數(shù)組通常傳值的行為不一樣,全局變量可通過副本修改。

<?php
// PHP 8.1.0 之前
$a = 1;
$globals = $GLOBALS; // 表面意義的按值復(fù)制
$globals['a'] = 2;
var_dump($a); // int(2)
// 從 PHP 8.1.0 起
// 這不再修改 $a。先前的行為違反了按值語義。
$globals = $GLOBALS;
$globals['a'] = 1;
// 要恢復(fù)以前的行為,請迭代其副本并將每個(gè)屬性分配回 $GLOBALS。
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>

三、$_?SERVER

$_SERVER — 服務(wù)器和執(zhí)行環(huán)境信息。

$_SERVER 是一個(gè)包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等信息的 array。這個(gè)數(shù)組中的條目由 Web 服務(wù)器創(chuàng)建,所以不能保證每個(gè) Web 服務(wù)器都提供全部條目;服務(wù)器可能會(huì)忽略一些,或者提供此處沒有列舉出來的其它內(nèi)容。然而,大部分變量在 ? CGI 1.1 規(guī)范中都有說明,并且很可能會(huì)定義。

注意: 當(dāng)在命令行運(yùn)行 PHP 時(shí),這些條目都將無效或者沒有任何意義。

除了下面列出的元素之外,PHP 還將使用請求報(bào)頭中的值創(chuàng)建其它元素,這些條目將命名為 HTTP_ 后跟報(bào)頭名稱,大寫且使用下劃線而不是連字符。例如 Accept-Language 報(bào)頭將作為 $_SERVER[‘HTTP_ACCEPT_LANGUAGE’] 提供。

1、目錄

  • ‘PHP_SELF’:當(dāng)前執(zhí)行腳本的文件名,與 document root 有關(guān)。例如,在地址為 http://example.com/foo/bar.php 的腳本中使用 $_SERVER[‘PHP_SELF’] 將得到 /foo/bar.php。__FILE__ 常量包含當(dāng)前(例如包含)文件的完整路徑和文件名。 如果 PHP 以命令行模式運(yùn)行,這個(gè)變量將包含腳本名。
  • ‘argv’:傳遞給該腳本的參數(shù)的數(shù)組。當(dāng)腳本以命令行方式運(yùn)行時(shí),argv 變量傳遞給程序 C 語言樣式的命令行參數(shù)。當(dāng)通過 GET 方式調(diào)用時(shí),該變量包含query string。
  • ‘argc’:包含命令行模式下傳遞給該腳本的參數(shù)的數(shù)目(如果運(yùn)行在命令行模式下)。
  • ‘GATEWAY_INTERFACE’:服務(wù)器使用的 CGI 規(guī)范的版本;例如,’CGI/1.1’。
  • ‘SERVER_ADDR’:當(dāng)前運(yùn)行腳本所在的服務(wù)器的 IP 地址。
  • ‘SERVER_NAME’:當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名。如果腳本運(yùn)行于虛擬主機(jī)中,該名稱是由那個(gè)虛擬主機(jī)所設(shè)置的值決定。
  • 注意:在 Apache 2 里,必須設(shè)置 UseCanonicalName = On 和 ServerName。否則該值會(huì)由客戶端提供,就有可能被偽造。上下文有安全性要求的環(huán)境里,不應(yīng)該依賴此值。
  • ‘SERVER_SOFTWARE’:服務(wù)器標(biāo)識字符串,在響應(yīng)請求時(shí)的頭信息中給出。
  • ‘SERVER_PROTOCOL’:請求頁面時(shí)通信協(xié)議的名稱和版本。例如,’HTTP/1.0’。
  • ‘REQUEST_METHOD’:訪問頁面使用的請求方法;例如,’GET’、’HEAD’、’POST’、’PUT’。

注意:

如果請求方法為 HEAD,PHP 腳本將在發(fā)送 Header 頭信息之后終止(這意味著在產(chǎn)生任何輸出后,不再有輸出緩沖)。

  • ‘REQUEST_TIME’:請求開始時(shí)的時(shí)間戳。
  • ‘REQUEST_TIME_FLOAT’:請求開始時(shí)的時(shí)間戳,微秒級別的精準(zhǔn)度。
  • ‘QUERY_STRING’:query string(查詢字符串),如果有的話,通過它進(jìn)行頁面訪問。
  • ‘DOCUMENT_ROOT’:當(dāng)前運(yùn)行腳本所在的文檔根目錄。在服務(wù)器配置文件中定義。
  • ‘HTTPS’:如果腳本是通過 HTTPS 協(xié)議被訪問,則被設(shè)為一個(gè)非空的值。
  • ‘REMOTE_ADDR’:瀏覽當(dāng)前頁面的用戶的 IP 地址。
  • ‘REMOTE_HOST’:瀏覽當(dāng)前頁面的用戶的主機(jī)名。DNS 反向解析不依賴于用戶的 REMOTE_ADDR。

注意:必須配置 Web 服務(wù)器以創(chuàng)建這個(gè)變量。例如在 Apache 中,HostnameLookups On 必須在 httpd.conf 中設(shè)置才能存在。

  • ‘REMOTE_PORT’:用戶機(jī)器上連接到 Web 服務(wù)器所使用的端口號。
  • ‘REMOTE_USER’:經(jīng)驗(yàn)證的用戶
  • ‘REDIRECT_REMOTE_USER’:驗(yàn)證的用戶,如果請求已在內(nèi)部重定向。
  • ‘SCRIPT_FILENAME’:當(dāng)前執(zhí)行腳本的絕對路徑。

注意:

如果在命令行界面(Command Line Interface, CLI)使用相對路徑執(zhí)行腳本,例如 file.php 或 ../file.php,那么 $_SERVER[‘SCRIPT_FILENAME’] 將包含用戶指定的相對路徑。

  • ‘SERVER_ADMIN’:該值指明了 Apache 服務(wù)器配置文件中的 SERVER_ADMIN 參數(shù)。如果腳本運(yùn)行在一個(gè)虛擬主機(jī)上,則該值是那個(gè)虛擬主機(jī)的值。
  • ‘SERVER_PORT’:Web 服務(wù)器使用的端口。默認(rèn)值為 ’80’。如果使用 SSL 安全連接,則這個(gè)值為用戶設(shè)置的 HTTP 端口。

注意: 在 Apache 2 里,為了獲取真實(shí)物理端口,必須設(shè)置 UseCanonicalName = On 以及 UseCanonicalPhysicalPort = On,否則可能偽造此值,不一定會(huì)返回真實(shí)端口值。 上下文有安全性要求的環(huán)境里,不應(yīng)該依賴此值。

  • ‘SERVER_SIGNATURE’:包含了服務(wù)器版本和虛擬主機(jī)名的字符串。
  • ‘PATH_TRANSLATED’:當(dāng)前腳本所在文件系統(tǒng)(非文檔根目錄)的基本路徑。這是在服務(wù)器進(jìn)行虛擬到真實(shí)路徑的映像后的結(jié)果。

注意: Apache 2 用戶可以在 httpd.conf 中設(shè)置 AcceptPathInfo = On 來定義 PATH_INFO。

  • ‘SCRIPT_NAME’:包含當(dāng)前腳本的路徑。這在頁面需要指向自己時(shí)非常有用。__FILE__ 常量包含當(dāng)前腳本(例如包含文件)的完整路徑和文件名。:’REQUEST_URI’
    URI 用來指定要訪問的頁面。例如 “/index.html”。
  • ‘PHP_AUTH_DIGEST’:當(dāng)作為 Apache 模塊運(yùn)行時(shí),進(jìn)行 HTTP Digest 認(rèn)證的過程中,此變量被設(shè)置成客戶端發(fā)送的“Authorization” HTTP 頭內(nèi)容(以便作進(jìn)一步的認(rèn)證操作)。
  • ‘PHP_AUTH_USER’:當(dāng) PHP 運(yùn)行在 Apache 或 IIS(PHP 5 是 ISAPI)模塊方式下,并且正在使用 HTTP 認(rèn)證功能,這個(gè)變量便是用戶輸入的用戶名。
  • ‘PHP_AUTH_PW’:當(dāng) PHP 運(yùn)行在 Apache 或 IIS(PHP 5 是 ISAPI)模塊方式下,并且正在使用 HTTP 認(rèn)證功能,這個(gè)變量便是用戶輸入的密碼。
  • ‘AUTH_TYPE’:當(dāng) PHP 運(yùn)行在 Apache 模塊方式下,并且正在使用 HTTP 認(rèn)證功能,這個(gè)變量便是認(rèn)證的類型。
  • ‘PATH_INFO’:如果存在的話,包含由客戶端提供的、跟在真實(shí)腳本名稱之后并且在查詢字符串之前的路徑信息。例如,如果當(dāng)前腳本是通過 URI http://www.example.com/php/path_info.php/some/stuff?foo=bar 訪問,那么 $_SERVER[‘PATH_INFO’] 將包含 /some/stuff。
  • ‘ORIG_PATH_INFO’:在被 PHP 處理之前,“PATH_INFO” 的原始版本。

2、示例

$_SERVER 范例:

<?php
echo $_SERVER['SERVER_NAME'];
?>

以上示例的輸出類似于:

www.example.com

3、注釋

“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

四、$_?GET

$_GET — HTTP GET 變量。通過 URL 參數(shù)(又叫 query string)傳遞給當(dāng)前腳本的變量的數(shù)組。 注意:該數(shù)組不僅僅對 method 為 GET 的請求生效,而是會(huì)針對所有帶 query string 的請求。

$_GET 范例:

<?php
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>

假設(shè)用戶訪問的是 http://example.com/?name=Hannes

以上示例的輸出類似于:

Hello Hannes!

注意:

“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它;

GET 是通過 urldecode() 傳遞的。

五、$_?POST

$_POST — HTTP POST 變量。當(dāng) HTTP POST 請求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 時(shí),會(huì)將變量以關(guān)聯(lián)數(shù)組形式傳入當(dāng)前腳本。

$_POST 范例:

<?php
echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';
?>

假設(shè)用戶通過 HTTP POST 方式傳遞了參數(shù) name=Hannes

以上示例的輸出類似于:

Hello Hannes!

注意:“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

六、$_?FILES

$_FILES — HTTP 文件上傳變量。通過 HTTP POST 方式上傳到當(dāng)前腳本的項(xiàng)目的數(shù)組。

注意:“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

七、$_?REQUEST

$_REQUEST — HTTP Request 變量。默認(rèn)情況下包含了 $_GET,$_POST 和 $_COOKIE 的數(shù)組。

注意:

  • “Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它;
  • 以命令行方式運(yùn)行時(shí),將不包含 argv 和 argc 信息;它們將存在于 $_SERVER 數(shù)組;
  • 由于 $_REQUEST 中的變量通過 GET,POST 和 COOKIE 輸入機(jī)制傳遞給腳本文件,因此可以被遠(yuǎn)程用戶篡改而并不可信。這個(gè)數(shù)組的項(xiàng)目及其順序依賴于 PHP 的 request_order 和 variables_order 指令的配置。

八、$_?SESSION

$_SESSION — Session 變量。當(dāng)前腳本可用 SESSION 變量的數(shù)組。

注意:“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

九、$_?ENV

$_ENV — 環(huán)境變量。通過環(huán)境方式傳遞給當(dāng)前腳本的變量的數(shù)組。

這些變量被從 PHP 解析器的運(yùn)行環(huán)境導(dǎo)入到 PHP 的全局命名空間。很多是由支持 PHP 運(yùn)行的 Shell 提供的,并且不同的系統(tǒng)很可能運(yùn)行著不同種類的 Shell,所以不可能有一份確定的列表。請查看你的 Shell 文檔來獲取定義的環(huán)境變量列表。

其他環(huán)境變量包含了 CGI 變量,而不管 PHP 是以服務(wù)器模塊還是 CGI 處理器的方式運(yùn)行。

$_ENV 范例:

<?php
echo 'My username is ' .$_ENV["USER"] . '!';
?>

假設(shè) “bjori” 運(yùn)行此段腳本

以上示例的輸出類似于:

My username is bjori!

注意:“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

十、$_?COOKIE

$_COOKIE — HTTP Cookies。通過 HTTP Cookies 方式傳遞給當(dāng)前腳本的變量的數(shù)組

$_COOKIE 范例:

<?php
echo 'Hello ' . htmlspecialchars($_COOKIE["name"]) . '!';
?>

假設(shè)之前發(fā)送了 “name” Cookie

以上示例的輸出類似于:

Hello Hannes!

注意:“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

十一、$http_?response_?header

$http_response_header — HTTP 響應(yīng)頭。$http_response_header 數(shù)組與 get_headers() 函數(shù)類似。當(dāng)使用HTTP 包裝器時(shí),$http_response_header 將會(huì)被 HTTP 響應(yīng)頭信息填充。$http_response_header 將被創(chuàng)建于局部作用域中。

$http_response_header 范例:

<?php
function get_contents() {
file_get_contents("http://example.com");
var_dump($http_response_header); // 變量在本地作用域中填充
}
get_contents();
var_dump($http_response_header); // 調(diào)用 get_contents() 不會(huì)在函數(shù)作用域之外填充變量
?>

以上示例的輸出類似于:

array(9) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
[2]=>
string(29) "Server: Apache/2.2.3 (CentOS)"
[3]=>
string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
[4]=>
string(27) "ETag: "280100-1b6-80bfd280""
[5]=>
string(20) "Accept-Ranges: bytes"
[6]=>
string(19) "Content-Length: 438"
[7]=>
string(17) "Connection: close"
[8]=>
string(38) "Content-Type: text/html; charset=UTF-8"
}
Warning: Undefined variable $http_response_header
NULL

十二、$argc

$argc — 傳遞給腳本的參數(shù)數(shù)目。包含當(dāng)運(yùn)行于命令行下時(shí)傳遞給當(dāng)前腳本的參數(shù)的數(shù)目。

注意:

  • 腳本的文件名總是作為參數(shù)傳遞給當(dāng)前腳本,因此 $argc 的最小值為 1;
  • 這個(gè)變量僅在 register_argc_argv 打開時(shí)可用;
  • 也可以在 $_SERVER[‘argc’] 中獲取。

$argc 范例:

<?php
var_dump($argc);
?>

當(dāng)使用這個(gè)命令執(zhí)行: php script.php arg1 arg2 arg3

以上示例的輸出類似于:

int(4)

十三、$argv

$argv — 傳遞給腳本的參數(shù)數(shù)組。包含當(dāng)運(yùn)行于命令行下時(shí)傳遞給當(dāng)前腳本的參數(shù)的數(shù)組。

注意:

  • 第一個(gè)參數(shù)總是當(dāng)前腳本的文件名,因此 $argv[0] 就是腳本文件名;
  • 這個(gè)變量僅在 register_argc_argv 打開時(shí)可用;
  • 也可以在 $_SERVER[‘argv’] 中獲取。

$argv 范例:

<?php
var_dump($argv);
?>

當(dāng)使用這個(gè)命令執(zhí)行:php script.php arg1 arg2 arg3

以上示例的輸出類似于:

array(4) {
[0]=>
string(10) "script.php"
[1]=>
string(4) "arg1"
[2]=>
string(4) "arg2"
[3]=>
string(4) "arg3"
}

十四、$php_?errormsg

注意:本特性已自 PHP 7.2.0 起廢棄,強(qiáng)烈建議不要使用本特性;

如果用戶定義了錯(cuò)誤處理句柄(set_error_handler())并且返回 false 的時(shí)候,$php_errormsg 就會(huì)被設(shè)置。

$php_errormsg — 前一個(gè)錯(cuò)誤信息。用 error_get_last() 函數(shù)代替。$php_errormsg 變量包含由 PHP 生成的最新錯(cuò)誤信息。這個(gè)變量只在錯(cuò)誤發(fā)生的作用域內(nèi)可用,并且要求 track_errors 配置項(xiàng)是開啟的(默認(rèn)是關(guān)閉的)。

$php_errormsg 范例:

<?php
@strpos();
echo $php_errormsg;
?>

以上示例的輸出類似于:

Wrong parameter count for strpos()
  • 廣告合作

  • QQ群號:4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請注明出處“站長百科”和原文地址。
PHP預(yù)定義變量
上一篇: PHP引用
PHP預(yù)定義變量
下一篇: PHP Exception