1. 程式人生 > 實用技巧 >PHP 超全域性變數

PHP 超全域性變數

PHP與Web頁面互動

解析PHP執行過程

  • HTTP請求

    • 當瀏覽器鍵入URL地址後,就會向指定伺服器發起HTTP請求
    • 在請求的同時,附帶請求訊息頭、請求訊息體等相關資訊
  • Apache服務端處理

    • 當請求到達伺服器之後,Apache就開始工作了
    • 如果請求的是靜態資源,Apache直接在伺服器目錄下獲取這些檔案
    • 如果請求的是PHP檔案,Apache則會交給PHP模組來處理
    • PHP模組將處理後的結果以HTML方式返回給Apache
  • 返回HTTP響應資料

    • 伺服器將通過Apache獲取到的靜態資源通過HTTP響應傳送給瀏覽器端
  • 瀏覽器顯示

    • 客戶端將伺服器返回的靜態資源進行解析並顯示出來

Web表單

表單組成

  • 表單標籤
    • name 用於設定表單名稱
    • method 用於設定表單的提交方式,GET或POST
    • action 用於指定接收資料的路徑
    • enctype 用於設定提交資料的編碼格式
    • target 用於設定返回資訊的顯示格式
  <form name='' method='' action='' enctype='' target=''>
    ...
  </form>
  • 表單元素
    • <input> 域標記
    • <textarea> 文字域標記
  <form>
    <input name="username" type="text"><br>
    <input name="pwd" type="password"><br>
    <input name="sex" type="radio"><br>
    <input name="hobby" type="checkbox"><br>
    <input name="upload" type="file"><br>
    <input name="login" type="submit"><br>
    <input name="girl" type="image"><br>
    <input name="clean" type="reset"><br>
    <textarea name="content"></textarea>
  </form>

獲取表單資料

  • method屬性指定提交方式
    • POST 提交方式使用全域性陣列$_POST[]來獲取表單元素的值
    • GET 提交方式使用全域性陣列$_GET[]來獲取表單元素的值
  $username= $_GET['username'];
  $username= $_POST['username'];
  $username= $_REQUEST['username'];
<?php
	header("Content-Type: text/html; charset=utf-8");
	if(!empty($_REQUEST['username'])){
		echo $_REQUEST['username'];
	}
?>
<form action='' method="post">
	<input type="text" name="username">
	<br>
	<br>
	<input type="submit" value="提交">
</form>

表單安全驗證

  • 使用者提交的資料屬於非法資料(如:JS程式碼段)
    • strip_tags() 方法
      • 用於去除字串中的HTML和PHP標記
    • htmlentities() 方法
      • 可以將HTML和PHP標記轉換成字元
<?php
	header("Content-Type: text/html; charset=utf-8");
	if($_SERVER['REQUEST_METHOD']== 'POST'){
		echo '<pre>';
			echo htmlentities($_REQUEST['content'], ENT_NOQUOTES, 'UTF-8').'<br>';
		echo '</pre>';
	}
?>
<form action='' method="post">
	<p>留言內容:</p>
	<textarea name="content"></textarea>
	<br><br>
	<input type="submit" value="留言提交">
</form>

表單資料驗證

  • 對錶單提交的資料進行驗證

    • isset() 用於檢測變數是否具有值
      • 包括0 false或者一個空字串,但不能是NULL
    • empty() 用於檢測是否具有空值
      • 包括空字串 0 null 或 false
    • is_numeric() 用於檢測數字或數字字串
  • 轉賬案例

<?php
	header("Content-Type: text/html; charset=utf-8");
	if($_SERVER['REQUEST_METHOD']== 'POST'){
		if(!isset($_POST['name'])){
			echo '必須設定轉賬人員!';
			exit;
		}
		if(empty($_POST['amount'])){
			echo '請輸入轉賬金額!';
			exit;
		}
		if(!is_numeric($_POST['amount'])){
			echo '請輸入正確的資料格式!';
			exit;
		}
		echo "轉賬{$_POST['amount']}元給{$_POST['name']}";
		var_dump($_POST['name']);
		exit;
	}
?>
<form action='' method="post">
	<p>轉賬 <input type="text" name="amount"> 給 <input type="text" name="name"></p>
	<br>
	<input type="submit" value="轉賬提交">
</form>

超全域性變數

超全域性變數

  • 預定義的超全域性變數
    • $_GET 經由 HTTP GET 方法提交至指令碼的變數
    • $_POST 經由 HTTP POST 方法提交至指令碼的變數
    • $_REQUEST 經由 GET POST和COOKIE機制交至指令碼的變數
    • $_SERVER 經由web伺服器設定或者直接與當前指令碼的執行環境相關聯
    • $_ENV 執行環境提交至指令碼的變數
    • $_FILES 經由 HTTP POST 檔案上傳而提交至指令碼的變數
    • $_COOKIE 經由 HTTP Cookies 方法提交至指令碼的變數
    • $_SESSION 當前註冊給指令碼會話的變數
    • $GLOBALS 包含一個引用指向每個當前指令碼的全域性範圍內有效的變數

$_GET

  • $_GET
    • 對於GET方式提交的資料,可以使用$_GET變數來獲取,$_GET變數實際上就是一個數組
<?php
	header("Content-Type: text/html; charset=utf-8");
	if($_SERVER['REQUEST_METHOD']== 'GET'){
		if(isset($_GET['amount'])){
			echo $_GET['amount'];
			exit;
		}
	}
?>
<form action='' method="get">
	<input type="text" name="amount">
	<input type="submit" value="提交">
</form>

$_POST

  • $_POST
    • 對於POST方式提交的表單,可以使用$_POST變數來獲取,$_POST變數實際上也是一個數組
<?php
	header("Content-Type: text/html; charset=utf-8");
	if($_SERVER['REQUEST_METHOD']== 'POST'){
		if(isset($_POST['amount'])){
			echo $_POST['amount'];
			exit;
		}
	}
?>
<form action='' method="post">
	<input type="text" name="amount">
	<input type="submit" value="提交">
</form>

$_REQUEST

  • $_REQUEST
    • 同時獲取$_GET $_POST $_COOKIE中的表單資料
<?php
	header("Content-Type: text/html; charset=utf-8");
	if($_SERVER['REQUEST_METHOD']== 'POST' || 'GET'){
		if(isset($_REQUEST['amount'])){
			echo $_REQUEST['amount'];
			exit;
		}
	}
?>
<form action='' method="post">
	<input type="text" name="amount">
	<input type="submit" value="提交">
</form>

$_SERVER

  • $_SERVER

    • 在Web伺服器中儲存頁面互動資訊
    • 是由Web伺服器建立的資訊陣列
    • 用於存放HTTP請求頭資訊以及Web伺服器資訊
  • HTTP請求頭資訊

    • HTTP_HOST Web伺服器的地址
    • HTTP_USER_AGENT 客戶端作業系統和瀏覽器資訊
    • HTTP_ACCEPT 當前HTTP請求的Accept頭部資訊
    • HTTP_ACCEPT_LANGUAGE 當前HTTP請求的Accept_Language頭部資訊
    • HTTP_ACCEPT_ENCODING 當前HTTP請求的Accept_Encoing頭部資訊
    • HTTP_REFERER 連結到當前頁面的前一頁面的URL地址
  • Web伺服器資訊

    • SERVER_NAME Web伺服器的名字
    • SERVER_ADDR Web伺服器的IP地址
    • SERVER_PORT Web伺服器的埠號
    • REMOTE_ADDR 客戶端IP地址
    • DOCUMENT_ROOT Web伺服器中的應用程式碼存放地址
    • SERVER_ADMIN Web伺服器的管理員賬號
    • SCRIPT_FILENAME 當前訪問的指令碼檔案的檔名
    • REMOTE_PORT 客戶端使用的埠號
    • GATEWAY_INTERFACE 閘道器介面資訊
    • SERVER_PROTOCOL Web伺服器使用的協議資訊
    • REQUEST_METHOD 客戶端發出的HTTP請求中使用的方法
    • QUERY_STRING 客戶端發出的HTTP請求中的引數串
    • REQUEST_URI URL中的路徑部分
    • SCRIPT_NAME 當前訪問的指令碼檔案的相對路徑
    • PHP_SELF 當前訪問的PHP指令碼檔案的相對路徑
    • REQUEST_TIME 客戶端發出HTTP請求的時間
<?php
	echo "客戶端的IP地址:{$_SERVER['REMOTE_ADDR']}<br>";
	echo "檔案的存放位置:{$_SERVER['DOCUMENT_ROOT']}<br>";
	echo "指令碼檔案的名稱:{$_SERVER['SCRIPT_FILENAME']}<br>";
	echo "表單的請求方式:{$_SERVER['REQUEST_METHOD']}<br>";
	echo "檔案的相對路徑:{$_SERVER['PHP_SELF']}<br>";
?>

$GLOBALS

  • 超全域性變數$GLOBALS
    • 是一個引用全域性作用域中全部可用變數的陣列
    • 變數名就是陣列的鍵
<?php
	function test(){
		$foo1= "泥萌";
		echo "{$foo1}<br>";
		echo "{$GLOBALS['foo2']}<br>";
		echo "{$GLOBALS['foo3']}<br>";
		var_dump($GLOBALS);
	}
	$foo2= '蝸萌';
	$foo3= '塔萌';
	test();
?>