Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: скачивание txt файла
 
 автор: *m*   (18.06.2009 в 22:24)   письмо автору
 
 

Всем привет:

Есть код:

<?
$content 
fopen("text.txt""w"); 

fwrite($content$text); 

fclose($content); 

echo 
"<a href='text.txt'>Скачать</a> ";
?>


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

знаю, что можно с помощью загаловков, но не знаю, куда их прописывать:

header("Content-Disposition: attachment; filename=text.txt");
header("Content-type: application/octet-stream");

  Ответить  
 
 автор: Николай2357   (18.06.2009 в 22:59)   письмо автору
 
   для: *m*   (18.06.2009 в 22:24)
 

Прямо сверху и прописать.

  Ответить  
 
 автор: *m*   (18.06.2009 в 23:11)   письмо автору
 
   для: Николай2357   (18.06.2009 в 22:59)
 

выдает ошибку:

Warning: Cannot modify header information - headers already sent by (output started at Z:\ и.т.д

  Ответить  
 
 автор: Adamant   (18.06.2009 в 23:12)   письмо автору
 
   для: *m*   (18.06.2009 в 22:24)
 


header("Content-Disposition: attachment; filename=text.txt");
header("Content-type: application/octet-stream");

echo file_get_content('text.txt');

  Ответить  
 
 автор: *m*   (18.06.2009 в 23:18)   письмо автору
 
   для: Adamant   (18.06.2009 в 23:12)
 

а файл гет контент тут причем?

  Ответить  
 
 автор: Adamant   (18.06.2009 в 23:27)   письмо автору
 
   для: *m*   (18.06.2009 в 23:18)
 

Вначале посылаются заголовки (до этого ничего не должно выводиться в браузер, даже пробел перед <?php). Затем отдается содержимое файла. file_get_contents(). Но содержимое файла не выводится на печать, а отдается на загрузку.

  Ответить  
 
 автор: *m*   (18.06.2009 в 23:29)   письмо автору
 
   для: Adamant   (18.06.2009 в 23:27)
 

тоесть сами заголовки должны распологаться прямо в самом начале страницы?

  Ответить  
 
 автор: Trianon   (18.06.2009 в 23:24)   письмо автору
 
   для: *m*   (18.06.2009 в 22:24)
 

>

><?
>$content fopen("text.txt""w"); 
>
fwrite($content$text); 
>
fclose($content); 
>echo 
"<a href='text.txt'>Скачать</a> ";
>

>
>результатом работы этого скрипта будет вывод содержимого text.txt в браузер.

Результатом ... работы этого ... скрипта будет вывод в браузер не содержимого text.txt ,
а лишь коротенькой такой строки
<a href='text.txt'>Скачать</a> 

Это всё, что сделает этот скрипт!

  Ответить  
 
 автор: *m*   (18.06.2009 в 23:29)   письмо автору
 
   для: Trianon   (18.06.2009 в 23:24)
 

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

  Ответить  
 
 автор: Adamant   (18.06.2009 в 23:43)   письмо автору
 
   для: *m*   (18.06.2009 в 23:29)
 


<?php
if (isset($_GET['download'])) {
    if (
$_GET['download'] == 'text_file') {
        
header("Content-Disposition: attachment; filename=text.txt");
        
header("Content-type: application/octet-stream");

        echo 
file_get_contents('text.txt');
    }
}

echo 
"<a href='?download=text_file'> Скачать файл </a><br />\n";
?>

  Ответить  
 
 автор: Trianon   (18.06.2009 в 23:47)   письмо автору
 
   для: Adamant   (18.06.2009 в 23:43)
 

первый раз было лучше.

  Ответить  
 
 автор: *m*   (19.06.2009 в 12:32)   письмо автору
 
   для: Adamant   (18.06.2009 в 23:43)
 

ошибки исчезли, но скачивание файла не начинается..
код взял ваш, вместо text_file написал text.txt соответственно, так как в моем случае файл text.txt.. почему не начинается загрузка?

  Ответить  
 
 автор: *m*   (19.06.2009 в 15:20)   письмо автору
 
   для: *m*   (19.06.2009 в 12:32)
 

кто-нибудь знает решение???

  Ответить  
 
 автор: Adamant   (19.06.2009 в 15:44)   письмо автору
 
   для: *m*   (19.06.2009 в 15:20)
 

Так чего пишет:

<?php 
error_reporting
(E_ALL);
 
$file 'text.txt';

if (isset(
$_GET['download'])) { 
    if (
$_GET['download'] == $file) { 
        if (!
is_file($file)) {
            echo 
"Файл <b>$file</b> не найден<br />";
            exit;
        }
        
header("Content-Disposition: attachment; filename=text.txt"); 
        
header("Content-type: application/octet-stream"); 

        echo 
file_get_contents($file); 
    } else {
        echo 
"\$_GET['download'] не  <b>$file</b><br />";
    }
} else {
  echo 
"\$_GET['download'] не существует<br />";  
}

echo 
"<a href='?download=$file'> Скачать файл </a><br />\n"
?>

  Ответить  
 
 автор: *m*   (20.06.2009 в 14:02)   письмо автору
 
   для: Adamant   (19.06.2009 в 15:44)
 

сначала выдает $_GET['download'] не существует, после нажатия на кнопку скачать
выводит $_GET['download'] не text.txt при нажати на ссылку опять пишет что $_GET['download'] не существует. Загрузка не начинается.. но файл точно существует..

если дать ссылку вида <a href="text.txt"></a> выводит содержимое файла в браузер.

  Ответить  
 
 автор: Diplex   (20.06.2009 в 14:25)   письмо автору
 
   для: *m*   (20.06.2009 в 14:02)
 

По такой ссылке всё хорошо качается:
index.php?download=text.txt


> если дать ссылку вида <a href="text.txt"></a> выводит содержимое файла в браузер.

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

  Ответить  
 
 автор: Trianon   (20.06.2009 в 14:53)   письмо автору
 
   для: Diplex   (20.06.2009 в 14:25)
 

>По такой ссылке всё хорошо качается:
>
index.php?download=text.txt


Если мы говрим о скриптах, уже представленных в этом топике, по такой ссылке ничего хорошего не выкачается.
Файл окажется разрушен.

  Ответить  
 
 автор: Diplex   (20.06.2009 в 14:58)   письмо автору
 
   для: Trianon   (20.06.2009 в 14:53)
 

>> Если мы говрим о скриптах, уже представленных в этом топике, по такой ссылке ничего хорошего не выкачается.
Файл окажется разрушен.

Да, поторопился. Просто увидел, что что-то отдается на сохранение, а что именно - не посмотрел :)


Вот пример, который сразу выводит файл на сохранение:

<?php
if($_GET['down'])
{
if (
is_file($_GET['down'])) {
header("Content-Disposition: attachment; filename=\"$_GET[down]\""); 
header("Content-type: application/octet-stream"); 
echo 
file_get_contents($_GET['down']);  
} else { echo 
'Файл не найден!'; }
} else { echo 
'Не передано название файла!'; }
?>


Вызывается так:
script.php?down=text.txt

  Ответить  
 
 автор: цы   (20.06.2009 в 15:10)
 
   для: Diplex   (20.06.2009 в 14:58)
 

[от модератора для psychomc]
не ожидал

  Ответить  
 
 автор: psychomc   (11.12.2013 в 23:05)   письмо автору
 
   для: цы   (20.06.2009 в 15:10)
 

[Модератор: принято]

  Ответить  
 
 автор: *m*   (20.06.2009 в 15:33)   письмо автору
 
   для: Diplex   (20.06.2009 в 14:58)
 

сначала выводит, что не переданно название файла, после нажатия на кнопку скачать
пишет что файл не найде, (но файл существует, все перепроверил)

пр инажатии на ссылкуи <a href='script.php?down=$file'>Скачать</a>

где script.php страница на которой выполняется скрипт.

файл text.txt лежит в отной папке со скриптом.

почему же не работает?? и почему пишет что файл не найден?

  Ответить  
 
 автор: Diplex   (20.06.2009 в 15:38)   письмо автору
 
   для: *m*   (20.06.2009 в 15:33)
 

$file - это text.txt

ссылка должна быть с таким адресом:
<a href='script.php?down=text.txt>Скачать</a>

  Ответить  
 
 автор: *m*   (20.06.2009 в 16:05)   письмо автору
 
   для: Diplex   (20.06.2009 в 15:38)
 

ну это понятно, у меня в начале кода переменной файл и придается значение text.txt только что это меняет результат работы один при text.txt и если прописано $file -- блин почему же не работает?(

  Ответить  
 
 автор: Diplex   (20.06.2009 в 16:20)   письмо автору
 
   для: *m*   (20.06.2009 в 16:05)
 

А в нужных местах $_GET[down] на $file меняете?

Опробуйте скрипт - не меняя в нём ничего! Итог должен быть такой: Вы запускаете скрипт, и если всё правильно, то Вам выдаётся файл. Если что-то неправильно, то будет указано - в чём ошибка.

  Ответить  
 
 автор: *m*   (20.06.2009 в 22:53)   письмо автору
 
   для: Diplex   (20.06.2009 в 16:20)
 

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

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

спасибо.

  Ответить  
 
 автор: Diplex   (20.06.2009 в 23:56)   письмо автору
 
   для: *m*   (20.06.2009 в 22:53)
 

Код я Вам уже написал.

1) Сохраните его с названием script.php
2) Залейте в папку с этим скриптом text.txt
3) Запустите скрипт через адресную строку браузера: http://...../script.php?down=text.txt

Результат:
Вам должен выдаться на скачивание файл text.txt

  Ответить  
 
 автор: *m*   (21.06.2009 в 00:59)   письмо автору
 
   для: Diplex   (20.06.2009 в 23:56)
 

ок, а почему именно script.php долен называться??

и где мне $_GET['down'] нужно поменять на $file?

  Ответить  
 
 автор: Diplex   (21.06.2009 в 15:07)   письмо автору
 
   для: *m*   (21.06.2009 в 00:59)
 

Ничего нигде менять не нужно. Сделайте всё, как я написал, и посмотрите на результат.

  Ответить  
 
 автор: *m*   (21.06.2009 в 19:43)   письмо автору
 
   для: Diplex   (21.06.2009 в 15:07)
 

итак, делаю так:

создал файл text.txt

создал файл script.php его содержание:


<form method="get">
<input type="submit" name="down" value="down">
</form>

<?php 
if($_GET['down']) 

if (
is_file($_GET['down'])) { 
header("Content-Disposition: attachment; filename=\"$_GET[down]\"");  
header("Content-type: application/octet-stream");  
echo 
file_get_contents($_GET['down']);   
} else { echo 
'Файл не найден!'; } 
} else { echo 
'Не передано название файла!'; } 

echo 
"<a href='script.php?down=text.txt'> Скачать </a>";
?>


пишу в браузере http://.../script.php
загружается страница с кнопкой down
ниже:
Не переданно название файла 'Скачать файл'

после нажатия на кнопку down
пишет файл не найден (хотя файл есть он существует!)
нажимаем скачать файл

выводит:

Cannot modify header information - headers alreadz sent bz )output started at (далее полный путь к файлу script.php on line 9)

Cannot modify header information - headers alreadz sent bz )output started at (далее полный путь к файлу script.php on line 10)

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

мазафака это самое геморойное с чем мне приходилось сталкиваться, я и самое обидное что я не могу понять почему не работает, что не так???

  Ответить  
 
 автор: Adamant   (21.06.2009 в 20:38)   письмо автору
 
   для: *m*   (21.06.2009 в 19:43)
 

Жесть! Честное слово. Обязательно к прочтению (изучению) http://phpfaq.ru/header
Вот запустите ничего не меняя в коде:


<?php 
$file 
'text.txt';

if (isset(
$_GET['down'])) { 
    if (
$_GET['down'] == $file) { 
        if (!
is_file($file)) {
            echo 
"Файл <b>$file</b> не найден<br />\n";
        } else {
            
header("Content-Disposition: attachment; filename=$file"); 
            
header("Content-type: application/octet-stream"); 

            
readfile($file); 
            exit;
        }
    } else {
        echo 
"Файл $file не разрешен админом для скачивания<br>\n";
   }
} else {
    echo 
"<a href='?down=$file'> Скачать файл </a><br />\n"
}
?>

  Ответить  
 
 автор: Diplex   (21.06.2009 в 23:10)   письмо автору
 
   для: Adamant   (21.06.2009 в 20:38)
 

Жесть в том, что человек не хочет слушать! Его просят, чтобы ничего не менял, а он каждый раз что-то своё добавляет... Лично мои нервы сдают :)))

  Ответить  
 
 автор: Adamant   (21.06.2009 в 23:24)   письмо автору
 
   для: Diplex   (21.06.2009 в 23:10)
 

Если уважаемый M не может(не хочет) справиться с такой пустяковой задачей, то что говорить о более сложных.
Элементарное нежелание думать(соображать) самостоятельно. Есть такой инструмент Google, который может ответить почти на все вопросы.

ЗЫ. Diplex согласен с вами. Тоже считаю, что уже более чем достаточно помогли топикастеру, для того чтобы у него по сабжу наступило просветление.

  Ответить  
 
 автор: vitaly-nikov   (19.11.2012 в 17:44)   письмо автору
 
   для: Adamant   (21.06.2009 в 20:38)
 

А подскажите как эту кнопку "Скачать файл" вывести в HTML файл отдельно (для размещения в статье, к примеру)?
И как можно вместо кнопки "Скачать файл" добавить картинку?
Заранее СПАСИБО!!!

  Ответить  
 
 автор: sergei1094   (11.12.2013 в 00:11)
 
   для: *m*   (21.06.2009 в 19:43)
 

Запуская скрипты в которых присутствует заголовок, убедитесь, что САМАЯ первая строка где открывается тег <?php не имеет пробелов до него. И самой первой строкой должен быть именно данный тег. Тег типа данного типа правильный:
1. <?php ...
2.
3.

Тег данного типа не правильный

1.
2. <?php ...
3.

Если же у вас сделано всё правильно, то проверьте кодировку вашего php скрипта. Он должен быть в кодировке UTF-8 без BOM сигнатуры. Зачастую ошибка в заголовках возникает из-за BOM сигнатуры. Принцип таков: Данная сигнатура, устанавливает специальный НЕВИДИМЫЙ символ в самое начало вашего файла. Вам может казаться что начало строки пустое, но может быть и не так, и придерживайтесь данного правила.

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 22:14)   письмо автору
 
   для: sergei1094   (11.12.2013 в 00:11)
 

[Модератор: Еще один неадекватный пост, и закрываем тему!]

  Ответить  
 
 автор: psychomc   (11.12.2013 в 13:18)   письмо автору
 
   для: *m*   (21.06.2009 в 19:43)
 

не правильно делаете, до вызова header не должно быть никакого вывода в браузер

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования