Các biến toàn cục - superglobal trong php


php tham khảo 10/09/2015 Cùng chuyên mục

Giới thiệu về biến toàn cục - các mảng có phạm vi toàn cục trong php như $_SERVER, $_GET, $_POST, $_COOKIE, $_SESSION, $_FILES

Bài này giới thiệu cách tạo 1 biến có phạm vi toàn cục và các biến toàn cục sẵn có của PHP

Tạo biến có phạm vi toàn cục

Biến có phạm vi toàn cục có nghĩa là nó có thể truy xuất - sửa giá trị, gán giá trị ở bất cứ đâu ( trong hàm và ngoài hàm ). Các biến có phạm vi cục bộ khi đưa vào trong hàm - giá trị tạm thời thay đổi nhưng khi ra khỏi thân hàm thì giá trị trở lại như cũ, biến toàn cục thì ngược lại khi đưa vào trong hàm giá trị của nó bị thay đổi. Biết được điều này giúp bạn điều khiển được dòng dữ liệu trong lập trình. Gỉa sử một biến cục bộ sau một phép biến đổi ( thông qua hàm ) thì giá trị của nó là không đổi - trong khi đó bạn muốn kết quả của phép biến đổi được xuyên suốt trong chương trình thông qua một đại lượng - bạn muốn đảm bảo tính thống nhất dễ hiểu của chương trình từ đầu đến cuối => sử dụng biến toàn cục.

Để khai báo biến toàn cục, ta đặt nó là một khóa trong mảng $GLOBALS[]. Ví dụ: Khai báo hàm my_pow($x,$n) là kết quả của phép toán x^n

	function my_pow($x,$n = 0)
	{		
		$GLOBALS['pow'] = $x;
		for($i = 1; $i < $n; $i++)
		{
			 $GLOBALS['pow'] *= $x;
		}		
	}
	$x = 2;
	my_pow(2,2);
	print $pow;

 Để đáp ứng các nhu cầu chung - PHP có một danh sách các biến toàn cục của hệ thống - đây đều là các mảng toàn cục, bạn có thể lấy và gán giá trị ở bất cứ chỗ nào ( trong thân hàm, ngoài hàm - trong các lớp - ngoài lớp...vv):

  • $_SERVER - lưu trữ các thông tin của SERVER 
  • $_REQUEST - lưu trữ các biến truyền lên bởi cả phương thức GET và POST
  • $_POST - lưu trữ dữ liệu truyền đi từ máy client bằng phương thức POST
  • $_GET -  lưu trữ dữ liệu truyền đi từ máy client bằng phương thức GET
  • $_FILES -  lưu trữ thông tin file upload lên server
  • $_COOKIE - lưu trữ dữ liệu cookie nhận được từ trình duyệt người dùng
  • $_SESSION - lưu các biến session

THAM KHẢO THÔNG TIN MẢNG $_SERVER

Tên biến Mô tả
$_SERVER['PHP_SELF'] Đường dẫn tính từ thư mục gốc tới file đang thực thi ví dụ: hoc_php/index.php
$_SERVER['SERVER_ADDR'] Địa chỉ IP của máy người dùng truy cập
tại server offline sẽ chỉ xuất ra ::1
$_SERVER['SERVER_NAME'] Tên host của server như www.abc.com
$_SERVER['SERVER_SOFTWARE'] Phầm mềm máy chủ như Apache /2.2.26
$_SERVER['SERVER_PROTOCOL'] Giao thức kết nối và phiên bản như HTTP 1.1
$_SERVER['REQUEST_METHOD'] Phương thức truyền, yêu cầu dữ liệu của máy client như GET hay POST
$_SERVER['SCRIPT_FILENAME'] Đường dẫn tuyệt đối của file đang thực thi như: D:/xampp/htdocs/hoc_php/index.php
$_SERVER['DOCUMENT_ROOT'] Đường dẫn tới thư mục gốc như D:/xampp/htdocs
$_SERVER["HTTP_ACCEPT"] Các kiểu dữ liệu trả ra mà server hỗ trợ như text/html
$_SERVER["HTTP_USER_AGENT"] Thông tin xác thực máy người dùng như Hệ điều hành - trình duyệt

Các trường hợp hay sử dụng mảng $_SERVER

$_SERVER['DOCUMENTROOT'] - dùng để xác định thư mục gốc => hay dùng để tạo hoặc dò tìm thư mục hoặc các công việc xử lý thông qua thư mục và tập tin

$_SERVER['REQUEST_METHOD'] - dùng để xác định phương thức truyền đi, chẳng hạn một ứng dụng mốt lưu trữ dữ liệu vào Cơ Sở Dữ Liệu, phương thức truyền đi an toàn và mong muốn là phương thức POST - nếu phương thức truyền đi nhận được là GET hay một phương thức khác thì có thể do kẻ tấn công. 

$_SERVER['SERVER_ADDR'] và $_SERVER["HTTP_USER_AGENT"] dùng trong việc xác thực người dùng. 

$_SERVER['SERVER_NAME'] dùng để xác định trang chủ cho website (base_url)

Các mảng toàn cục khác như $_POST, $_GET, $_COOKIE, $_SESSION đã tìm hiểu trong bài form và cookie-sesion.

Ví dụ: xuất ra các thông tin của server

	echo '<br>';
	echo 'duong dan tuong doi toi file dang chay: ',$_SERVER['PHP_SELF'],'<br>';
	echo 'dia chi IP : ',$_SERVER['SERVER_ADDR'],'<br>';
	echo 'HOST NAME : ',$_SERVER['SERVER_NAME'],'<br>';
	echo 'duong dan tuyet doi toi file dang chay: ',$_SERVER['SCRIPT_FILENAME'],'<br>';
	echo 'thong tin nguoi dung',$_SERVER["HTTP_USER_AGENT"],'<br>';	
	echo 'thu muc goc: ',$_SERVER['DOCUMENT_ROOT];

TỔNG KẾT

Bài này giới thiệu biến toàn cục trong PHP - cách khai báo biến toàn cục - các mảng toàn cục có sẵn và hay dùng trong PHP cũng như một số trường hợp sử dụng. 




Bình luận: