Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Кэширование или что-то другое...


Автор: ArsNov 23.3.2006, 23:06
Проблема такая:

Грубо говоря есть php скрипт который генерит таблицу такого вида:

Код

<table>
<tr>
      <td> "Распечатка $s   "</td>
      <td> "А тут оперции с $s ($s=$s-1) +вывод информации за $s " </td>
</tr>
</table>


В левой(первой) ячейке распечатывается переменная $s (типа деньги), а в правой производятся операции с этими деньгами+распечатка всякой побочной информации за эти деньги.
Получается, что левая ячейка прорисовывается раньше правой, и вычисления выполняются позже.
Мне необходимо сделать так, чтобы распечатанная в левой ячейке информация не запаздывала от вычислений.

Чего то слышал про кэширование, буферизацию вывода, но так и не понял как это тут применить...
Как быть?
smile
Надеюсь понятно сформулировал.

Автор: GePo 23.3.2006, 23:46
думаю, кеширование и буферизация, это не то, что тебе надо. А надо тебе понять простую вещь - php скрипт - это в первую очередь скрипт. В каком порядке ты считаешь, зависит только от тебя. Также только от тебя зависит, в каком порядке ты выводишь. Грубо говоря, если ты хочешь, чтобы в левой колонке были результаты вычислений из правой, то тебе сначала нужно провести эти вычисления, запомнить их, вывести в левой, вывести в правой.

Автор: ArsNov 23.3.2006, 23:55
Спасибо! Я я это уже понял, только поздновато оказалось ))
Скрипт не маленький и очень накрученый, чего то менять очень тяжело. Неужели нету никаких выходов..?

Автор: PARROT 24.3.2006, 00:07
Нужен весь скрипт, тогда может быть найдеться выход.
Добавлено @ 00:09
Откуда берется эта $s?
Напиши алгоритм действий.

Автор: ArsNov 24.3.2006, 00:36
Сильно упрощенная схема выглядит так:
Код

…
print “<table>”;
print "<tr><td>.zagolovok()."</td></tr>"; 
print "<tr><td>”.menu(2)."</td></tr>";
print “<tr><td>”.center($id).”</td></tr>”;
print “<tr><td>”.zadnica().”</td></tr>”;
print "</table>";
…


Вот в функции zagolovok печатается переменная которая хранится в сессии
А в функции center($id) идет как раз вычисление этой переменной и занесение её в сессию. Точнее даже не в самом center($id) а в присоединенных через него скриптах.

Function center($id)
{
//Функция делает include скрипта который распечатывает инфу и просчитывает $s
}

Вот и получается что распечатка раньше вычислений.
Вот такие вот грабли блин…

Автор: ArsNov 24.3.2006, 00:53
И еще к этим граблям добавляется то, что в этом center($id) инклудится достаточно мощная структура, переность которую в другое место очень тяжело.. smile

Автор: ArsNov 24.3.2006, 01:31
Всё, проблема решена через кэширование, кому интересно:

Код

…
//Получили в буфер результат работы всех подключенных в center скриптов и за одно все переменные нужные записали в сессию
ob_start(); 
center($menu_id);
$buffer = ob_get_contents();
ob_end_clean(); 



print “<table>”;
print "<tr><td>.zagolovok()."</td></tr>"; 
print "<tr><td>”.menu(2)."</td></tr>";
print “<tr><td>”.print $buffer.”</td></tr>”;     //А здесь просто вывели результат буферизации
print “<tr><td>”.zadnica().”</td></tr>”;
print "</table>";
…

smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)