PDA

Просмотр полной версии : Gzip encoded output in php(+)


Sheryld
11.05.2005, 12:10
Собственно проблема в том, что динамические(но не все) страницы(поиск, например) не работают.

Делаю примерно так:

$content = $t->get(); //контент из темплейта(html code)
$crc = pack('V',crc32($content));
$size = pack('V',strlen($content));
$content = gzcompress($content); //сжимаем
$output = "\x1f\x8b\x08\x00\x00\x00\x00\x00"; //заголовок gzip
$output .= substr($content, 0, strlen($content) - 4); //«откусываем» последних 4 байта
$output .= $crc; //контрольная сумма
$output .= $size; //длина
Header("Content-Encoding: gzip");
echo $output;
exit;

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

С другими страницами все ок(в том числе и динамическими, но менее нагруженными).

страница поиска обрабатывает параметры через get,
т.е. урлы вида:

index.php?
action=search&keywords=keywords&searchFilter=onlyTitle&searchType=or

RaZEr
11.05.2005, 12:15
А в чём проблема использовать стандартные ф-ии пхп?

Sheryld
11.05.2005, 12:17
Что значит использовать стандартные фун-ии? Я и так использую:)

RaZEr
11.05.2005, 12:20
ob_gzhandler

Sheryld
11.05.2005, 12:31
да тоже самое, видимо это полный аналог: ob_gzhandler :biggrin:

RaZEr
11.05.2005, 12:35
Тогда видимо глюк пхп. Используй возможности апача :biggrin:

AleXXXSoft
11.05.2005, 12:45
скрипт убивается по таймауту, данные повисают и броузеру не уходят, в броузере в таком случае пустая страница и надпись "Готово."

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

P.S. либо попробовать сжимать с меньшим коэффициентом компрессии

Sheryld
11.05.2005, 12:50
эээ. да она выполняется довольно быстро:)

хостинг: собственный сервер(в стойке у хостера). 2 x Xeon и т.д.:)

AleXXXSoft
11.05.2005, 12:52
Sheryld:
эээ. да она выполняется довольно быстро
засекал? :)

Sheryld:
хостинг: собственный сервер(в стойке у хостера). 2 x Xeon и т.д.
а set_time_limit(0) не спасает? :)

Sheryld
11.05.2005, 12:59
оно даже с loclahost-а не работает, остальные страницы вроде работают нормально:)

AleXXXSoft
11.05.2005, 13:05
ну тогда mod_deflate в руки :) он и удобнее и настроек много, и скрипты проще будут...

P.S. а почему все-таки не использовать ob_gzhandler?

Sheryld
11.05.2005, 13:19
а при его использовании вообще интересно:

Страницы которые у меня не обрабатывались моей функцией, им игнорируются, т.е. сжатия не происходит(смотрю по логам апачи), на других страницах, аналогично моей функции:)

или меня уже глючит:)

AleXXXSoft
11.05.2005, 13:21
оно не глючит, просто есть некоторые ограничения, например слишком маленькие и слишком большие страницы оно не обрабатывает..., да и жмется только тогда, когда броузер попросит в заголовке (Accept-Encoding: чё-то там)

Sheryld
11.05.2005, 13:23
вот поэтому своя функция лучше:)
т.к. ты всегда знаешь, что она делает.