ob_gzhandler возвращает пустые страницы, когда сессия не существует - PullRequest
0 голосов
/ 29 июля 2010

Я хотел сжать свои страницы, поэтому я положил

ob_start('ob_gzhandler');

в начале моего заголовочного файла php. однако, поскольку я играл, я заметил, что это даст мне пустую страницу, если я начну сеанс, пока ob_gzhandler не использовался! поэтому я сделал ниже, и это сработало:

<?php
  if (session_id() === null ) ob_start('ob_gzhandler');
?>

как бы то ни было, я не уверен, что это всегда будет использовать сжатие, так как я представляю, что это может быть сеанс, но браузер все равно будет получать несжатые данные! Я думаю, мне придется перезапустить сессию, если сценарий происходит, который действительно не должен отличаться от времени разработки. но я думаю, что я действительно хочу знать, это несколько быстрых советов о zlib и об этом сжатии. Есть ли советы по производительности? Я предполагаю, что сервер выводит внутренний буфер, если в конце файла нет индикации, но я должен поместить его туда? ob_end_flushob_end_clean? ob_end_close

какие-нибудь замечания по использованию memcache с этим? любые советы и информация будут высоко оценены!

1 Ответ

0 голосов
/ 14 августа 2010

Перед тем, как ob_gzhandler () сжимает данные, он проверит, какой тип кодировки примет браузер, если его gzip, или выкачает (возможно, и другие вещи, я не уверен), что он напечатает вывод с этим сжатием. Поддерживаются все популярные браузеры, и даже если вы пишете собственный код или беспокоитесь о пауках поисковых систем, запросчик HTTP должен отправить правильный заголовок HTTP, сообщающий, что он принимает сжатые страницы. И не беспокойтесь, если браузер не поддерживает сжатые страницы, эта функция возвращает FALSE и сжатие не применяется.

Вот еще кое-что от php man: ob_start Эта функция включает буферизацию вывода. Пока активна буферизация вывода, из сценария не отправляется вывод (кроме заголовков), вместо этого вывод сохраняется во внутреннем буфере.

Содержимое этого внутреннего буфера может быть скопировано в строковую переменную с помощью ob_get_contents (). Чтобы вывести то, что хранится во внутреннем буфере, используйте ob_end_flush (). В качестве альтернативы, ob_end_clean () будет молча отбрасывать содержимое буфера. Предупреждение

Некоторые веб-серверы (например, Apache) изменяют рабочий каталог скрипта при вызове функции обратного вызова. Вы можете изменить его обратно, например, chdir (dirname ($ _ SERVER ['SCRIPT_FILENAME'])) в функции обратного вызова.

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

Снова эта часть скопирована из руководства по PHP!

...