отправить файл клиенту - PullRequest
12 голосов
/ 10 апреля 2009

Я хочу написать текстовый файл на сервере через Php, и клиент должен загрузить этот файл.

Как бы я это сделал?

По сути, клиент должен иметь возможность загружать файл с сервера.

Ответы [ 5 ]

14 голосов
/ 10 апреля 2009

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

Это всего лишь предложение о том, как оно должно обрабатываться, и пользовательский агент может игнорировать его и просто отображать файл в окне, если он знает, как:

<?php

 header('Content-Type: text/plain');         # its a text file
 header('Content-Disposition: attachment');  # hit to trigger external mechanisms instead of inbuilt

См. Rfc2183 для получения дополнительной информации о заголовке Content-Disposition.

12 голосов
/ 10 апреля 2009

Это лучший способ сделать это, предположив, что вы не хотите, чтобы пользователь видел реальный URL файла.

<?php
  $filename="download.txt";
  header("Content-disposition: attachment;filename=$filename");
  readfile($filename);
?>

Кроме того, вы можете защитить свои файлы с помощью mod_access.

4 голосов
/ 10 апреля 2009

PHP имеет ряд очень упрощенных C-подобных функций для записи в файлы. Вот простой пример:

<?php
// first parameter is the filename
//second parameter is the modifier: r=read, w=write, a=append
$handle = fopen("logs/thisFile.txt", "w");

$myContent = "This is my awesome string!";

// actually write the file contents
fwrite($handle, $myContent);

// close the file pointer
fclose($handle);
?>

Это очень простой пример, но вы можете найти больше ссылок на такого рода операции здесь:

PHP fopen

2 голосов
/ 10 апреля 2009

Если вы установите тип контента на application / octet-stream, браузер ВСЕГДА предложит файл для загрузки и никогда не будет пытаться отобразить его внутри, независимо от того, какой это тип файла.

<?php
  filename="download.txt";
  header("Content-type: application/octet-stream");
  header("Content-disposition: attachment;filename=$filename");

  // output file content here
?>
2 голосов
/ 10 апреля 2009

Просто разместите ссылку на сайте на http://example.com/textfile.php

И в этот PHP-файл вы положили следующий код:

<?php
header('Content-Type: text/plain');
print "The output text";
?>

Таким образом, вы можете создавать динамический контент (из базы данных) ... Попробуйте Google, чтобы указать «Content-Type», если это не тот, который вы ищете.

...