我下载的txt文件是空的

时间:2012-02-28 12:03:15

标签: php file-io

以下代码有两个目的
1)我在我的服务器上将文本文件保存在名为“backup_db”的文件夹中,当我打开包含所有数据的文本文件时,它的工作正常意味着

2)同时我也让这个文件可供用户下载,以便他可以自己下载并可以将其保存在他的硬盘上,并根据我的意愿下载但不幸的是.txt文件保存在我的硬盘是,当它打开它的空,我不知道为什么请帮帮我

//保存文件

$handle = fopen('backup_db/db-backup-'.date('d-m-Y_H-i-s').'-'.(md5(implode(',',$tables))).'.txt','w+');

$rr = fwrite($handle,$re);

//fclose($handle);

$ww = "db_backup".$rr.".txt"; 

//$handle = "";

header('Content-Disposition: attachment; filename=' . urlencode($ww));   

header('Content-Type: application/force-download');

header('Content-Type: application/octet-stream');

header('Content-Type: application/download');

header('Content-Description: File Transfer');}}

4 个答案:

答案 0 :(得分:2)

您只设置HTTP标头但未将文件写入响应正文。使用fpassthru()readfile()将文件内容直接写入回复。

示例(摘自php.net)

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    flush();
    readfile($file);
    exit;
}
?>

顺便说一句: 除非将header()的第二个参数设置为false,否则多次设置相同的标题只会覆盖之前设置的值。

您的代码

header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Type: application/download');

产生以下标题:

Content-Type: application/download

答案 1 :(得分:1)

在标题中发送文件名只会为用户提供建议的文件名。尝试回显文件的内容。

答案 2 :(得分:0)

检查 例如:

$filename = urlencode($fileName); //download.txt
header("Content-Disposition: attachment; filename=\"" . $filename. "\";" );

答案 3 :(得分:0)

你应该添加

header("Content-Length: $size")

其中$size是文件大小(以字节为单位)。