Заставить пользователя загрузить .txt (php, file.txt) - PullRequest
3 голосов
/ 06 августа 2009

У меня есть небольшой скрипт, который считывает данные из БД, массивирует их и сохраняет как файл .txt. В конце пользователь перенаправляется в этот файл. Теперь, как этого добиться, когда пользователь перенаправлен на окно загрузки .txt файла?

    <?php
// Preden zacnemo, dobi novico iz baze!
$MOD_NEWS_SAVETXT_getnews = mysql_query("SELECT * FROM NEWS WHERE NEWSid = '{$_GET['id']}'") or die(mysql_error());
// Nardimo while in priredimo vsebino iz baze spremenljivkam!
while ($MOD_NEWS_SAVETXT_NEWSRESULT = mysql_fetch_array($MOD_NEWS_SAVETXT_getnews)) {
    $MOD_NEWS_SAVETXT_FILE_name = $MOD_NEWS_SAVETXT_NEWSRESULT['NEWStitle'] . ".txt";
    echo $MOD_NEWS_SAVETXT_FILE_name;
    $MOD_NEWS_SAVETXT_FILE_handle = fopen($MOD_NEWS_SAVETXT_FILE_name, 'w') or die("Ne morem brati/ustvariti datoteke!");
    fwrite($MOD_NEWS_SAVETXT_FILE_handle, $MOD_NEWS_SAVETXT_NEWSRESULT['NEWStext']);
    fclose($MOD_NEWS_SAVETXT_FILE_handle);
    header("Location: ./" . $MOD_NEWS_SAVETXT_FILE_name ."");
}
?>

Ответы [ 2 ]

5 голосов
/ 06 августа 2009

Чтобы принудительно загрузить файл, необходимо отправить заголовки HTTP, которые сообщат браузеру, что этот файл следует считать загрузкой. Это переопределить Content-Type файла.

http://en.wikipedia.org/wiki/List_of_HTTP_headers

По сути, когда ваш веб-сервер получает файл, запрошенный браузером, он сначала проверяет расширение файла и угадывает тип mime. Затем он создает ответ HTTP и вставляет заголовок Content-Type со значением угаданного mime-типа.

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

Пример уже приведен выше.

header("Content-type: application/force-download"); 

или

header("Content-type: application/octet-stream");

Для загрузки также необходимо установить заголовки ответа HTTP Content-Disposition и Content-Transfer-Encoding.

Они определены в спецификациях MIME: http://www.faqs.org/rfcs/rfc1521.html

Также полезно определить длину содержимого, поскольку это позволяет браузеру предоставить пользователю индикатор выполнения загрузки.

Возможно, вы захотите использовать заголовки диапазона, чтобы разрешить запрос по частям. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...