2012-11-30 31 views
5

Bất cứ khi nào tôi sử dụng tập lệnh này để tải xuống tệp, tôi không thể thấy tổng kích thước và tốc độ trong khi tải xuống ... Tôi muốn làm cho nó trông giống như 'liên kết tải xuống trực tiếp'. Mục đích của tập lệnh này là ẩn liên kết tải xuống trực tiếp giới hạn việc tải xuống trực tiếp và các hành vi tải xuống khác, như bot. Hãy suy nghĩ về mediafire, rapidshare, megaupload, vvPHP: Lực tải xuống tiêu đề sẽ không hiển thị tổng kích thước và tốc độ

Các kịch bản chúng tôi có bây giờ làm việc nhưng không được hiển thị như thế nào nó được hiển thị khi bạn tải về từ một liên kết tải về bình thường, tôi sẽ đăng một ảnh chụp màn hình về những gì đang xảy ra:
enter image description here

tôi hy vọng ảnh chụp màn hình này sẽ giúp, vì tôi đã tìm kiếm internet hàng giờ đồng hồ và dường như không thể tìm thấy một giải pháp cho :(này.

if (isset($_GET['file'])){ 
    $file = $_GET['file']; 
    $path = '/home/user/domains/domain.com/files/upload/'; 
    $filepath = $path.$file; 

    if (file_exists($filepath)){ 

    set_time_limit(0); // for slow connections 

    header('Content-Description: File Transfer'); 
    header("Content-Disposition: attachment; filename=\"$file\""); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Content-Length: ' . filesize($filepath)); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Expires: 0'); 

    readfile($filepath); // send file to client 
    } 
    else{ 
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404); 
    } 
    }else{ 
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404); 
    } 
+1

Cửa sổ Công cụ dành cho nhà phát triển của Chrome/Safari nói gì về tiêu đề được gửi cho khách hàng? Ngoài ra, hãy thử phần mở rộng "Live HTTP Headers" của Firefox. – Dai

+0

Bạn đang thử nghiệm phiên bản và phiên bản nào? – MrLore

+0

@MrLore Hiện tại, chúng tôi đang làm việc với phiên bản Chrome, Internet Explorer và FireFox mới nhất, chúng tôi muốn nó hoạt động trên tất cả các trình duyệt, nhưng tùy chọn của chúng tôi sẽ chuyển sang Chrome. Như bạn có thể thấy trong ảnh chụp màn hình, nó sẽ xảy ra với Chrome và Internet Explorer. –

Trả lời

2

là nội dung đang được nén ở mức độ máy chủ với mod_deflate hoặc một cái gì đó tương tự?

này đã được trả lời ở đây: Sending correct file size with PHP download script

"Nếu bạn nén file với zlib, mod_deflate và vân vân header Content-Length sẽ không được chính xác, do đó bạn sẽ kết thúc khi nhìn thấy" kích thước Unknown "và 'Unknown thời gian còn lại' khi download các file."

"Bạn có thể dễ dàng vô hiệu hóa nó cho một kịch bản duy nhất bằng cách sử dụng dòng sau trong một tập tin .htaccess áp dụng:

SetEnvIfNoCase REQUEST_URI ^/download.php không- gzip không thay đổi wh ere download.php được cho là nằm trong tập lệnh tải xuống nằm trong đường dẫn thư mục gốc của máy chủ (ví dụ: www.crimsonbase.com/download.php). (Đó là vì các biểu thức chính quy là ^/download.php.)"

Ngoài ra, xin lưu ý rằng kịch bản của bạn là không an toàn. Có người một cách hiệu quả có thể gửi các thông số get sau cho _GET [ 'file']

../../../../../Documents/MyStuff 

và nó sẽ ghi đè lên $ path hạn chế của bạn hoàn toàn.

Gợi ý tước ra bất kỳ .. tài liệu tham khảo trong đường dẫn.

0

tôi đã có một vấn đề tương tự ngày hôm nay, tôi có thể không nhận được tổng kích thước (tiến trình tải xuống) của tệp đã tải xuống.

tiêu đề

Trình duyệt chỉ định "gzip" như kiểu nội dung, tôi đã có thể sửa lỗi này bằng prevening máy chủ để sử dụng gzip trên kịch bản download.php, bởi dòng htaccess này:

SetEnvIfNoCase REQUEST_URI ^/download.php no-gzip không thay đổi

Các vấn đề liên quan