Chuyển hướng trình duyệt, download file bằng HTTP Header trong PHP
- 18-03-2023
- Toanngo92
- 0 Comments
Mục lục
Chuyển hướng trình duyệt trong PHP
Chuyển hướng trình duyệt là một trong những chức năng có thể được thực hiện trong PHP. PHP sử dụng hàm header() để thực hiện điều này.
Tập lệnh chuyển hướng phải được viết ở file, trước khi chạy hoặc tải bất kỳ mã PHP nào khác. Hàm header() của PHP giúp chuyển hướng trình duyệt, bằng cách cung cấp các HTTP header thô cho nó. Điều này giúp chuyển hướng đến một vị trí khác. Người ta có thể chỉ định đích bằng cách sử dụng vị trí và truyền header làm đối số cho hàm header(). Để kết thúc tập lệnh để chuyển hướng, nên sử dụng hàm exit() để ngừng tính toán phần còn lại của mã.
Ví dụ:
header("Location: https://hocvietcode.com");
Download file trong PHP
Một chức năng khác của HTTP header là giúp tạo các liên kết.
Khi người dùng nhấp vào các liên kết này, họ sẽ nhận được một cửa sổ bật lên hoặc hộp thoại trợ giúp trong ‘Tải xuống tệp’.
Ví dụ:
<?php
header("Content-Type: application/octet-stream; name=abc.xlsx\n\n") ;
header( "Content-Disposition: attachment; filename=abc.xlsx\n\n");
// actual file content
$fp = fopen( "test.xlsx","r");
readfile( "test.xlsx");
fclose( $fp);
Ví dụ tính năng download file. Tạo file formdownload.php
<html>
<head>
<title>Download Files</title>
</head>
<body>
<p><a href="download.php?path=xyz.txt">Download TEXT file</a></p>
<p><a href="download.php?path=table.zip">Download ZIP file</a></p>
<p><a href="download.php?path=student.pdf">Download PDF file</a></p>
<p><a href="download.php?path=module.jpg">Download JPG file</a></p>
</body>
</html>
Tạo file download.php để xử lý:
<?php
if (isset($_GET['path'])) {
//Read the filename
$filename = $_GET['path'];
//Check if the file exists or not
if (file_exists($filename)) {
//Define header information
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Content-Length: ' . filesize($filename));
header('Pragma: public');
//Clear system output buffer
flush();
//Read the file size
readfile($filename);
//Terminate from the script
die();
} else {
echo "There is no file to download.";
}
} else {
echo "Name of the file is not defined here.";
}
Với các cách sử dụng này kèm với database, chúng ta có thể làm tính năng download mà ẩn đường dẫn của file gốc, giúp bảo mật hơn cho các ứng dụng download.