Chương trình download đon giản. Help me !!! 2007-07-29 11:20:53

Xin chỉ mình cách làm một chương trình download. Cho phép user khi click vào link sẽ tự đông download file đó về.

Tra loi 17 comment(s) pigbig_vn 2007-07-29 11:20:53

cocbay 2007-07-30 08:17:58

Cách đơn giàn, bạn dùng hàm
@header("Content-Disposition: attachment; filename=\"$file\"");
@readfile('$file');

Trong đó $file là tên file (đầy đủ, có đuôi mở rộng) cần download

Tra loi

TG 2007-07-30 11:58:10


bạn dùng đoạn code này:
<?php
function download($file){
if(!
file_exists($file)){
print
"file's not exits"; exit();
}
$size = filesize($file);
header("Content-Type: application/save");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"".$file."\"");
header("Content-Transfer-Encoding: binary");
if (
$fh = fopen("$file", "rb")){
fpassthru($fh);
fclose($fh);
} else {
print (
"Permission denied: ".$file); exit();
}
}
download('file_name.php');
?>


Tra loi

pigbig_vn 2007-07-30 09:20:22

Thanks bạn cocbay đã giúp đỡ.
-----------------
Bạn TG ơi, code cũng tương tự code của bạn cocbay, nhưng gặp lỗi sau:
+ Nội dung file là bị cắt đi mất một phần.
+ Tự động xuống dòng ngay đầu file.
Xin giúp mình cách khắc phục.

Tra loi

pigbig_vn 2007-07-30 09:58:53

các bạn ơi, mình muốn chỉ đường dẫn lưu file thì làm sao vậy?? Mình có thể tham khảo rõ hơn về vấn đề này ở địa chỉ nào?

Tra loi

cocbay 2007-07-31 08:01:51

Chỉ đường dẫn lưu file ? Bạn nói rõ hơn ý này được không?

Tra loi

pigbig_vn 2007-07-31 02:11:39

@header("Content-Disposition: attachment; filename=\"$file\"");
Cái này chỉ cho down file nằm cùng cấp trong thư mục. Mình muốn  cho down file nằm trong folder nằm khác cấp vì các file minh cho phép down nằm chung trong 1 thư mục riêng biệt.
Trời, công nhận câu cú mình dở thật. chẳng bít nói sao. Mong là bạn hiểu.

Tra loi

cocbay 2007-07-31 02:33:55

Thì bạn thêm đường dẫn thư mục nữa:
ví dụ muốn down file nen.zip ở thư mục cha
$file="../nen.zip";
Còn các thư mục con của hiện tại thì bạn chỉ ra đường dẫn thôi
$file="/thumuccon/nen.zip"

Tra loi

pigbig_vn 2007-07-31 08:58:46


Ko đc bạn cocbay oi. Mình đã thử như bạn nói rồi. Cách này tuy download đc file nhưng file sẽ bị đổi tên thành "Ten folder - Tên File". Như vậy sẽ bị sai tên file.
Mình áp dụng theo cách của bạn như sau :
+ Trang hiển thị những file cho phép down, khi user chọn file muốn down mình se truyền tên file down(vd test.txt) qua trang download.php bằng phưong thức GET.
+ Trang download.php co nội dung như sau:
<?
$file
= "/Document_Files_Upload/".$_GET["name"];

if(!
file_exists($file))
{
print
"file's not exits";exit();
}

header("Content-Type: application/save");
@
header('Content-Disposition: attachment; filename="'.$file.'"');
@
readfile($file);
?>

Tra loi

cocbay 2007-08-01 08:16:49

Sorry, quên cái tên file nên làm cho bạn bị nhầm lẫn.
@header('Content-Disposition: attachment; filename="'.$file.'"');

Cái này là quy định đặt tên file download về. Nên bạn sửa chổ này lại là :
@header('Content-Disposition: attachment; filename="'.$filename.'"');

$filename = $_GET["name"]: tên file.
$file: đường dẩn của file cần download trên host.

Tra loi

pigbig_vn 2007-08-01 09:41:50

Thanks bạn cocbay. Mình làm được rùi. Nhưng bạn cho mình hỏi, thông thường vấn đề download này mình có cần phải kiểm tra bảo mật gì ko bạn??

Tra loi

cocbay 2007-08-01 02:26:45

Có chứ, bạn nên viết kỹ file download.php vào, đừng dựa vào lấy $_GET['ten_file']. Nếu không user đổi thành
download.php?index.php hay download.php?connect.php thì tiêu :).

Tra loi

shinichi 2008-01-11 01:13:52

Vậy download file từ 1 địa chỉ khác thì sao ??? ở trên đây là những  file nằm trên host của mình thôi, đúng không ?

Tra loi

gaulucky92 2008-09-03 03:31:52

tốt nhất lưu tên files vào database ==> an toàn :D khỏi sợ nó down cái web của mình :D

Tra loi

Le Trung Kien 2008-09-04 03:37:19

Không biết cái này có ảnh hưởng đến tốc độ down ko nhỉ

Tra loi

gaulucky92 2008-09-04 03:54:27

ko ảnh hưởng đâu.
thay vì cung cấp link trực tiếp, thì bạn cho nó vào 1 file php, file này sẽ gọi link file kia ra...
===> Ứng dụng: quản lí files trong các mã nguồn download.

Tra loi

Quan Tran Anh 2008-09-04 05:26:41

Có chứ.
Một đằng là trực tiếp tải file về.
Một đằng là đọc DB -> Đọc File -> Trả về :)

Tra loi

gaulucky92 2008-09-04 06:44:16

oài... nếu gọi là tốc độ down thì phải xem về host chứ...
cái mà ông nói chỉ là thời gian lấy được link thật thôi! File nó vẫn nằm trên host, 1 đường là lấy link đó down trực tiếp, 1 đường là dùng file php gọi link đó ra để down trực tiếp ==> ko ảnh hưởng :))

Tra loi

Y kien