Файл TXT, который я загружаю, пуст - PullRequest
0 голосов
/ 28 февраля 2012

Приведенный ниже код предназначен для двух целей
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 ]

2 голосов
/ 28 февраля 2012

Вы только установили заголовок 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 голос
/ 28 февраля 2012

Отправка имени файла в заголовке просто дает пользователю предложенное имя файла. Попробуйте повторить содержимое файла.

0 голосов
/ 28 февраля 2012

Вы должны добавить

header("Content-Length: $size")

, где $size - размер файла в байтах.

0 голосов
/ 28 февраля 2012

Проверьте это пример:

$filename = urlencode($fileName); //download.txt
header("Content-Disposition: attachment; filename=\"" . $filename. "\";" );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...