LAB PHP (CB) 10
QUY TRÌNH DOWNLOAD FILE TRONG PHP
A – LÝ THUYẾT
I – QUY TRÌNH DOWNLOAD FILE TRONG PHP
Qúa trình Download
một File chính là quá trình đọc nội dung của File đó rồi trả về cho Browser để
xử lý
Để bắt đầu xây
dựng một chương trình Download File đơn giản chúng ta phải trải qua các quy
trình sau:
1 - Quy trình mở và đóng
một File thông thường
Đây chính là quá
trình mở và đóng một File muốn Download theo cách đọc file thông thường ở dạng
nhị phân binary
2 - Quy trình thông báo dữ
liệu trả về cho Browser
Đây chính là quá
trình báo cho browser biết dữ liệu trả về từ server là dữ liệu nhị phân chứ
không phải là văn bản HTMl như thông thường
3 - Quy trình thông báo dung
lượng File
Đây chính là quá trình báo cho Browser biết dung lượng của File sẽ được tải xuống
4 - Quy trình đọc nội dung
File
Đây chính là quá
trình đọc nội dung của File và echo lại
cho Browser Download
Chúng ta thấy quá trình $fr = fpassthru($fo) ó với 2 lệnh sau:
$content = fread($fo, filesize($fpath));
echo $content;
5 - Quy trình lưu và đổi
tên của File
Đây chính là quá
trình sẽ báo cho Browser biết là nên Download và Save File thay vì Open. Đồng
thời sẽ báo cho Browser biết tên của
file đang được Download
Trong hàm header(“Content-disposition:
attachment; filename=$filename”); chúng ta có
·
Tham số "attachment"
của header "Content-disposition" sẽ báo cho Browser biết là nên
Download và save file thay vì Open
·
Tham số "filename="
sẽ báo cho browser biết tên của File đang được Download
6 – Một số kiểu dữ liệu
tương ứng với các kiểu File thông dụng
Mặc định PHP sẽ trả về dữ liệu kiểu text/html cho
browser. Một số kiểu dữ liệu tương ứng với các kiểu file thông dụng:
·
.GIF: image/gif
·
.JPG: image/jpeg
·
.PNG: image/png
·
.WAV: audio/wav
·
.MP3: audio/mpeg3
·
.DOC: application/msword
·
.PDF: application/pdf
Tuỳ vào kiểu của dữ liệu trả về mà browser có thể sẽ có
những cách ứng khác nhau. Ví dụ nếu dữ liệu trả về là file ảnh thì browser sẽ
hiển thị luôn, nếu là file nhạc thì browser sẽ gọi WMP lên để play, nếu là file
PDF thì chương trình Acrobat sẽ được gọi... Kiểu application/octet-stream để
chỉ dữ liệu nhị phân (binary) chung chung. Nếu bạn chỉ muốn browser download và
save file thì bạn chỉ cần trả về kiểu dữ liệu application/octet-stream là đủ.
B – BÀI TẬP
I – BÀI TẬP THỰC HÀNH
Bài 1:
Xây dựng một ứng dụng Download như hình dưới đây. Khi
người dùng thực hiện Click vào link Download Now! Thì sẽ tiến hành cho phép
Download file đã được định sẵn. Xem file hướng dẫn giải bai_tap_1.php để có thể
xây dựng các chức năng của ứng dụng một cách chính xác hơn
II – BÀI TẬP VỀ NHÀ
Bài 2:
Xây dựng một chương trình Download File nâng cao với các
yêu cầu về chức năng như sau:
- Hiển thị danh sách các File dữ
liệu với các thông tin như (Tên
file, Icon mô tả kiểu file, link download file tương ứng)
- Người dùng lựa chọ File cần
download và Click vào link Download tương ứng của File đó để tiến hành
Download File
Xem hình dưới và file bài giải bai_tap_2.php để có thể
xây dựng được ứng dụng một cách chính xác nhất
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bài 1</title>
<style type="text/css">
a{
font:arial;
font-size:20px;
font-weight:bold;
color:#FF0000;
text-transform:capitalize;
}
a:hover{
color:#FFFF00;
text-decoration:underline;
}
</style>
</head>
<body>
<center><a href="download_bai_tap_1.php">download now!</a></center>
</body>
</html>
nội dung file download_bai_tap_1.php
<?php
$fp = "textfile.rar";
$fo = fopen($fp, "rb");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($fp));
header("Content-Disposition: attachment; filename=".$fp);
$fr = fpassthru($fo);
$fc = fclose($fo);
?>
Bài 2:
Nội dung file bai2.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
table tr td#menu_title{
font-family:arial;
font-size:14px;
font-weight:bold;
color:#FFFFFF;
text-transform:uppercase;
padding:5px 0px;
background:#FF6600;
}
table tr td.title{
font-family:arial;
font-size:12px;
font-weight:bold;
text-transform:capitalize;
padding-left:5px;
}
table tr td.img{
text-align:center;
}
table tr td.download{
text-align:center;
}
table tr td.download a{
font-family:arial;
font-size:12px;
color:#0000FF;
text-transform:capitalize;
}
</style>
</head>
<body>
<table border="1" align="center" width="500">
<tr>
<td id="menu_title" colspan="3" align="center">danh sách các file tài liệu học tập</td>
</tr>
<tr>
<td class="title">giáo trình thiết kế website tĩnh html cơ bản</td>
<td class="img"><img width="40" height="40" src="images/rar.jpg" /></td>
<td class="download"><a href="download_bai_tap_2.php?file=html_can_ban.rar">download file</a></td>
</tr>
<tr>
<td class="title">giáo trình lập trình website với javascript cơ bản</td>
<td class="img" width="50"><img width="50" height="40" src="images/doc.jpg" /></td>
<td class="download" width="100"><a href="download_bai_tap_2.php?file=javascript_can_ban.doc">download file</a></td>
</tr>
<tr>
<td class="title">giáo trình lập trình website động với ngôn ngữ php</td>
<td class="img"><img width="40" height="40" src="images/pdf.png" /></td>
<td class="download"><a href="download_bai_tap_2.php?file=php_can_ban.pdf">download file</a></td>
</tr>
<tr>
<td class="title">thời khóa biểu và lịch học các môn lập trình website</td>
<td class="img"><img width="40" height="40" src="images/jpg.jpg" /></td>
<td class="download"><a href="download_bai_tap_2.php?file=thoi_khoa_bieu.jpg">download file</a></td>
</tr>
</table>
</body>
</html>
$filename = $_GET["file"];
$fp = "file/".$filename;
$fo = fopen($fp, "rb");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($fp));
header("Content-Disposition: attachment; filename=".$filename);
$fr = fpassthru($fo);
$fc = fclose($fo);
?>
>>Xem ngay: Bài 30 - PHP basic buổi 9 - QUY TRÌNH UPLOAD FILE TRONG PHP
No comments:
Post a Comment