Hướng dẫn php header download image - tải xuống hình ảnh tiêu đề php
Ở bài trước chúng ta đã học về upload file, hôm nay chúng ta sẽ học về cách Download file sử dụng PHP.Download file sử dụng PHP. Download File trong PHPBình thường bạn không nhất thiết phải sử dụng bất kỳ ngôn ngữ nào như PHP để tải xuống hình ảnh, tệp zip, tài liệu pdf, tệp exe, v.v … Nếu loại tệp đó được lưu trữ trong một thư mục có thể truy cập công khai, bạn chỉ cần tạo một đường link trỏ đến tệp đó và bất cứ khi nào người dùng nhấp vào liên kết, trình duyệt sẽ tự động tải tệp đó xuống. Ví dụ:
Click vào đường link trỏ đến tệp PDF hoặc tệp Image sẽ không tải file xuống máy tính. Nó sẽ chỉ mở file trong trình duyệt. Sau đó bạn có thể lưu nó. Tuy nhiên, các tệp zip và exe thì được tự động tải xuống. Chức năng Download file sử dụng PHPBạn có thể bắt buộc hình ảnh hoặc loại file khác tải trực tiếp xuống máy tính của người dùng bằng hàm readfile() của PHP.hàm readfile() của PHP. Ở đây chúng ta sẽ tạo một bộ sưu tập hình ảnh đơn giản cho phép người dùng tải xuống các tệp hình ảnh từ trình duyệt chỉ bằng một cú click chuột. Hãy tạo một tệp có tên ‘image-gallery.php’ và đặt đoạn mã sau vào trong nó.
Nếu bạn xem mã ví dụ trên một cách cẩn thận, bạn sẽ thấy liên kết tải xuống dẫn đến file ‘download.php’, URL cũng chứa tên tệp hình ảnh dưới dạng chuỗi truy vấn.‘download.php’, URL cũng chứa tên tệp hình ảnh dưới dạng chuỗi truy vấn. Ngoài ra, chúng ta đã sử dụng hàm urlencode() của PHP để mã hóa tên tệp hình ảnh để nó có thể được truyền an toàn dưới dạng tham số URL, bởi vì tên tệp có thể chứa các ký tự không an toàn. hàm urlencode() của PHP để mã hóa tên tệp hình ảnh để nó có thể được truyền an toàn dưới dạng tham số URL, bởi vì tên tệp có thể chứa các ký tự không an toàn. Đây là mã hoàn chỉnh của tệp ‘download.php‘ để bắt buộc tải xuống hình ảnh.download.php‘ để bắt buộc tải xuống hình ảnh.
Tổng kếtNhư vậy, bạn đã biết sử dụng PHP để bắt buộc Download file xuống máy tính người dùng. Bạn cũng có thể buộc tải xuống các định dạng tệp khác như word doc, tệp pdf, v.v. sử dụng PHP để bắt buộc Download file xuống máy tính người dùng. Bạn cũng có thể buộc tải xuống các định dạng tệp khác như word doc, tệp pdf, v.v. GIỚI THIỆUCó lẽ cũng không cần giới thiệu nhiều về nhu cầu "giấu diếm" này vì hiện nay có khá nhiều site sử dụng cách quản lý download như vậy và cũng có số lượng cũng nhiều không kém các site mới muốn tìm hiểu và sử dụng nó ;-) Tuy nhiên, có lẽ không thừa nếu như chúng ta tìm hiểu kỹ hơn một chút về lý do sử dụng một chương trình download manager trên website để giấu đường dẫn thực sự đến các file download.Quản lý băng thông và "tài sản" là 2 lý do chính để sử dụng 1 chương trình quản lý download trên website. Bạn thử tưởng tượng có 1 website cho download nhạc hoặc ebook với 1 mức phí nho nhỏ, nếu mà link để download trực tiếp các file bị lộ tùm lum thì thứ nhất là "lỗ vốn", thứ hai là bandwidth sẽ hết sạch nhanh đến nỗi trước khi bạn kịp hiểu chuyện gì đã xảy ra.Một số lý do khác cũng "chính đáng" không kém ví dụ như bạn muốn đếm số lần download file; hoặc website của bạn tự upload file của mình lên và các file này lại nằm trong database hoặc được để trong 1 thư mục mà từ ngoài web không đọc được. Trong những trường hợp như vậy, sử dụng 1 chương trình quản lý download trên website sẽ khá tiện lợi.Tuy nhiên, cũng có vài điều cần chú ý trước khi bạn quyết định sử dụng 1 chương trình quản lý download trên website của mình:
CHƯƠNG TRÌNH ĐẦU TIÊNGiả sử bạn có 1 file document.zip trong cùng thư mục với file download.php. Nhưng chỉ mình bạn biết là file document.zip này nằm ở đâu, người khác muốn download thì phải truy cập vào file download.php của bạn. Mã nguồn của file download.php sẽ như sau: PHP Code:
Ủa, chỉ có nhiêu đó thôi à? Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!).Đầu tiên, ta mở file document.zip để đọc ở chế độ nhị phân (binary): Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager
đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!). PHP Code:
Ủa, chỉ có nhiêu đó thôi à? Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!).Đầu tiên, ta mở file document.zip để đọc ở chế độ nhị phân (binary): server là dữ liệu nhị phân chứ không phải là văn bản HTMl như
thông thường: PHP Code:
Ủa, chỉ có nhiêu đó thôi à? Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!).Đầu tiên, ta mở file document.zip để đọc ở chế độ nhị phân (binary): PHP Code:
Ủa, chỉ có nhiêu đó thôi à? Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!).Đầu tiên, ta mở file document.zip để đọc ở chế độ nhị phân (binary): Tiếp theo ta báo cho browser biết data 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: PHP Code:
Ủa, chỉ có nhiêu đó thôi à? Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!).Đầu tiên, ta mở file document.zip để đọc ở chế độ nhị phân (binary): PHP Code:
cũng không có gì là khó hiểu, lệnh này báo cho browser biết dung lượng của file chuẩn bị download (thực ra không có lệnh này thì quá trình download vẫn diễn ra như bình thường). Vấn đề mấu chốt nằm ở lệnh PHP Code:
. PHP Code:
sẽ báo cho browser biết là dữ liệu chuẩn bị load xuống là dữ liệu nhị phân. Vì là dữ liệu nhị phân nên browser sẽ thực hiện quá trình download và save file thay vì hiển thị lên browser như là 1 trang HTML thông thường.
Để giải quyết 2 vấn đề khó chịu trên cũng không có gì khó khăn lắm, ta chỉ cần thêm 1 lệnh header()
nữa: PHP Code: 1Tham 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. CẢI TIẾN CHƯƠNG TRÌNH
Cho phép người dùng chọn file để
download: Thao tác này có lẽ khá đơn giản đối với bạn. Chương trình sẽ nhận vào tham số file từ URL (ví dụ: download.php?file=document.zip). Đoạn code xử lý như sau: PHP Code: 2---------------------------------------------------------------
Giép
lại ta có chương trình được cải tiến như sau: PHP Code: 6 7 8Lưu ý rằng ta không cần kiểm tra tên file rỗng nữa vì ở trên ta đã kiểm tra ký tự đầu tiên của tên file, nên nếu tên file lã rỗng thì sẽ không có ký tự đầu tiên, do vậy điều kiện kiểm tra của hàm pregg_match sẽ bị sai rồi. THẮC MẮC NHỎ CUỐI
CÙNG
Chúc bạn thành công!TÀI LIỆU THAM KHẢO
|