Вот смотри...
1. Делаем ссылку на файл. И не важно, существует он или нет, мы вообще можем сами "с ходу" создать то, чего не было! И не записывать, а сразу же динамически создать этот файл.
2. Формируем правильный заголовок.
3. Выводим в браузер данные. Они будут интерпретироваться как текст файла, а не как код страницы.
Пример из жизни.
Надо мне выводить данные в структурированном виде. Они готовятся в БД, обращение к ним по идентификатору.
Делаю файл table_file_create.php. Вот его начало (прямо с каментами взял из своего скрипта):
$id=intval( $_GET['id'] );
if( $id == 0 ) exit;
include_once 'connect_db.php' ;
include_once 'functions.php' ;
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=table_$id.csv");
header('Content-Transfer-Encoding: binary');
Далее идет запрос к БД, выбираю данные, вывожу их через обычное echo..... Но в итоге юзер получает именно файл, а не страницу для браузера - вот что важно.
Можно данные взять не из БД, а из любого готового файла, который можно взять через file_get_contents() и "вывести" через echo. При этом то, по какой ссылке у тебя будет идти обращение к файлу и какой ты будешь брать на самом деле... Всё может быть разным :) Думаю, сам тут догадаешься, как можно реализовать разные варианты. Или подскажем, если своих версий не будет...
В моем случае в ссылке указывается href="http://....../table_file_create.php?id=234139"
Идентификатор появляется в процессе подготовки данных и записи их в промежуточную таблицу.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)