2010-01-18 59 views
9

Tôi đang cố gắng tải xuống tệp zip được bảo vệ (Tôi không muốn mọi người truy cập tệp đó mà không cần đăng nhập trước.Tải xuống tệp .zip chạy tệp bị lỗi php

Tôi có chức năng được tạo . cho login và như vậy, nhưng tôi chạy vào một vấn đề mà các tập tin tải về là hư hỏng

Dưới đây là đoạn code tôi có:

$file='../downloads/'.$filename; 
header("Content-type: application/zip;\n"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file).";\n"); 
header("Content-disposition: attachment; filename=\"".basename($file)."\""); 
readfile("$file"); 
exit(); 

Dưới đây là các lỗi: Cannot open file: It does not appear to be a valid archive.

Các tập tin tải về tốt nếu không, vì vậy nó phải là một cái gì đó tôi đang làm sai với các tiêu đề.

Bất kỳ ý tưởng nào?

Trả lời

18

Sự cố này có thể có một số nguyên nhân. Có thể tệp của bạn không được tìm thấy hoặc không thể đọc được và do đó nội dung của tệp chỉ là thông báo lỗi PHP. Hoặc tiêu đề HTTP đã được gửi. Hoặc bạn có một số đầu ra bổ sung sau đó làm hỏng nội dung tệp của bạn.

Cố gắng thêm một số xử lý lỗi vào kịch bản của bạn như thế này:

$file='../downloads/'.$filename; 
if (headers_sent()) { 
    echo 'HTTP header already sent'; 
} else { 
    if (!is_file($file)) { 
     header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
     echo 'File not found'; 
    } else if (!is_readable($file)) { 
     header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
     echo 'File not readable'; 
    } else { 
     header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); 
     header("Content-Type: application/zip"); 
     header("Content-Transfer-Encoding: Binary"); 
     header("Content-Length: ".filesize($file)); 
     header("Content-Disposition: attachment; filename=\"".basename($file)."\""); 
     readfile($file); 
     exit; 
    } 
} 
+0

Awesome Gumbo! Điều đó đã trả lời nó. Đó là ... Tôi nghĩ các tiêu đề được gửi là lý do tại sao nó không hoạt động. – Troy

6

Tôi đặt cược hai loại bia có lỗi PHP xảy ra và thông báo lỗi làm lộn xộn tệp ZIP. Tệp được yêu cầu có thể không tồn tại.

Mở tệp ZIP bằng notepad hoặc trình soạn thảo văn bản tương tự và tìm hiểu xem có gì sai.

+6

+1 chỉ có hai loại bia? – danielrsmith

+0

id đồng ý tôi đặt cược có một lỗi trong 'readfile()' như quyền không hợp lệ, hoặc nó có thể được tìm thấy ... – prodigitalson

1

Dưới đây là giải pháp tạo một file với tên .htaccess ghi bên dưới dòng trong rằng setenv không gzip dont-khác nhau

tải tệp lên trang web của bạn. Nếu bạn có tập tin đã có thì hãy thực hiện thay đổi trên ở chỗ

0

thử này để tìm nếu có bất kỳ lỗi

error_reporting(0); 

Đừng in bất cứ điều gì trước khi viết tiêu đề; Chạy ob_start() cho tập lệnh của bạn, sau khi mã chỉnh sửa tiêu đề của bạn và sau đó ob_flush() và ob_clean()

1

Trả lời muộn nhưng có thể hữu ích cho người dùng không thể thực hiện công việc force download.
Thêm dòng sau ở đầu php kịch bản của bạn

<?php 
apache_setenv('no-gzip', 1); 
ini_set('zlib.output_compression', 0); 
Các vấn đề liên quan