Biến siêu toàn cầu trong PHP
Biến siêu toàn cầu trong PHP đã được giới thiệu trong PHP 4.1.0, và được xây dựng trong các biến mà luôn có thể được được sử dụng trong tất cả các phạm vi. Mời bạn đọc cùng eLib tìm hiểu qua bài viết dưới đây.
Mục lục nội dung
1. Biến siêu toàn cầu trong PHP - Superglobals
Một số biến được định nghĩa trước trong PHP là "superglobals", có nghĩa là chúng luôn có thể truy cập, bất kể phạm vi - và bạn có thể truy cập chúng từ bất kỳ hàm, lớp hoặc tệp nào mà không phải thực hiện bất kỳ điều gì đặc biệt.
Các biến superglobal trong PHP là:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
Bài này chúng ta sẽ học một số superglobals, và phần còn lại sẽ được giải thích trong các chương sau.
2. PHP $GLOBALS
Biến siêu toàn cầu $GLOBALS trong PHP là một biến siêu toàn cầu trong PHP được sử dụng để truy cập các biến toàn cầu từ bất kỳ đâu trong kịch bản lệnh PHP (cũng từ bên trong các hàm hoặc các phương thức).
PHP lưu trữ tất cả các biến toàn cầu trong một mảng gọi là $GLOBALS[index]. Các chỉ số là 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ầu $GLOBALS:
<?php
$x = 75;
$y = 25;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
Kết quả:
100
Trong ví dụ trên, vì $z là một biến của mảng $GLOBALS, nên nó cũng có thể truy cập từ bên ngoài hàm!
3. PHP $_SERVER
Biến siêu toàn cầu $_SERVER trong PHP là một biến siêu toàn cầu trong PHP chứa thông tin về các tiêu đề, đường dẫn và vị trí tập lệnh.
Ví dụ bên dưới cho thấy 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_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
Kết quả:
/php/bien-server.php
localhost
localhost
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
/php/bien-server.php
Bảng sau đây liệt kê các phần tử quan trọng nhất có thể chuyền vào $_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 của CGI máy chủ được sử dụng |
$ _ SERVER ['SERVER_ADDR'] | Trả về địa chỉ IP của máy chủ lưu trữ |
$ _ SERVER ['SERVER_NAME'] | Trả về tên của máy chủ lưu trữ (chẳng hạn như viettuts.vn) |
$ _ SERVER ['SERVER_SOFTWARE'] | Trả về chuỗi nhận dạng máy chủ (chẳng hạn như Apache/2.2.24) |
$ _ SERVER ['SERVER_PROTOCOL'] | Trả về tên và phiên bản giao thức thông tin (chẳng hạn như HTTP/1.1) |
$ _ SERVER ['REQUEST_METHOD'] | Trả về phương thức request được sử dụng để truy cập trang (chẳng hạn như POST) |
$ _ SERVER ['REQUEST_TIME'] | Trả về timestamp bắt đầu 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 qua chuỗi truy vấn |
$ _ SERVER ['HTTP_ACCEPT'] | Trả về Accept header từ request hiện tại |
$ _ SERVER ['HTTP_ACCEPT_CHARSET'] | Trả về Accept_Charset header từ request hiện tại (chẳng hạn như utf-8, ISO-8859-1) |
$ _ SERVER ['HTTP_HOST'] | Trả về Host header từ request 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ả user-agents hỗ trợ nó) |
$ _ SERVER ['HTTPS'] | Tập lệnh được truy vấn thông qua giao thức HTTP bảo mật |
$ _ 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ủ lưu trữ từ nơi người dùng đang xem trang hiện tại |
$ _ SERVER ['REMOTE_PORT'] | Trả về port đang được sử dụng trên máy của người dùng để giao tiếp 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 đưa ra cho chỉ thị SERVER_ADMIN trong tệp 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, nó sẽ là giá trị được xác định cho máy chủ ảo đó) |
$ _ SERVER ['SERVER_PORT'] | Trả về port trên máy chủ đang được máy chủ web sử dụng cho giao tiếp (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 cho 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 |
4. PHP $_REQUEST
Biến siêu toàn cầu $_REQUEST trong PHP được sử dụng để thu thập dữ liệu sau khi gửi HTML FORM.
Chúng ta có thể sử dụng biến siêu toàn cầu $_REQUEST để thu thập giá trị của trường nhập:
Ví dụ: file vi-du-bien-request.php
<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") {
// lấy giá trị của trường fname
$name = $_REQUEST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo "Name is: " . $name;
}
}
?>
</body>
</html>
5. PHP $_POST
Biến siêu toàn cầu PHP $_POST được sử dụng rộng rãi để thu thập dữ liệu HTML Form có method = "post". $_POST cũng được sử dụng rộng rãi để truyền các biến.
Ví dụ: file vi-du-bien-post.php
<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") {
$name = $_REQUEST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo "Name is: " . $name;
}
}
?>
</body>
</html>
6. PHP $_GET
Biến siêu toàn cầu PHP $_GET cũng có thể được sử dụng để thu thập dữ liệu HTML Form có method = "get".
$_GET cũng có thể thu thập dữ liệu được gửi trong URL.
Giả sử chúng ta có URL với các tham số: "test-get.php?subject=PHP&web=viettuts.vn"
Khi người dùng mở liên kết trên trình duyệt các tham số "subject" và "web" được gửi đến "test_get.php", ví dụ.
File: test-get.php
<html>
<body>
<?php
echo "Học lập trình" . $_GET['subject'] . " online tại " . $_GET['web'];
?>
</body>
</html>