Можно ли вызывать ob_start PHP более одного раза?
Извините, если это глупый вопрос, но я действительно не знаю.
Мой сайт действительно большой (количество файлов), его социальная сеть, и один из включенных файлов использует выходной буфер OB_start PHP для чего-то, я не думаю, что кто-то еще начал мой сайт давным-давно, а теперь он мне нужен. загляните в нее больше, чтобы увидеть, что она делает точно.
В любом случае, я хочу использовать ob_start («ob_gzhandler»); для сжатия файлов CSS, и все файлы на моем сайте загружаются (включены) через индексный файл, поэтому я хочу знать, могу ли я использовать его, даже если он уже используется где-то еще в коде?
Да, вы можете назвать это более одного раза. Однако он создает новый буфер каждый раз, поэтому будьте осторожны.
Из руководства : «Буферы вывода стекируются, то есть вы можете вызывать ob_start (), в то время как другой ob_start () активен. Просто убедитесь, что вы вызываете ob_end_flush () соответствующее количество раз.Если задействованы несколько функций обратного вызова, выход фильтруется последовательно через каждый из них в порядке вложенности ».
Вы говорите так:
Я хочу использовать
ob_start
("ob_gzhandler");
для сжатия CSS-файлов
Я предпочитаю обслуживать и сжимать JS / CSS (ну, статические) файлы – это работа веб-сервера (то есть Apache), а не PHP.
Об этом вы можете взглянуть на mod_deflate
– по крайней мере, если вы используете Apache 2.
все файлы на моем сайте загружаются (включены) через индексный файл
Это действительно необходимо ? Таким образом, у вас есть работа с PHP без очевидной (?) Причины.
(Обратите внимание, что даже если файлы CSS / JS передаются через PHP, Apache должен иметь возможность сжимать их с помощью mod_deflate
, то же самое верно и для HTML, JSON, … btw)
Еще одно преимущество того, что вы не переходите через PHP для работы с этими файлами, заключается в том, что было бы проще заставить их обслуживать другой сервер, так как ваш сайт будет расти (если он будет расти на самом деле):
ob_start
об этом, ob_start
говорит следующее:
Буферы вывода стекируются, то есть вы можете вызывать ob_start (), пока активен другой объект ob_start (). Просто убедитесь, что вы вызываете ob_end_flush () соответствующее количество раз. Если активны несколько функций обратного вызова, выходной сигнал последовательно фильтруется через каждый из них в порядке вложенности.
Итак, я думаю, что ответ на ваш вопрос «да» ðŸ™‚