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

Вот что я пытаюсь сделать. У меня есть серия отчетов, которые также хотят иметь возможность загружать в виде текстовых файлов с разделителями-запятыми. Я прочитал кучу страниц, где люди говорят, что просто отгоняют результаты, а не создают файл, но когда я пытаюсь, он просто выводит на страницу, на которой они находятся.

У меня есть это в виде каждого отчета

Export File<input type="checkbox" name="export" value="1" /> 

Поэтому на почте я могу проверить, пытаются ли они экспортировать файл. Если это я, я пытался это сделать:

 if($_POST['export'] == '1') { $filename = date("Instructors by DOB - ".$month) . '.txt'; $content = ""; # Titlte of the CSV $content = "Name,Address,City,State,Zip,DOB\n"; for($i=0;$i<count($instructors);$i++) $content .= ""; //fill content fwrite($filename, $content); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Length: ". filesize("$filename").";"); header("Content-Disposition: attachment; filename=$filename"); header("Content-Type: application/octet-stream; "); header("Content-Transfer-Encoding: binary"); readfile($filename); } 

В основном страница обновляется, но файл не загружается для загрузки. Может ли кто-нибудь указать, что мне не хватает?

EDIT Я думаю, что я был не совсем ясен. Это не на странице, которая только создает и загружает файл, это на странице, которая также отображает отчет. Поэтому, когда я устанавливаю exit (); после файла read остальная страница загружается пустым. Мне также нужно отобразить отчет на этой странице. Я думаю, что это также может иметь отношение к тому, почему он не загружается, потому что эта страница уже отправила информацию заголовка.

Я забыл, как вы пишете содержимое, прежде чем просить вас попробовать закрыть файл.

Проверьте руководство по fwrite здесь: http://php.net/manual/en/function.fwrite.php

Что вам нужно сделать:

 $filename = "yourfile.txt"; #... $f = fopen($filename, 'w'); fwrite($f, $content); fclose($f); 

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

 header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Length: ". filesize("$filename").";"); header("Content-Disposition: attachment; filename=$filename"); header("Content-Type: application/octet-stream; "); header("Content-Transfer-Encoding: binary"); readfile($filename); 

Есть несколько вещей:

  • Вам действительно не нужно устанавливать тип контента как application/octet-stream . Почему бы не установить более реальный тип как text/plain ?
  • Я действительно не понимаю, как вы хотите использовать функциональность даты. обратитесь к руководству: http://php.net/manual/en/function.date.php
  • Как правильно указал @nickb, вы должны выйти из скрипта после выполнения readfile(..)