Автор Тема: Flash back  (Прочитано 15831 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MrGreeN

  • просто зелёный
  • Постоялец
  • ***
  • Сообщений: 195
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #15 : 20 Августа 2003, 13:51:05 »
Или я уже совсем запутался

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #16 : 20 Августа 2003, 14:02:04 »
Цитировать
MrGreeN:
Буферизация на стороне сервера?

Ты не понял, что это такое.
Буфер - это емкость. которая вбирает в сябе что-то, чтобы потом отдать.
Цитировать
MrGreeN:
Значит хранение всех переменных пока не очистим

при чем здесь переменные?!
Буферизуется не переменные, а ВЫВОД В БРАУЗЕР.
Цитировать
MrGreeN:
Следовательно это альтернатива сессионому механизму?

господи, а сессии-то тут при чем?!
Цитировать
MrGreeN:
Хотя я включил это в код чего-то не сильно это помогает, как выводился запрос на повторную отправку данных так и выводиться...

А по повторной отправке данных тебе надо читать
здесь http://faq.phpclub.net/na_tanke
и здесь http://tony2001.phpclub.net/faq/other.location.html

и никакого отношени повторный вывод к буферизации не имеет.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Flash back
« Ответ #17 : 20 Августа 2003, 15:29:30 »
буферизация - это стандартный прием при операциях ввода-вывода (не только в пхп).
Например:

print "abcd";
print "efgh";
... /// и так далее
print "xyz";

если вывод буферизирован, то функция print будет записывать текст  сначало в буфер (ячейку памяти) и когда этот буфер заполнится - сбрасывать его клиенту (точно также и при записи в файл - fputs() может не сразу делать запись в файл а лишь при заполнении буфера). Таким образом достигается ускорение операций вывода.
Все что я описал выше - это не про пхп а про буферизацию в общем.

Что касается пхп - то в нем можно буферизировать вывод (то есть результат операций echo, print  и других функций, выводящих данные клиенту - например просто сырой html-код).
Может работать в 3 режимах:
1. implicit_flush - настройка в php.ini, которая отключает буферизацию и любой вывод будет сразу же послаться клиенту. Данный режим AFAIK не рекомендуется использовать
2. ограниченная буферизация (не знаю как правильно она называется) но смысл в том, что буфер имеет какой-то размер
В php.ini параметр output_buffering. Вывод сначало записывается в буфер и как отлько он заполнен - отправляется клиенту.
3. полная буферизация - весь вывод записывается в буфер и по окончанию работы скрипта отсылается клиенту. Именно это и делает ob_start();
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн MrGreeN

  • просто зелёный
  • Постоялец
  • ***
  • Сообщений: 195
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #18 : 21 Августа 2003, 10:22:31 »
Макс
Это понятно,... у меня возник вопрос не про буфер (хотя если читать по ману, создаётся впечатление что он постоянен вообще а отсылаются только заголовки), а про использование оного для предотвращения возникновения запроса на повторную посылку данных.
Т.е. получается что? Когда пользователь нажимает кноповку рефреш - то данные хранящиеся в буфере будут автоматом (ob_end_flush) посланы опять в браузер,...это хорошо...но в связи с этим возникает главный
вопрос:
 Не может ли возникнуть такая ситуация когда при повторнй посылке содержимого буфера в нём окажутся не те данные или в нём вообще ничего не будет ? (не брать во внимание переполнение его или ob_end_clean)
P.S прошу извинить за назойливость но привык во всём разбираться до конца...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #19 : 21 Августа 2003, 10:55:08 »
КОГДА
ПОЛЬЗОВАТЕЛЬ
НАЖИМАЕТ
НА
КНОПКУ
РЕФРЕШ,

НИ БУФЕРА
НИ ДАННЫХ
НИ ЗАГОЛОВКОВ
НИ САМОГО СКРИПТА
В ПАМЯТИ СЕРВЕРА УЖЕ НЕТУ!!!!
ОБ ЭТОМ ТЕБЕ ЧЕРНЫМ ПО БЕЛОМУ НАПИСАНО В ФАКЕ, КУДА Я УЖЕ ЗАДОЛБАЛСЯ ТЕБЯ ТЫКАТЬ НОСОМ, ТЫ ПРИВЫКШИЙ РАЗБИРАТЬСЯ ДО КОНЦА, НО ГЛЯДЯЩИЙ В КНИГУ, И ВИДЯЩИЙ ТАМ ТОЛЬКО ЖИРНУЮ ФИГУ!

На, читай, разбирайся:
Цитировать
РНР остался на сервере, ждать новых запросов с данными для обработки. PHP, но не скрипт! Скрипт, который выполнялся, отдавая пользователю страницу, завершил работу. Все данные, которые были в нем - пропали


Ты уже как минимум, полгода долбишься лбом о гранит РНР, и до сих пор не понял, что это такое и как работает!
Мало того, когда тебя тычут носом в фак, который доступен даже дефективному первокласснику, ты все равно продолжаешь говорить дикие вещи!
Ты вообще читал, скажи честно? вот это самое место процитированное?
А по своей привычке - разобрался в нем? Если уж такое простое предложение требует какого-то разбора?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #20 : 21 Августа 2003, 10:57:20 »
господи.
у него мало того, что данные хранятся в буфере годами, так еще оказывается, что в буфер, который буверизует ВЫВОД ОТ СЕРВЕРА, он умудрился в своем воспаленном воображении запихнуть ДАННЫЕ ОТ КЛИЕНТА!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #21 : 21 Августа 2003, 10:59:08 »
видал я тупиц на этом форуме...

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

Оффлайн MrGreeN

  • просто зелёный
  • Постоялец
  • ***
  • Сообщений: 195
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #22 : 21 Августа 2003, 11:11:42 »
RomikChef
 Тогда нафига было вообще лепить этот ob_start в тему про рефреш?
P.S. я об PHP полгода не долбаюсь, а разбираюсь в свободное от основной деятельности время...
 И не надо тут цитировать фак, читал и не раз... и написал ты там не про буфер а про скрипт (откуда же обыкновенному челу известно где у скрипта данные (которые пропали) хранятся, может в сессиях может в куках , может где в оперативке, может ещё фиг знает где?????)

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Flash back
« Ответ #23 : 21 Августа 2003, 11:25:58 »
Цитировать
ob_start в тему про рефреш?
прочти внимательнее, на какую ошибку я ей посоветовал ob_start()
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #24 : 21 Августа 2003, 11:29:08 »
об_старт надо было лепить в тему про рефреш потому, что он в этой теме решает проблему.
если ты не в состоянии прочесть топик и понять, почему появился об_старт, то именно это и надо спрашивать.
читать надо не только заголовок и последнее сообщение.

от рефреша спасает хидер локейшен.
Хотя ты все равно нихрена не поймешь - почему.
просто поверь.
Хидер, как написано в факе, который ты не понимаешь, можно отправлять только до того, как сервер отправил хоть что-то клиенту.
у нашей кошечки такая ситуация, что сделать этого нельзя.
от этого может помочь буферизация, которую тебе так великолепно разжевал Макс и из которой ты ни бельмеса не понял, которая задержит вывод данных от СЕРВЕРА к БРАУЗЕРУ и даст отправиться заголовкам от СЕРВЕРА к БРАУЗЕРУ.
Заголовкам, которые предотаращают отправку данных формы БРАУЗЕРОМ, поскольку просто перенаправляют его на другую страницу, на новую, не на ту, на которую он отправлял данные методом пост.

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

Оффлайн MrGreeN

  • просто зелёный
  • Постоялец
  • ***
  • Сообщений: 195
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #25 : 21 Августа 2003, 11:44:28 »
RomikChef
 Ага, а для того чтобы всё обгадить интелект необходим неимоверный...Пиши и дальше факах как писал...
 Помощь новичкам? А как же много та им поможешь советами типа " Все данные, которые были в нем - пропали", ага и всё взорвалось и испарилось...сам догадаешься что народ после такого заявления думает о языке...
 И чего тут похабного в том что человек решил проанализировать чего - либо...на ошибках учатся
P.S. А за последний пост спасибо ( если не принимать во внимание  лирические отступления в начале и в конце)
Макс
Ага... понял
« Последнее редактирование: 21 Августа 2003, 11:55:06 от MrGreeN »

Оффлайн Кошка

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://priton.ru
Flash back
« Ответ #26 : 21 Августа 2003, 13:22:38 »
ужас

Оффлайн MrGreeN

  • просто зелёный
  • Постоялец
  • ***
  • Сообщений: 195
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #27 : 21 Августа 2003, 14:45:04 »
Я вообще из-за чего весь этот сыр-бор поднял то...
У меня тут такая проблемаесть скрипт вида 
<?php
if (isset($_GET[\'s\'])&&$_GET[\'s\']==1)
{
include ("inc_func.php");
head();
if(isset($_POST[\'userpassword\'])&&isset($_POST[\'userpassword\']))
if(checkpass($_POST[\'username\'],$_POST[\'userpassword\']))
 {
 switch ($mode)
  {
   case \'main\':
    include \'inc_main.php\';
   break;
   case \'adm\' :
    include \'inc_adm.php\';
   break;
   case \'stat\':
    include \'inc_stat.php\';
   break;
  }
  foot();
     exit;
 }
form_pass();
foot();
}
else header("location: [url]http://10.0.31.12/count/admin.php?s=1[/url]");
?>

 Соответственно в зависимости от mode инклудятся inc_* в которых есть формы, отправка данных в которых производиться  постом со всеми необходимыми переменными в полях hidden по адресу inc_func.php
 Хедер на самого себя (но с дополнительным параметром) сделан для того чтобы избежать запроса на отправку данных....
Но в этом случае (если с хедером работаю) получается так что данные то второй раз из форм не передаются (а если без хедера, то соответственно передаются, но запрос на отправку тоже вылезает)...
 вот и подумал что может быть ob_start панацея от всех бед...ужо очень не хотелось бы сессии использовать
« Последнее редактирование: 21 Августа 2003, 15:41:53 от MrGreeN »

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #28 : 21 Августа 2003, 15:11:29 »
Цитировать
MrGreeN:
Но в этом случае (если с хедером работаю) получается так что данные то второй раз из форм не передаются

Что значит - "второй раз не передаются".
Ты кому рассказываешь? Себе или нам?
И откуды мы должны знать, что у тебя там что-то два раза должно куда-то передаваться, когда у всех нормальных людей все передается один раз?

отправил юзер форму, если с ней все ок, то записал, и локейшеном перешел.
если не ок, то вывел ее снова, заполненную, НИКУДА НА ХОДЯ.

Задачка из двух действий, обсосанная опять же до косточек - и все равно у тебя с ней какие-то проблемы.
Ну так хоть объясни толком, в чем они состоят!

Оффлайн MrGreeN

  • просто зелёный
  • Постоялец
  • ***
  • Сообщений: 195
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Flash back
« Ответ #29 : 21 Августа 2003, 15:26:41 »
//фрагмент inc_func.php
<?php function form_pass()
{
?>
  <table align="center">
 <tr>
  <td align="center">
  <font color="red">


<b> Внимание!!!
</b></font>
  

  Для получения необходимой информации вы должны обладать правами системного администратора<p>
  </td>
 </tr>
 <tr>
  <td align="center">
  <form action="<?php echo \'admin.php\';?>" method="post">
   Login   :  <input type="text" name="username" > Password:  <input type="password" name="userpassword">

             <input type="submit" name="submit" value="Registration">
             <input type="hidden" name="mode" value="main">
  </form>
  </td>
 </tr>
 </table>
<?php

?>
// а сам inc_func.php инклудится в admin.php
« Последнее редактирование: 21 Августа 2003, 15:41:44 от MrGreeN »

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28