Создать, написать и загрузить текстовый файл с помощью php

$file = fopen("test.txt", "w") or die("Unable to open file!");
fwrite($file, "lorem ipsum");
fclose($file);

header("Content-Disposition: attachment; filename=\"" . basename($file) . "\"");
header("Content-Type: application/force-download");
header("Content-Length: " . filesize($file));
header("Connection: close");

Файл создается / открывается и записывается, но не загружается.

Любая помощь?

Как его можно скачать, если вывести ничего такого?

u_mulder 19.09.2018 18:39

Создание файла на диске и отправка файла клиенту - это две совершенно разные вещи. Вы создаете файл, а затем ничего не отправляете клиенту.

Alex Howansky 19.09.2018 18:39
stackoverflow.com/questions/29873729/…
sabrine abdelkebir 19.09.2018 18:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
3
18 087
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам нужно что-то вывести, чтобы пользователь мог загрузить файл. Попробуйте этот код:

$file = fopen("test.txt", "w") or die("Unable to open file!");
fwrite($file, "lorem ipsum");
fclose($file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename = "FILENAME"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: test.txt');
ob_clean();
flush();
readfile('text.txt');
exit();

Замените FILENAME именем файла, который пользователь должен загрузить.

Ответ принят как подходящий

Правильный способ сделать это:

<?php

$file = "test.txt";
$txt = fopen($file, "w") or die("Unable to open file!");
fwrite($txt, "lorem ipsum");
fclose($txt);

header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
header("Content-Type: text/plain");
readfile($file);

?>

@puerto Убедитесь, что вы правильно его скопировали. Я бы никогда не отправил ответ, если бы сначала не проверял себя. Работает отлично :)

icecub 19.09.2018 18:59

@puerto На заметку: имейте в виду, что вы не можете использовать это в другом коде, где есть вывод перед заголовками. И убедитесь, что ваш редактор не сохраняет код с Спецификация

icecub 19.09.2018 19:04

Я создаю новый файл только с вашим кодом, и он работает. Нажатие на кнопку и запуск через ajax - не работает. Так следует ли мне иметь специальную страницу php только для загрузки?

user7461846 19.09.2018 19:07

@puerto Да. Ajax не предназначен для загрузки файлов. Вы можете просто создать всплывающее окно для страницы загрузки. Он автоматически закроется после начала загрузки.

icecub 19.09.2018 19:18

После того, как вы создали файл, вы должны выход его содержимое в браузере, например, с помощью fpassthru, поскольку вы используете обработчик файлов:

$path = "test.txt";
$file = fopen($path, "w") or die("Unable to open file!");
fwrite($file, "lorem ipsum");
//fclose($file); // do not close the file
rewind($file);   // reset file pointer so as output file from the beginning

// `basename` and `filesize` accept path to file, not file descriptor
header("Content-Disposition: attachment; filename=\"" . basename($path) . "\"");
header("Content-Type: application/force-download");
header("Content-Length: " . filesize($path));
header("Connection: close");
fpassthru($file);
exit();

Я думаю, вам нужен контент только для процесса загрузки

<?PHP

//config
$namefile = "test.txt";
$content = "lorem ipsum";

//save file
$file = fopen($namefile, "w") or die("Unable to open file!");
fwrite($file, $content);
fclose($file);

//header download
header("Content-Disposition: attachment; filename=\"" . $namefile . "\"");
header("Content-Type: application/force-download");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header("Content-Type: text/plain");

echo $content;

Спасибо.

Другие вопросы по теме