09/10/2018, 23:53
PHP - Thư mục tạm theo sessions
Chào các bác!
Em có vấn đề sau nhờ các bác cho ý kiến, giúp đỡ với. Em đang muốn làm hệ thống download có đặc thù như sau:
1 - Muốn download phải login
2 - Link download được cấp trong thư mục theo sessions
VD: Anh A, đăng nhập để download với sessions được gán là 'abc' thì link download của anh A trong phiên làm việc đó là 'http://host.com/abc/file.zip' và có thời hạn là 24h
Anh B cũng download file đó nhưng tất nhiên với sessions là 'xyz' tuy cũng chỉ là 1 file.
Sau khoảng thời gian đã định (như trên là 24h), hệ thống tự quét và xóa thư mục đi.
Điều này rất hữu ích khi muốn che giấu link thật sự nhưng vẫn muốn cho download trực tiếp vì vấn đề download qua buffer không thể resume nếu đứt đoạn và tốc độ cũng ko nhanh.
Và 1 câu hỏi khác nữa, download qua buffer có ưu nhược điểm gì hả các bác? Đối với những file lớn khoảng 100M thì thế nào?
Cảm ơn các bác!
<*kakalot*>
Em có vấn đề sau nhờ các bác cho ý kiến, giúp đỡ với. Em đang muốn làm hệ thống download có đặc thù như sau:
1 - Muốn download phải login
2 - Link download được cấp trong thư mục theo sessions
VD: Anh A, đăng nhập để download với sessions được gán là 'abc' thì link download của anh A trong phiên làm việc đó là 'http://host.com/abc/file.zip' và có thời hạn là 24h
Anh B cũng download file đó nhưng tất nhiên với sessions là 'xyz' tuy cũng chỉ là 1 file.
Sau khoảng thời gian đã định (như trên là 24h), hệ thống tự quét và xóa thư mục đi.
Điều này rất hữu ích khi muốn che giấu link thật sự nhưng vẫn muốn cho download trực tiếp vì vấn đề download qua buffer không thể resume nếu đứt đoạn và tốc độ cũng ko nhanh.
Và 1 câu hỏi khác nữa, download qua buffer có ưu nhược điểm gì hả các bác? Đối với những file lớn khoảng 100M thì thế nào?
Cảm ơn các bác!
<*kakalot*>
Bài liên quan
Tưởng tượng bạn có 500 khách hàng, vậy bạn phải sao chép cái file.zip ra 500 lần àh ! Chưa nói đến bao nhiêu files
Trong PHP có hàm mkdir, trên Linux có Cron job, theo hướng đó thôi.
Nhưng cách này coi bộ không khá tí nào
Mục tiêu của em là thế này, ví dụ có 1 file với đường URL như sau:
http://host.com/store/file.rar
Anh A login (với sessions là [sessions_a]) và download file trên thì link phải là http://host.com/[sessions_a]/file.rar và link trên sống được 1 khoảng thời gian đã định. Tất nhiên với anh B thì link phải là
http://host.com/[sessions_b]/file.rar
Vậy làm thế nào mà không tạo thư mục theo sessions, copy file sang đó. Em đã từng gặp những trang cho download như thế, không biết tìm theo từ khóa nào. Virtual Directory? Active Directory??? Hay là &^%&^%$(*&$
Bác Aminda có thể code hóa ý tưởng bác nêu ra được ko? Vì đó là cái em đang cần học hỏi
<*kakalot*>
p/s: Không biết thuật toán mấy trang rapid, mega, 4share thế nào ạ???
Thực chất của các dịch vụ kia không phải là copy file mà là chuyển request. Bạn có thể dùng hàm readfile của PHP để đọc rồi send tới trình duyệt, các dịch vụ kia ko dùng cách này mà can thiệp vào webserver luôn. Cách readfile này chậm và tốn tài nguyên hơn chuyển request tới webserver chứa file, nó giống như là shortcut nhưng không redirect mà request thẳng tới file thông qua alias nào đó.
<*kakalot*>
- Khi upload 1 file lên server cậu sẽ lưu nó vào thư mục xác định, rồi cho nó cái tên = id trong DB. VD : http://host.com/files/12/04/2007/39746.rar với 39746 là ID của file đó trong DB (Cậu tổ chức DB sao thì tùy tớ đề nghị fileID,fileName,fileDescription,absolutePath.. hi hi )
- Phần quan trọng là cậu viết file .htaccess để handle các extension file đều trỏ về file php hết, có nghĩa là khi người dùng gõ vào địa chỉ http://host.com/files/12/04/2007/39746.rar thì nó sẽ trỏ sang http://host.com/filemanager.php, trong phần manager đó cậu mới xác thực xem người đó đã login hay chưa nếu rồi thì cậu send file 39746.rar cho họ(dùng header() ấy ), còn không thì redirect đến trang home hay login gì đó tùy.
Tớ nghĩ không nên tạo directories theo session có hiệu lực trong khoảng thời gian time làm gì, khi họ kết thúc phiên làm việc (đóng trình duyệt chẳng hạn) thì ngưng luôn.
Còn nếu muốn giống Rapidshare thì cậu dùng cookies nữa !
Lý thuyết suông là thế, tớ chưa làm phần này nên cũng không nói chính xác được nếu có time thì tớ sẽ thử
Thân!