Bài 31 - PHP basic buổi 10 - QUY TRÌNH DOWNLOAD FILE TRONG PHP

 

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


Đáp án:

Bài 1:

Nội dung file bài_1.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>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>

nội dung file download_bai_tap_2.php

 <?php

$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