Biến siêu toàn cục trong PHP

Biến siêu toàn cục là gì?

Biến siêu toàn cục (Superglobals) đã được giới thiệu trong PHP 4.1.0 và là các biến tích hợp luôn có sẵn trong tất cả các phạm vi.

Một số biến siêu toàn cục trong PHP có nghĩa là chúng luôn có thể truy cập được, bất kể phạm vi - và bạn có thể truy cập chúng từ bất kỳ chức năng, lớp hoặc file nào mà không phải làm gì đặc biệt.

Các biến siêu toàn cục của PHP là:

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

$GLOBALS trong PHP

$GLOBALS là một biến siêu toàn cục trong PHP được sử dụng để truy cập các biến toàn cục từ bất kỳ đâu trong tập lệnh PHP (cũng có thể truy cập từ bên trong các hàm hoặc phương thức).

PHP lưu trữ tất cả các biến toàn cục trong một mảng gọi là $GLOBALS[index], trong đó index lưu trữ tên của biến.

Ví dụ dưới đây cho thấy cách sử dụng biến siêu toàn cục $GLOBALS:

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

Đây là kết quả:

100

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

$_SERVER trong PHP

$_SERVER là một biến siêu toàn cục trong PHP chứa thông tin về các tiêu đề, đường dẫn và vị trí tập lệnh.

Ví dụ dưới đây minh họa cách sử dụng một số phần tử trong $_SERVER:

<?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'];
?>

Đây là kết quả:

/demo/demo_global_server.php
35.194.26.41
35.194.26.41
https://tech.comdy.vn/showphp.php?filename=demo_global_server
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36
/demo/demo_global_server.php

Bảng sau liệt kê các phần tử quan trọng nhất có thể có trong $_SERVER:

Phần tử/Mã Mô tả
$_SERVER['PHP_SELF'] Trả về tên file của tập lệnh hiện đang thực thi
$_SERVER['GATEWAY_INTERFACE'] Trả về phiên bản CGI mà máy chủ đang sử dụng
$_SERVER['SERVER_ADDR'] Trả về địa chỉ IP của máy chủ
$_SERVER['SERVER_NAME'] Trả về tên của máy chủ lưu trữ (chẳng hạn như tech.comdy.vn)
$_SERVER['SERVER_SOFTWARE'] Trả về chuỗi nhận dạng máy chủ (như Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL'] Trả về tên và thông tin giao thức (như HTTP/1.1)
$_SERVER['REQUEST_METHOD'] Trả về phương thức yêu cầu được sử dụng để truy cập trang (như POST)
$_SERVER['REQUEST_TIME'] Trả về mốc thời gian bắt đầu của yêu cầu (chẳng hạn như 1377687496)
$_SERVER['QUERY_STRING'] Trả về chuỗi truy vấn nếu trang được truy cập thông qua chuỗi truy vấn
$_SERVER['HTTP_ACCEPT'] Trả về tiêu đề Accept từ yêu cầu hiện tại
$_SERVER['HTTP_ACCEPT_CHARSET'] Trả về tiêu đề Accept_Charset từ yêu cầu hiện tại (chẳng hạn như utf-8, ISO-8859-1)
$_SERVER['HTTP_HOST'] Trả về tiêu đề Host từ yêu cầu hiện tại
$_SERVER['HTTP_REFERER'] Trả về URL đầy đủ của trang hiện tại (không đáng tin cậy vì không phải tất cả các tác nhân người dùng đều hỗ trợ nó)
$_SERVER['HTTPS'] Tập lệnh có được truy vấn thông qua giao thức HTTP an toàn không
$_SERVER['REMOTE_ADDR'] Trả về địa chỉ IP từ nơi người dùng đang xem trang hiện tại
$_SERVER['REMOTE_HOST'] Trả về tên Máy chủ từ nơi người dùng đang xem trang hiện tại
$_SERVER['REMOTE_PORT'] Trả về cổng đang được sử dụng trên máy của người dùng để liên lạc với máy chủ web
$_SERVER['SCRIPT_FILENAME'] Trả về tên đường dẫn tuyệt đối của tập lệnh hiện đang thực thi
$_SERVER['SERVER_ADMIN'] Trả về giá trị được cung cấp cho lệnh SERVER_ADMIN trong file cấu hình máy chủ web (nếu tập lệnh của bạn chạy trên máy chủ ảo, đó sẽ là giá trị được xác định cho máy chủ ảo đó)
$_SERVER['SERVER_PORT'] Trả về cổng trên máy chủ đang được máy chủ web sử dụng để liên lạc (chẳng hạn như 80)
$_SERVER['SERVER_SIGNATURE'] Trả về phiên bản máy chủ và tên máy chủ ảo được thêm vào các trang do máy chủ tạo
$_SERVER['PATH_TRANSLATED'] Trả về đường dẫn dựa trên hệ thống file vào tập lệnh hiện tại
$_SERVER['SCRIPT_NAME'] Trả về đường dẫn của tập lệnh hiện tại
$_SERVER['SCRIPT_URI'] Trả về URI của trang hiện tại

$_REQUEST trong PHP

$_REQUEST là một biến siêu toàn cục trong PHP được sử dụng để thu thập dữ liệu sau khi gửi biểu mẫu HTML.

Ví dụ dưới đây cho thấy một biểu mẫu với trường đầu vào là "Name" và nút gửi là "Submit".

Khi người dùng gửi dữ liệu bằng cách nhấp vào "Submit", dữ liệu biểu mẫu được gửi đến file được chỉ định trong thuộc tính action của thẻ <form>.

Trong ví dụ này, chúng tôi trỏ đến chính file này để xử lý dữ liệu biểu mẫu.

Nếu bạn muốn sử dụng một tệp PHP khác để xử lý dữ liệu biểu mẫu, hãy thay thế <?php echo $_SERVER['PHP_SELF'];?> bằng tên file bạn chọn.

Sau đó, chúng ta có thể sử dụng biến siêu toàn cục $_REQUEST để thu thập giá trị của trường đầu vào:

<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>

Đây là kết quả:

Biến siêu toàn cục $_REQUEST trong PHP

Khi bạn nhập tên bất kỳ vào ô Name và nhấn nút submit, hệ thống sẽ hiển thị tên đó ở phía dưới như sau:

Biến siêu toàn cục $_REQUEST trong PHP

$_POST trong PHP

$_POST là một biến siêu toàn cục trong PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML với phương thức POST (method="post"). $_POST cũng được sử dụng rộng rãi để truyền các biến.

Ví dụ dưới đây cho thấy một biểu mẫu với trường đầu vào là "Name" và nút gửi "Submit".

Khi người dùng gửi dữ liệu bằng cách nhấp vào "Submit", dữ liệu biểu mẫu được gửi đến file được chỉ định trong thuộc tính action của thẻ <form>.

Trong ví dụ này, chúng tôi trỏ đến chính file này để xử lý dữ liệu biểu mẫu.

Nếu bạn muốn sử dụng một tệp PHP khác để xử lý dữ liệu biểu mẫu, hãy thay thế <?php echo $_SERVER['PHP_SELF'];?> bằng tên file bạn chọn.

Sau đó, chúng ta có thể sử dụng biến siêu toàn cục $_POST để thu thập giá trị của trường đầu vào:

<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>

Đây là kết quả:

Biến siêu toàn cục $_POST trong PHP

Khi bạn nhập tên bất kỳ vào ô Name và nhấn nút submit, hệ thống sẽ hiển thị tên đó ở phía dưới như sau:

Biến siêu toàn cục $_POST trong PHP

$_GET trong PHP

$_GET là một biến siêu toàn cục trong PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML với phương thức GET (method="get").

Giả sử chúng ta có một trang HTML chứa siêu liên kết với các tham số:

<html>
<body>

<a href="test_get.php?subject=PHP&web=tech.comdy.vn">Test $GET</a>

</body>
</html>

Khi người dùng nhấp vào liên kết "Test $GET", các tham số "subject" và "web" được gửi đến trang "test_get.php" và sau đó bạn có thể truy cập các giá trị của chúng trong "test_get.php" bằng $_GET.

Ví dụ dưới đây cho thấy mã trong "test_get.php":

<html>
<body>

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

</body>
</html>

Khi người dùng click vào link sẽ hiện kết quả như sau:

Study PHP at tech.comdy.vn


Bài viết liên quan:

Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.