2009-04-10 4 views
11

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

Как я могу это сделать?

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

ответ

4

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

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

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

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

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

+0

Ссылка не работает. Не могли бы вы исправить это? –

+5

Это пример ссылки. – Zeusoflightning125

14

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

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

<?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.

+2

Я не знал о «Content-Disposition». Спасибо за информацию. +1 – Calvin

1

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

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

    // output file content here 
?> 
+0

PS: хотя он может работать с маленьким d на некоторых UA, его * не * спецификацией RFC, поэтому лучше всего использовать версию в верхнем регистре. –

+0

Другая проблема, связанная с использованием октетного потока, заключается в том, что вы вынуждаете пользователя сохранять его, потому что он не может использовать MIME для определения того, какое приложение открывается с внешней стороны, и это проблема. –

+0

@ Kent Fredric: Согласно RFC, имена заголовков не чувствительны к регистру. – tylerl

11

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

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

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

Смежные вопросы