|
|
|
| В скрипте есть такой фрагмент:
<?php
$dop = 10 ;
ob_start();
session_start();
echo "<br> dop $dop ";
$_SESSION['dop'] = $dop;
echo "<br> dop $dop ";
|
При вызове скрипта воспроизводится то, что и ожидалось:
dop 10
dop 10
Но если теперь в переменную $dop записать другое число, сохранить полученный код и ПЕРЕЗАПУСТИТЬ скрипт, то выводится прежнее зачение:
dop 10
dop 10
Вероятно, виной всему сессия. Но как от этого эффекта избавться, я никак не пойму!
===========
Работа на Денвере. | |
|
|
|
|
|
|
|
для: Владимир55
(01.11.2009 в 00:25)
| | Так ведь сессия уже инициализирована. в конце нужно уничтожить сессию. session_dectore() | |
|
|
|
|
|
|
|
для: ols
(01.11.2009 в 00:36)
| | В смысле
Так проблема решается, но создается другая. А именно. Даже если я делаю указанную Вами запись самой последней, в сессию, почему то, параметр $dop не уходит... | |
|
|
|
|
|
|
|
для: ols
(01.11.2009 в 00:36)
| | А разве переменную в сессии нельзя перезаписывать? Много раз делал что-то типа: $_SESSION['a'] =$_SESSION['a']+$a;
А в этом проблемы не может быть(ни разу до этого не с талкивался с этим)
void ob_start ([string output_callback])
Эта функция включает буферизацию вывода. Если буферизация вывода активна, никакой
вывод скрипта не высылается (кроме шапок/headers); вывод сохраняется во внутреннем
буфере.
|
| |
|
|
|
|
|
|
|
для: Владимир55
(01.11.2009 в 00:25)
| | Сессия тут не при чем. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2009 в 00:54)
| | Похоже, что сессия и вправду не виновата. Я закомментировал ее, а эффект тот же!
Но что же это может быть? Это самый верх скрипта, над этими записями ничего нет. Если закрыть страницу и открыть ее заново, то все нормально, а при обновлении вот такой глюк.
Не исключено, что в Денвере включены глобальные переменные, но даже и в этом случае такого, вроде бы, быть не должно.
Ведь так? | |
|
|
|
|
|
|
|
для: Владимир55
(01.11.2009 в 01:04)
| | переменные живут только при жизни процесса, исполняющего скрипт.
Дело не в этом.
Просто вызов одного и того же документа должен выдавать один и тот же результат.
Это естественное поведение. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2009 в 02:06)
| | >переменные живут только при жизни процесса, исполняющего скрипт.
>Дело не в этом.
>Просто вызов одного и того же документа должен выдавать один и тот же результат.
>Это естественное поведение.
Полностью согласен
НО автор темы прописал:
>>Но если теперь в переменную $dop записать другое число, сохранить полученный код и
>> ПЕРЕЗАПУСТИТЬ скрипт, то выводится прежнее зачение:
В итоге получается, что производиться вызов измененого документа(не того же самого), то есть в любом случае результат должен быть другой.
Я не встречался раньше с ob_start(); но в данном случае мне кажеться что это стоит убрать? | |
|
|
|
|
|
|
|
для: tvv123456
(01.11.2009 в 02:41)
| | . | |
|
|
|
|
|
|
|
для: tvv123456
(01.11.2009 в 02:41)
| | >>>Но если теперь в переменную $dop записать другое число, сохранить полученный код и
>>> ПЕРЕЗАПУСТИТЬ скрипт, то выводится прежнее зачение:
>
>В итоге получается, что производиться вызов измененого документа(не того же самого),
Того же. Имя осталось тем же. URI не содержал и намека на динамический характер формирования контента.
>то есть в любом случае результат должен быть другой.
Не должен. И опыт автора это подтверждает. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2009 в 03:19)
| | Я Вас понял, Спасибо! Постараюсь это учесть. С динамическим адресом наверняка будет нормально.
А вот что будет, если подобный код инклюдится в цикл, и значение переменной различное в каждом цикле. Опять будет вызов того же документа, который образовался при первом обращении? Или с инклюдом иначе? | |
|
|
|
|
|
|
|
для: Владимир55
(01.11.2009 в 12:53)
| | Не знаю, что будет.
Для меня include (с постоянным именем файла) загнать в цикл - дикость явное нарушение. | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2009 в 12:57)
| | Вот как! А я так часто делаю! Может, по этой причине порою в скипте происходят трудноуловимые процессы и сбои непонятного происхождения.
Но ведь само по себе использование include в цикле допустимо? Если при этом дать подключаемому файлу случайный динамический адрес?
Или как?
Вы каким образом поступаете? | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2009 в 12:57)
| | >Для меня include (с постоянным именем файла) загнать в цикл - дикость явное нарушение.
Слово "дикость" в данном контексте вполне объяснимо, а вот "явное нарушение" очень любопытно чего? | |
|
|
|
|
|
|
|
для: Николай2357
(02.11.2009 в 08:08)
| | Более того: сколько я ни пытался, поместить в цикл include НЕ с постоянным именем файла, а с динамическим, меняющимся при каждом подключении, вообще не удалось. Диагностируется ошибка - "нет такого файла". Похоже, что include требует точного имени файла, знак ? здесь учитывается не так, как в урлах. | |
|
|
|
|
|
|
|
для: Николай2357
(02.11.2009 в 08:08)
| | >Слово "дикость" в данном контексте вполне объяснимо, а вот "явное нарушение" очень
>любопытно чего?
Вообще стараются не использовать include в таком качестве, так как это традиционно область применения функций. | |
|
|
|
|
|
|
|
для: cheops
(02.11.2009 в 12:17)
| | Спасибо, это как раз понятно, это и относится к области "дикость". Если можно использовать класс или функцию, нет смысла подключать в цикле файл.
Вопрос несколько в другом. Если нарушение "явное", то наверное есть какие то стандарты или документация, регламентирующие этот момент. А они мне не известны...
Очень хотелось бы заполнить пробел в знаниях. | |
|
|
|
|
|
|
|
для: Николай2357
(02.11.2009 в 14:03)
| | Дело в том, что включаемый файл каждый раз дергается при вызове include, один раз загруженная функция потом не приводит к обращению к файловой системе. Все обращения к файловой системе лучше сводить к минимуму, так как они очень дорогие. Собственно специально это обычно не проговаривают, это подразумевается неявно при создании любой программы, на любом языке программирования.
PS Существуют исключения, когда include в цикле допустим - если у вас несколько файлов и о том, что включать нужно принимать решение динамически, а функциями в силу причин вам воспользоваться не удобно. | |
|
|
|