Эта тема на forum.dklab.ru


vitaliy: ob_get_contents() не передается сессия при отключеных кукисах
Тестовый код
<?php
session_start();
ob_start();
ob_implicit_flush(0);

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<a href="?mode=1">TEST</a>
<body>

</body>
</html>
<?php
ob_end_flush();
$Content=ob_get_contents();
@mail('info@mediainform.com.ua', 'site', $Content);


?>

При отключеных кукисах на странице нормально PHPSESSID передается,


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<a href="?mode=1&PHPSESSID=9f8747984da54bc0d802026595ffbda6">TEST</a>
<body>

</body>
</html>



а ob_get_contents() не передает

X-Sendmail-Cmdline: sendmail_stub.pl -t -i
To:
Subject: site

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<a href="?mode=1">TEST</a>
<body>

</body>
</html>


Г.О.:
Ничего не понятно.
Вы выдводите страницу или отправляете ее код по мылу? Если по мылу, то sid передаваться и не будет — с какой стати?
demehov:
Извиняюсь, наверное и сам не потому пути пошел.
Проблема на реальном проекте

Производится сжатие страницы

На основной странице


ob_start();
ob_implicit_flush(0);
session_start();

echo 'Текст страницы ....';


if(SDEBUG_MODE==false)
{
GzDocOut(3,1); //вызывается функция сжатия
}
else
{
ob_end_flush();
}


Когда выполняется else, то все нормально PHPSESSID присоединяется

Код сжатия

...
$Contents = ob_get_contents();
ob_end_clean();

if ($debug){
$was=strlen($Contents);
$stay=strlen(gzcompress($Contents, $level));
$s = "<center><font style='color:#C0C0C0;
font-size:9px; font-family:tahoma'>áûëî: ".$was."; ";
$s .= "ñòàëî: ".$stay." (".(100-round($stay/$was*100))."%) </font></center>";
$Contents .= $s;
}
header("Content-Encoding: $ENCODING");
print "\x1f\x8b\x08\x00\x00\x00\x00\x00";
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents, $level);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
echo $Contents;
...


Там вызывается ob_get_clean();, с ob_end_flush(); не работает

С этой буферизацией я чтото не очень разобрался

Если кто знает, то подскажите пожалуйста
Г.О.:
demehov

else {
ob_end_flush();
}
Когда выполняется else, то все нормально PHPSESSID присоединяется

с ob_end_flush(); не работает

Так все нормально или не работает?

Может это не в буферизации дело, а в сжатии?
Если делать сжатие в сценарии, то получается, что PHP должен в конце весь вывод обратно разжать, вытащить ссылки, поставить sid везде и опять все сжать. Скорее всего он этого не делает. Хотя утверждать не буду.
demehov:
Сжатие с ob_end_flush(); не работает

А как можно проверить что в этом виновато сжатие?
Г.О.:
А как можно проверить что в этом виновато сжатие?
Попробуйте сделать с сжатием и без буфера.
И заодно с буфером и без сжатия.
demehov:
Без буферизации не получается потому что в сжатии идет отправка header("Content-Encoding: $ENCODING");

Эта тема на forum.dklab.ru