10/10/2018, 09:27

Ẩn link download bằng Header? F1 !!

Để ẩn link download file đc attach trên host em viết hàm dlfile trong download.php như vầy:
Code:
function dlfile($file)
{
   header("Content-Disposition: attachment; filename=filename.zip");
   exit();
}
Em có 2 thắc mắc:
1.Hàm trên chỉ có thể download đc các file nằm trong các sub folder của folder chứa file php download.php, em có một file bất kì nằm trên host thì phải cho cái filename= gì?
2.Nếu muốn ẩn link download từ trang khác thì sao ví dụ chỉ cần đưa url của file thì nó sẽ download, em có thử như vầy như ko xi nhê

Code:
function dlfile($url)
{
   header("Content-Disposition: attachment; filename=$url");
   exit();
}
Cảm ơn các bro nhiều!
Kizz viết 11:43 ngày 10/10/2018
function dlfile($file)
{
header("Content-Disposition: attachment; filename=filename.zip");
exit();
}
cũng k xi nhê gì đâu, tóm đc link hết

function dlfile($file)
{
readfile("filename.zip");
exit();
}

function dlfile($file)
{
readfile($url);
exit();
}
chỉ còn cách trẻ con này thôi
Tran Vu viết 11:29 ngày 10/10/2018
giả sử mình có path của file download.php như vầy: webdir/download/download.php

Giả sửa cái file download của em ở: webdir/File/filename1.zip
Nếu dùng header thì cho filename = gì ?

Thanks! Em chỉ muốn giấu cơ bản đối với user bình thường thôi thôi còn pro thì ko tính
doangia viết 11:28 ngày 10/10/2018
Hình như là ../File/filename1.zip
Tran Vu viết 11:33 ngày 10/10/2018
Hình như hàm readfile chỉ đọc file trực tiếp trên trình duyệt thôi chứ đâu file download nó về
Ai biết giúp em với, dùng hàm nào đây! chỉ cần có tính năng tương tự như header không vì header ko download theo url được chỉ download theo tên file nhưng nhập đúng file name khó quá!

Thanks!
Kizz viết 11:30 ngày 10/10/2018
nếu muốn dùng readfile cho dl về thì viết như thế này:
$file_url="webdir/File/filename1.zip
";
@header('Content-type: application/octetstream');
@header("Pragma: public");
@header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
@header('Content-Disposition: attachment; filename="123.ZIP"');
ob_end_clean ();
ob_start();
readfile ($file_url);
$size=ob_get_length();
header("Content-Length: $size");
ob_end_flush();

Trình duyệt sẽ trả về cho bạn File với tên 123.zip
Tran Vu viết 11:28 ngày 10/10/2018
Mình làm được rồi cảm ơn bạn, cho mình biết thêm về header được không, tác dụng của nó là gì, làm sao mình biết hết các lệnh trong chuổi tham số của header.

Còn một vấn đề nữa là với cách trên có thể download một file bên ngoài server ko, nghĩa là ko chứa trên host của mình.

Cảm ơn bạn rất nhiều !!!
Kizz viết 11:37 ngày 10/10/2018
Tìm hiểu về header thì bạn có thể tìm đầy rẫy ở trên mạng
google for everything!
Bằng cách này bạn có thể load các file ở ngoài host của bạn
thay hàm này, ví dụ:
$file_url="http://vietstylex.net/filename1.zip";
chỉ thế thôi. hàm readfile hơi bất tiện vì là nó chậm và ví dụ như file kia nặng 50MB thì host của bạn khi dùng hàm này khi load file này về cũng bị mất 50MB băng thông. vì nó load toàn bộ file này qua host bạn rồi mới trả về khi download
Tran Vu viết 11:32 ngày 10/10/2018
Nếu vậy mình dùng header("Location: $url");

Mình bị lỗi như vầy nếu mình include 1 file php nào phía trước các hàm header thì nó đều báo lỗi là :Cannot modify header information - headers already sent by (...) Nên mình cứ gom toàn bộ vô 1 file. Có cách nào sửa lỗi này ko.

Cho mình hỏi thêm là @header có khác gì header ko?

Cảm ơn các bạn nhiều !!
Tran Vu viết 11:41 ngày 10/10/2018
có ai đó giúp em cái lỗi này được không, vì khi bị lỗi này em đã thử search rất nhiều nhưng ổ đây cũng nói đây chỉ là warning nhưng lại bị lỗi là hàm readfile nó trả về là một đống hỗn độn (read file luôn) chứ ko download.
Thanks!
Bài liên quan
0