2010-09-17 28 views
5

Tôi đang sử dụng PHP để tạo tệp CSV từ truy vấn cơ sở dữ liệu. Tôi chạy truy vấn, đặt tiêu đề và tải trang lên trong Firefox và tệp khởi động để tải xuống và mở trong excel giống như nó được cho là. Khi tôi dùng thử trong IE, tôi gặp lỗi khi nói Internet Explorer cannot download ReportPrint.php from www.website.com.
Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.

Bạn không chắc chắn có thể làm gì để sửa lỗi này.Tạo và tải xuống CSV với PHP

header('Content-Description: File Transfer'); 
header("Content-Type: application/csv") ; 
header("Content-Disposition: attachment; filename=Report.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

echo "record1,record2,record3\n"; 
+0

Nhận xét bên: tiêu đề 'Expires' dự kiến ​​* ngày * –

Trả lời

1

Tháo Pragma: no-cache tiêu đề. Tiêu đề này ngăn không cho IE tải xuống tệp.

+0

Vâng, điều này có thể đã làm ... Xóa bộ nhớ cache không giải quyết được , nhưng tôi tìm thấy một nơi khác là tôi tải xuống các tệp PDF từ trang web của mình và nhận thấy một vài dòng mà tôi không có. Tôi nghĩ đó là 'header (" Pragma: public ")' đã giải quyết nó. – AndyD273

+0

Dường như việc xóa tiêu đề là bản sửa lỗi thực sự cho bạn. Tuy nhiên, không đủ để ngừng thêm: PHP có thể tự thêm nó nếu bạn đang sử dụng phiên. –

0

Kiểm tra cài đặt bảo mật của IE, có thể cấu hình không tải xuống tệp CSV.

+0

Tôi đã kiểm tra cài đặt và không thấy bất kỳ điều gì đúng. sau đó tôi đã truy cập một trang web khác và có thể tải xuống CSV được tạo động. Cuối cùng tôi đã tạo một tệp CSV tĩnh 'test.csv' và nó được tải xuống tốt, vì vậy tôi khá chắc chắn rằng nó có liên quan đến các tiêu đề. – AndyD273

+0

Ngoài ra, một trong những đồng nghiệp của tôi đã cố gắng và cũng không tải xuống được CSV đã tạo trên phiên bản hộp mới của cửa sổ 7. – AndyD273

-2

Thay đổi

header("Content-Disposition: attachment; filename=Report.csv"); 

để

header("Content-Disposition: attachment;filename=Report.csv"); 
3

Internet Explorer có xu hướng hiển thị các thông báo lỗi này khi không thể lưu tệp và dường như bạn đang cố gắng tránh lưu vào bộ nhớ cache. Hãy thử thay thế một cái gì đó như thế này:

<?php 

$seconds = 30; 

header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$seconds) . ' GMT'); 
header('Cache-Control: max-age=' . $seconds . ', s-maxage=' . $seconds . ', must-revalidate, proxy-revalidate'); 

session_cache_limiter(FALSE); // Disable session_start() caching headers 
if(session_id()){ 
    // Remove Pragma: no-cache generated by session_start() 
    if(function_exists('header_remove')){ 
     header_remove('Pragma'); 
    }else{ 
     header('Pragma:'); 
    } 
} 

?> 

Điều chỉnh $seconds theo ý thích của bạn nhưng không đặt thành 0.

Nó cũng giúp sử dụng mod_rewrite để làm cho IE tin rằng quá trình tải về một tệp tĩnh, ví dụ, http://example.com/Report.csv

Hãy báo cáo lại và cho biết nếu nó làm việc cho bạn.

+0

Khi tôi đặt 'Pragma: Public', nó bắt đầu hoạt động. Thay đổi thời gian hết hạn dường như không tạo ra bất kỳ sự khác biệt nào ... Dunno – AndyD273

+0

Nếu tôi không sai, giá trị hợp lệ duy nhất cho Pragma là 'no-cache'. Đặt nó vào bất cứ điều gì khác chỉ làm cho trình duyệt bỏ qua nó (vì nó không phải là một giá trị đã biết) và cũng giống như loại bỏ tiêu đề. Dù sao, tôi vui vì nó đã khắc phục vấn đề của bạn. –

+0

Tôi gặp vấn đề tương tự; tiêu đề hết hạn không có bất kỳ hiệu ứng nào, nhưng chỉ đơn giản là xóa các tiêu đề Cache-Control và Pragma đã thực hiện thủ thuật. +1 – iandisme

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