X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Помогите с php! Буферизация?!
str3ss
str3ss
Topic Starter сообщение 5.4.2011, 15:57; Ответить: str3ss
Сообщение #1


Новичок
*

Группа: User
Сообщений: 28
Регистрация: 22.10.2010
Поблагодарили: 14 раз
Репутация:   2  


Немного утрирую скрипт: есть страница выгрузки товара, допустим, в txt формат. Если заходим на страницу без параметров - выводим ссылку на выгрузку. Если гетом передаем dump - делаем выгрузку, возвращаем файл пользователю, и на страницу выводим сообщение о успешной выгрузке.

<html>
<head>
<title>Выгрузка товаров</title>
</head>
<body>
<h1>Выгрузка товаров</h1>
<?php
if(!isset($_GET['dump']))
{
?>
<a href="?dump">Выгрузить</a>
<?php
}
else
{
    //тут выгрузка товара
?>
Выгрузка завершена!
<?php
}
?>
</body>
</html>


место, где "тут выгрузка товара" я представляю так:
в $out я записываю то, что хочу видеть в файле

    $out = "Все товары тут";
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=content.txt");
    echo $out;


Понятно, что если прям так вставить - то ничего работать не будет: не можем отсылать заголовки, т.к. они уже посланы
На ум приходит буферизация - помогите реализовать! Вариант выноса последнего блока в отдельный файл, и из страницы выгрузки ссылаться на него не подходит.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
danisimo
danisimo
сообщение 5.4.2011, 17:01; Ответить: danisimo
Сообщение #2


Бывалый
****

Группа: User
Сообщений: 390
Регистрация: 8.9.2010
Поблагодарили: 65 раз
Репутация:   12  


Чето я не понял в чем проблема, делай выгрузку товаров до того как страницу выводить, то есть в твоем случае

<?
if(isset($_GET['dump'])){
$out = "Все товары тут";
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=content.txt");
echo $out;

echo "Выгрузка завершена!";
}
else{
?>
<html>
<head>
<title>Выгрузка товаров</title>
</head>
<body>
<h1>Выгрузка товаров</h1>

<a href="?dump">Выгрузить</a>


</body>
</html>
<?}?>


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
str3ss
str3ss
Topic Starter сообщение 5.4.2011, 19:44; Ответить: str3ss
Сообщение #3


Новичок
*

Группа: User
Сообщений: 28
Регистрация: 22.10.2010
Поблагодарили: 14 раз
Репутация:   2  


(danisimo @ 5.4.2011, 19:01) *
Чето я не понял в чем проблема, делай выгрузку товаров до того как страницу выводить, то есть в твоем случае

и на выходе мы получим файл, содержащий $out и "Выгрузка завершена!" - в этом и проблема
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
freesoccer
freesoccer
сообщение 5.4.2011, 19:53; Ответить: freesoccer
Сообщение #4


Участник
***

Группа: User
Сообщений: 114
Регистрация: 23.8.2009
Из: Минск
Поблагодарили: 41 раз
Репутация:   8  


и на выходе мы получим файл, содержащий $out и "Выгрузка завершена!" - в этом и проблема

Судя по приведенному коду, именно это и должно выводиться в Вашем content.txt.
Если там должны быть товары - где их выборка?
Суть экспорта в текстовый файл Вы изложили верно, но чтобы данный экспорт произвести необходимо, как минимум, иметь список товаров, который у Вас в коде не наблюдается.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
str3ss
str3ss
Topic Starter сообщение 5.4.2011, 20:41; Ответить: str3ss
Сообщение #5


Новичок
*

Группа: User
Сообщений: 28
Регистрация: 22.10.2010
Поблагодарили: 14 раз
Репутация:   2  


(freesoccer @ 5.4.2011, 21:53) *
Судя по приведенному коду, именно это и должно выводиться в Вашем content.txt.
Если там должны быть товары - где их выборка?
Суть экспорта в текстовый файл Вы изложили верно, но чтобы данный экспорт произвести необходимо, как минимум, иметь список товаров, который у Вас в коде не наблюдается.

написал же: "Немного утрирую скрипт"
выборку сюда какой смысл писать?

проблема в том, что в файл нужно вывести ТОЛЬКО $out, а не $out и "Выгрузка завершена!"
еще раз поясню: в приведенном коде "Выгрузка завершена!" выведется не в браузер, а в файл

Сообщение отредактировал str3ss - 5.4.2011, 20:42
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
danisimo
danisimo
сообщение 5.4.2011, 21:07; Ответить: danisimo
Сообщение #6


Бывалый
****

Группа: User
Сообщений: 390
Регистрация: 8.9.2010
Поблагодарили: 65 раз
Репутация:   12  


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


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
str3ss
str3ss
Topic Starter сообщение 5.4.2011, 21:10; Ответить: str3ss
Сообщение #7


Новичок
*

Группа: User
Сообщений: 28
Регистрация: 22.10.2010
Поблагодарили: 14 раз
Репутация:   2  


(danisimo @ 5.4.2011, 23:07) *
Так а в браузер ничего и не выгрузится в любом случае, вы же вывод делаете в файл.

а что написано в первом посте?
ХОЧУ: возвращаем файл пользователю, и на страницу выводим сообщение о успешной выгрузке.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
freesoccer
freesoccer
сообщение 6.4.2011, 0:28; Ответить: freesoccer
Сообщение #8


Участник
***

Группа: User
Сообщений: 114
Регистрация: 23.8.2009
Из: Минск
Поблагодарили: 41 раз
Репутация:   8  


ТС, если 2 человека Вас не понимают с первого раза, это о чем-то да говорит.
По теме. После
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=content.txt");

всё выводится в аттач, поэтому все что выводится после этого заголовка ложится в текстовый файл. Ваш вариант ничего другого сделать не может.
По идее Вам нужно сделать следующее:
1. Выдать пользователю фразу "Выгрузка завершена!".
2. Перенаправить редиректом пользователя на скрипт, который сгенерит аттач. По идее новое окно в браузере открываться не будет и Вы добьетесь нужного Вам эффекта.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webnet
webnet
сообщение 6.4.2011, 12:05; Ответить: webnet
Сообщение #9


Бывалый
****

Группа: User
Сообщений: 371
Регистрация: 18.12.2008
Из: Москва
Поблагодарили: 61 раз
Репутация:   18  


<?php
ob_start();
?>
<html>
<head>
<title>Выгрузка товаров</title>
</head>
<body>
<h1>Выгрузка товаров</h1>
<?php
if(!isset($_GET['dump']))
{
?>
<a href="?dump">Выгрузить</a>
<?php
}
else
{
header('Refresh: 0; url=?do=nodelay');
echo $out;
echo "Выгрузка завершена!";
}
if(isset($_GET['do'])){
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=tovari.txt");
}
    ?>
</body>
</html>


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 654 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3422 12.12.2017, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) Помогите выбрать программу
Помогите выбрать программу
11 impak 1342 11.12.2017, 13:11
автор: Mikki
Открытая тема (нет новых ответов) php скрипты любой сложности / диз+верстка (адаптивно)
любые задачи на php - автоматизация, парсинг, работа с БД
1 affrodita 501 8.12.2017, 17:40
автор: affrodita
Открытая тема (нет новых ответов) Помогите найти плагин на WP
Отзывы с профилей соц сетей
1 SEOMR 440 30.11.2017, 7:18
автор: Nell


 



RSS Текстовая версия Сейчас: 15.12.2017, 18:11
Дизайн