PHP – Biến toàn cục trong PHP (Superglobals)

Biến toàn cục – Superglobals đã được giới thiệu trong PHP 4.1.0 và là built-in variables luôn luôn có sẵn trong mọi phạm vi.

Một vài biến trong PHP là Superglobals. Bạn luôn có thể truy cập bất kỳ phạm vi vào. Có nghĩa là bạn có thể truy cập chúng trong bất kỳ function, class hay file mà không cần phải làm bất kỳ điều gì đặt biệt.

Trong PHP có các biến superglobal sau:

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

Trong chương này, chung ta sẽ giải thích một số superglobals, phần còn lại sẽ được trình bày ở chương sau.

$GLOBALS

$GLOBALS là một biến superglobal dùng để truy cập các biến global từ bất kỳ ở đâu trong cript PHP. (Từ bên trong hay bên ngoài function).

PHP lưu trữ tất cả các biến global trong một mảng tên là $GLOBALS[index]. Trong đó index là tên của biến global.

<?php 
$x = 75; 
$y = 25;
 
function addition() { 
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
 
addition(); 
echo $z; 
?>

Trong ví dụ trên, vì biến $z nằm trong mảng $GLOBALS nên nó có thể được truy cập từ bên ngoài function.

$_SERVER

$_SERVER là một biến superglobal chứa thông tin về headers, paths và script locations.

<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
Code Mô tả
$_SERVER[‘PHP_SELF’] Return tên file của file đang thực thi.
$_SERVER[‘GATEWAY_INTERFACE’] Return về version của Common Gateway Interface (CGI) mà server đang dùng.
$_SERVER[‘SERVER_ADDR’] Return về IP address của host server
$_SERVER[‘SERVER_NAME’] Return về tên tên của host server (ví dụ www.w3schools.com)
$_SERVER[‘SERVER_SOFTWARE’] Return về chuỗi nhận dạng server (ví dụ Apache/2.2.24)
$_SERVER[‘SERVER_PROTOCOL’] Return về tên và phiên bản của protocol ( ví dụ HTTP/1.1)
$_SERVER[‘REQUEST_METHOD’] Return về phương thức yêu cầu được sử dụng để truy cập trang (ví dụ POST)
$_SERVER[‘REQUEST_TIME’] Return về timestamp bắt đầu của request (ví dụ 1377687496)
$_SERVER[‘QUERY_STRING’] Return về chuỗi truy vấn nếu trang được truy cập thông qua chuỗi truy vấn
$_SERVER[‘HTTP_ACCEPT’] Return về Accept header từ request hiện tại.
$_SERVER[‘HTTP_ACCEPT_CHARSET’] Return về Accept_Charset header từ request hiện tại. (ví dụ utf-8,ISO-8859-1)
$_SERVER[‘HTTP_HOST’] Return về Host header từ request hiện tại.
$_SERVER[‘HTTP_REFERER’] Return về URL đầy đủ của trang hiện tại ( Không phải tất cả user-agents đều hỗ trợ)
$_SERVER[‘HTTPS’] Script có được truy vấn thông qua giao thức HTTP an toàn không.
$_SERVER[‘REMOTE_ADDR’] Return về địa chỉ IP từ nơi người dùng đang xem trang hiện tại.
$_SERVER[‘REMOTE_HOST’] Return về Host name từ nơi người dùng đang xem trang hiện tại.
$_SERVER[‘REMOTE_PORT’] Return về port đang sử dụng của máy người dùng để kết nối với web server.
$_SERVER[‘SCRIPT_FILENAME’] Return về đường đã tuyệt đối của file đang thực thi.
$_SERVER[‘SERVER_ADMIN’] Return về giá trị xác định cho SERVER_ADMIN trong tập tin cấu hình web server. Nếu script chạy trên virtual host, nó sẽ có giá trị được xác định cho virtual host đó (ví dụ someone@w3schools.com)
$_SERVER[‘SERVER_PORT’] Return về port của máy chủ được dùng bởi web server cho kết nối. (ví dụ 80)
$_SERVER[‘SERVER_SIGNATURE’] Return về phiên bản server và tên virtual host
$_SERVER[‘PATH_TRANSLATED’] Return về đường dẫn file hệ thống dựa vào script hiện tại.
$_SERVER[‘SCRIPT_NAME’] Return về đường dẫn của script hiện tại.
$_SERVER[‘SCRIPT_URI’] Return về URI của trang hiện tại.

$_REQUEST

PHP $_REQUEST dùng để lưu trữ dữ liệu sau khi submit form từ HTML.

Ví dụ sau sẽ hiển thị 1 input nhập dữ liệu và 1 nút submit. Khi người dùng gửi thông tin bằng cách nhấn submit, dữ liệu từ form được gửi đến file php trong thuộc tính action của thẻ <form>. Trong ví dụ này, chúng ta sẽ gửi đến chính nó ( dùng $_SERVER[‘PHP_SELF’] để lấy path đường dẫn file hiện tại). Nếu muốn gửi đến 1 file khác, bạn có thể thay thế nó. Sau đó dùng biến superglobal $_REQUEST để lưu giữ thông tin từ form.

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_REQUEST['fname'];
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

</body>
</html>

$_POST

PHP $_POST rất thường được dùng để lưu trữ dữ liệu từ form HTML với method=”post”. $_POST cũng được dùng để truyền các biến.

Ví dụ sau sẽ hiển thị 1 input nhập dữ liệu và 1 nút submit. Khi người dùng gửi thông tin bằng cách nhấn submit, dữ liệu từ form được gửi đến file php trong thuộc tính action của thẻ <form>. Trong ví dụ này, chúng ta sẽ gửi đến chính nó ( dùng $_SERVER[‘PHP_SELF’] để lấy path đường dẫn file hiện tại). Nếu muốn gửi đến 1 file khác, bạn có thể thay thế nó. Sau đó dùng biến superglobal $_POST để lưu giữ thông tin từ form.

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_POST['fname'];
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

</body>
</html>

$_GET

PHP $_GET có thể được dùng để lưu dữ liệu từ form HTML với method=”get”.

$_GET cũng thế thể lưu trữ dữ liệu trong url.

Giả sử chúng ta có một trang HTML có chứa link với các tham số:

<html>
<body>

<a href="test_get.php?subject=PHP&web=W3schools.com">Test $GET</a>

</body>
</html>

Khi người dùng click vào link “Test $GET”, các tham số “subject” và “web” sẽ được gửi đến “test_get.php” và bạn có thể lấy dữ liệu của chúng trong file “test_get.php” thông qua biến $_GET.


<html>
<body>

<?php
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>

</body>
</html>