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*>
viết 02:02 ngày 10/10/2018
Không khả thi !
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
cái nick đó viết 01:55 ngày 10/10/2018
tớ nghĩ đó chính là cách mà cách dịch vụ chia sẻ file như Megaupload hay rapidshare sử dụng.

Trong PHP có hàm mkdir, trên Linux có Cron job, theo hướng đó thôi.
viết 01:55 ngày 10/10/2018
Quote Được gửi bởi cái nick đó View Post
tớ nghĩ đó chính là cách mà cách dịch vụ chia sẻ file như Megaupload hay rapidshare sử dụng.

Trong PHP có hàm mkdir, trên Linux có Cron job, theo hướng đó thôi.
Cái đó là filehosting nên nó phải cấp mỗi account 1 thư mục để người ta toàn quyền thao tác (upload/download/delete ..) còn vấn đề là bác kia muốn cho thành viên bác ấy download file có sẵn trên server lại phân thư mục theo session từng account !
cái nick đó viết 02:05 ngày 10/10/2018
Tớ để ý ở MegaUpload và RapidShare khi download = Premium thì cái link sẽ sống được trong khoảng thời gian nào đó và đường dẫn thì thay đổi sau khoảng thời gian đó, đâu phải mỗi người 1 thư mục cố định.
amida viết 02:04 ngày 10/10/2018
Nếu vậy mỗi lần user đăng nhập bạn tạo sẵn 1 biến mã (abc,xyz gì đó) rồi cấp cho user đó để họ download. Với mỗi url (your.com/mã/file.rar) đó bạn direct sang cùng một địa chỉ để download thôi. Rồi kiểm tra luôn user có xài đúng mã đã cấp chưa, hay dùng của người khác.
Nhưng cách này coi bộ không khá tí nào
rekcah viết 02:06 ngày 10/10/2018
Cảm ơn các bác cho ý kiến. Em cũng đã nghĩ tới chuyện mkdir tạo thư mục và copy file sang đó nhưng giải pháp đó không tốt với số lượng người online nhiều và dung lượng file lớn.

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 ạ???
ChipInside viết 02:08 ngày 10/10/2018
Bạn thử với mod_rewrite của Apache xem sao

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 đó.
rekcah viết 02:00 ngày 10/10/2018
Yeah đúng rồi! Thực chất là chuyển hướng, tuy nhiên em đang tìm hiểu cách chuyển hướng trên Server chạy IIS. Còn Mod_rewrite của Apache thì em mù tịt, bác nào có thể cho ví dụ code được ko ah?
<*kakalot*>
viết 01:54 ngày 10/10/2018
Tớ đề nghị vầy cho tiện :
- 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!
Bài liên quan
0