Trong PHP, biến toàn cục (global variables) là các biến có thể truy cập từ bất kỳ đâu trong mã, bao gồm cả bên trong các hàm và phương thức. Một nhóm đặc biệt của các biến toàn cục trong PHP được gọi là superglobals. Các biến superglobals cung cấp quyền truy cập vào nhiều thông tin hữu ích, bao gồm dữ liệu từ form, thông tin máy chủ và nhiều hơn nữa. Bài viết này sẽ giải thích chi tiết về các superglobals trong PHP, cách chúng hoạt động, và các ví dụ cụ thể.
1. Superglobals là gì?
Superglobals là các biến được định nghĩa trước trong PHP, và có thể truy cập ở bất kỳ đâu trong mã mà không cần phải khai báo global. Chúng được gọi là "super" vì chúng có thể truy cập từ tất cả các phạm vi trong một ứng dụng PHP, kể cả bên trong các hàm, class, hoặc tệp khác.
Các biến superglobals phổ biến nhất trong PHP bao gồm:
$_GET$_POST$_REQUEST$_SERVER$_FILES$_SESSION$_COOKIE$_ENV$_GLOBALS
Lưu ý: Tất cả các biến superglobals đều là mảng liên kết.
2. Các biến Superglobals thông dụng
2.1. $_GET
Biến $_GET được sử dụng để thu thập dữ liệu từ các tham số URL. Khi một người dùng gửi một yêu cầu HTTP với phương thức GET, dữ liệu sẽ được gửi dưới dạng chuỗi truy vấn (query string) trong URL, và bạn có thể truy cập dữ liệu này thông qua biến $_GET.
Ví dụ:
URL: https://example.com/page.php?name=Minh&age=25
<?php
echo "Tên: " . $_GET['name'] . "<br>";
echo "Tuổi: " . $_GET['age'];
?>Kết quả:
Tên: Minh
Tuổi: 252.2. $_POST
Biến $_POST được sử dụng để thu thập dữ liệu từ các form HTML khi người dùng gửi dữ liệu bằng phương thức POST. Phương thức POST an toàn hơn GET vì dữ liệu được gửi ẩn (không hiển thị trên URL).
Ví dụ:
HTML Form:
<form action="submit.php" method="post">
Tên: <input type="text" name="name">
Tuổi: <input type="number" name="age">
<input type="submit" value="Gửi">
</form>PHP (submit.php):
<?php
echo "Tên: " . $_POST['name'] . "<br>";
echo "Tuổi: " . $_POST['age'];
?>2.3. $_REQUEST
Biến $_REQUEST có thể thu thập dữ liệu được gửi từ cả phương thức GET và POST. Tuy nhiên, việc sử dụng $_REQUESTcó thể tiềm ẩn rủi ro bảo mật vì nó có thể chứa dữ liệu không rõ nguồn gốc.
Ví dụ:
<?php
echo "Tên: " . $_REQUEST['name'] . "<br>";
echo "Tuổi: " . $_REQUEST['age'];
?>$_REQUEST sẽ lấy dữ liệu từ cả $_GET hoặc $_POST, tùy thuộc vào phương thức gửi dữ liệu.
2.4. $_SERVER
Biến $_SERVER chứa thông tin về máy chủ và môi trường thực thi. Đây là một mảng chứa các thông tin về header, đường dẫn, và các vị trí script.
Các ví dụ phổ biến:
<?php
echo $_SERVER['PHP_SELF']; // Đường dẫn đến file đang chạy
echo $_SERVER['SERVER_NAME']; // Tên máy chủ
echo $_SERVER['HTTP_USER_AGENT']; // Thông tin về trình duyệt người dùng
echo $_SERVER['REMOTE_ADDR']; // Địa chỉ IP của người dùng
?>Kết quả:
/page.php<br>example.com<br>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36<br>192.168.1.1<br>2.5. $_FILES
Biến $_FILES được sử dụng để thu thập dữ liệu tệp (file) được tải lên thông qua form HTML. Để tải tệp lên, bạn cần sử dụng thuộc tính enctype="multipart/form-data" trong form.
Ví dụ:
HTML Form:
<form action="upload.php" method="post" enctype="multipart/form-data">
Chọn file: <input type="file" name="fileToUpload">
<input type="submit" value="Tải lên">
</form>PHP (upload.php):
<?php
if ($_FILES['fileToUpload']['error'] == 0) {
$file_name = $_FILES['fileToUpload']['name'];
$file_tmp = $_FILES['fileToUpload']['tmp_name'];
move_uploaded_file($file_tmp, "uploads/" . $file_name);
echo "Tệp đã tải lên thành công!";
} else {
echo "Lỗi khi tải tệp lên.";
}
?>2.6. $_SESSION
Biến $_SESSION được sử dụng để lưu trữ thông tin trên phiên làm việc của người dùng. Dữ liệu được lưu trữ trên server và có thể truy cập trong toàn bộ ứng dụng trong suốt phiên làm việc của người dùng.
Ví dụ:
Khởi tạo session:
<?php
session_start(); // Bắt đầu session
$_SESSION['user'] = "Minh"; // Lưu giá trị vào session
echo "Tên người dùng: " . $_SESSION['user'];
?>Xóa session:
<?php
session_start();
session_unset(); // Xóa tất cả session
session_destroy(); // Hủy phiên làm việc
?>2.7. $_COOKIE
Biến $_COOKIE được sử dụng để lưu trữ dữ liệu trên trình duyệt của người dùng dưới dạng cookie. Cookie có thể lưu trữ thông tin trong một khoảng thời gian nhất định.
Ví dụ:
Thiết lập cookie:
<?php
setcookie("username", "Minh", time() + 3600); // Cookie tồn tại trong 1 giờ
?>Truy cập cookie:
<?php
if (isset($_COOKIE['username'])) {
echo "Tên người dùng là: " . $_COOKIE['username'];
} else {
echo "Cookie chưa được thiết lập!";
}
?>2.8. $_ENV
Biến $_ENV được sử dụng để truy cập các biến môi trường. Những biến này thường được thiết lập bên ngoài chương trình PHP, ví dụ như cấu hình của hệ điều hành.
Ví dụ:
<?php
echo "PATH: " . $_ENV['PATH'];
?>2.9. $_GLOBALS
Biến $_GLOBALS là một mảng liên kết chứa tất cả các biến toàn cục trong PHP. Bạn có thể truy cập vào bất kỳ biến toàn cục nào thông qua $_GLOBALS từ bất kỳ đâu trong mã.
Ví dụ:
<?php
$x = 5;
$y = 10;
function sum() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
sum();
echo $z; // In ra: 15
?>3. Lưu ý về bảo mật
Khi làm việc với các biến superglobals như $_GET, $_POST, và $_REQUEST, bạn cần đặc biệt cẩn thận để tránh các lỗ hổng bảo mật như SQL Injection và Cross-Site Scripting (XSS). Để đảm bảo an toàn, luôn thực hiện:
- Kiểm tra và xác thực đầu vào người dùng: Đảm bảo dữ liệu người dùng nhập vào là hợp lệ.
- Escaping đầu vào: Sử dụng các hàm như
htmlspecialchars()hoặcmysqli_real_escape_string()để thoát các ký tự đặc biệt. - Sử dụng prepared statements khi làm việc với cơ sở dữ liệu để tránh SQL Injection.
4. Kết luận
Superglobals trong PHP cung cấp các công cụ mạnh mẽ để xử lý thông tin về người dùng, form, cookie, session và nhiều hơn nữa. Việc hiểu và sử dụng thành thạo các biến này sẽ giúp bạn xây dựng các ứng dụng web hiệu quả hơn. Tuy nhiên, luôn phải lưu ý về các vấn đề bảo mật khi xử lý dữ liệu từ các nguồn bên ngoài để đảm bảo ứng dụng an toàn.
Hy vọng bài viết này giúp bạn hiểu rõ hơn về các biến superglobals trong PHP và cách sử dụng chúng trong các dự án của bạn.









