2009-04-08 49 views
8

Làm cách nào để hiển thị hộp thoại 'Lưu dưới dạng' bằng cách sử dụng PHP để yêu cầu người dùng tải xuống chuỗi dưới dạng tệp văn bản? Về cơ bản tôi sẽ lấy một số giá trị từ cơ sở dữ liệu và sau đó muốn có thể tải xuống tệp .txt chứa dữ liệu này.Cách hiển thị hộp thoại 'Lưu dưới dạng' bằng cách sử dụng PHP cho các tệp văn bản

+0

chỉ cần ném điều này vào đây vì tôi cần nó ngoài câu trả lời của emil .... cho ngắt dòng: echo "\ r \ n"; – CheeseConQueso

Trả lời

24

này nên làm việc:

header('Content-type: text/plain'); 
header('Content-disposition: attachment; filename="test.txt"'); 
6

Chỉ cần mở rộng về câu trả lời @Emil H:

Sử dụng những cuộc gọi đầu sẽ chỉ có tác dụng trong bối cảnh của một yêu cầu mới. Bạn sẽ cần phải thực hiện một cái gì đó cho phép kịch bản của bạn để biết khi nó thực sự gửi các tập tin như trái ngược với khi nó hiển thị một hình thức nói với người dùng để tải về các tập tin.

2

Để làm rõ việc sử dụng header():

Official PHP Manual:

header() được sử dụng để gửi một HTTP header thô. Xem thông số kỹ thuật »HTTP/1.1 để biết thêm thông tin về tiêu đề HTTP.

Hãy nhớ rằng tiêu đề() phải được gọi trước khi bất kỳ đầu ra thực tế nào được gửi, bằng thẻ HTML thông thường, dòng trống trong tệp hoặc từ PHP. Đây là lỗi rất phổ biến khi đọc mã với bao gồm() hoặc yêu cầu(), chức năng hoặc chức năng truy cập tệp khác và có khoảng trống hoặc dòng trống được xuất trước khi gọi tiêu đề(). Vấn đề tương tự tồn tại khi sử dụng một tệp PHP/HTML duy nhất.

Về cơ bản, bạn đang thay đổi toàn bộ trang khi bạn đang sử dụng tiêu đề(). Hãy chắc chắn rằng nội dung duy nhất bạn echo là chuỗi.

3
<? 
header ("Content-Type: application/download"); 
header ("Content-Disposition: attachment; filename=$yourfile"); 
header("Content-Length: " . filesize("$yourfile")); 
$fp = fopen("$yourfile", "r"); 
fpassthru($fp); 
?> 
Các vấn đề liên quan