Добрый вечер! Как с помощью буферизации сделать такое: Код (Text): Буферизация вкл.; печать чего-либо (например echo "aaaaa"); сохранение того, что было напечатано в переменную $a и опустошение буфера; печать чего-либо (например echo "bbbbb"); сохранение того, что было напечатано в переменную $b и опустошение буфера; печать чего-либо (например echo "ccccc"); сохранение того, что было напечатано в переменную $c и опустошение буфера; ... буферизация выкл.; В итоге должно получиться: Код (Text): $a содержит "aaaaa" $b содержит "bbbbb" $c содержит "ccccc" В документации куча обов, но при этом ни одна такое не делает... (кроме вкл и выкл буфера)
глазки протереть наверное надо перед тем как в мануал залезать всё есть и более того - названия функций сами за себя говорят.
Если, вы такой умный, что ж пример-то не написали? Форум зачем сделали? И хватит писать пустые не содержащие никакой информации сообщения.
!Dron давай я за тебя погуглю: буферизация вывода php А в третьей ссылки даже есть примеры для тебя https://php.net/manual/ru/function.ob-start.php#refsect1-fu ... t-examples слабо один раз прочитать всю документацию, чтобы знать о возможностях php
!Dron, я вижу что ты дерзкий. но ты лучше покажи что ты умный. Добавлено спустя 4 минуты 43 секунды: перед вы не нужно запятой. форум сделали для общения. а мануал сделали для получения информации. ты прекрасно демонстрируешь уровень своего развития - тебе проще спросить на форуме чтоб тебе дали 4 имени функций чем пойти почитать мануал. аутист.... хватит на форумах просить перепечатать мануал. иди читай первоисточник. не можешь прочитать? не понимаешь материал? не занимайся тогда программированием. вообще.
Это можно было написать во втором посте. И ВСЕ! Не стоит, друг мой, быть столь гордым и высокомерным. Тебя спросили о помощи тихо и нормально. Ты же в ответ нагрубил, хотя мог просто сделать цитату и также красным шрифтом вставить названия функций. Я тебя спросил: умный значит? Так напиши и докажи, что умный. А по поводу бесполезности твоего второго поста ты и сам знаешь - он никакой смысловой нагрузки не несет и никакой информации в нем нет. Ты лучше ешь, но людей не ешь (с) denis01, и к тебе друг тоже относится. Самое забавное, что в реальной жизни вы так не ведете себя, потому что там могут запросто отвесить леща. А здесь можно похамить, потому что защищен километрами и лица твоего никто не видит. Беда...
это я тебе нагрубил? разуй глаза - там в сообщении есть смайлик сообщающий о дружелюбном настрое. я своим сообщением хотел чтоб ты сам не боялся почитать мануал ведь в нем все невероятно просто. ты же своими нападками лишь продемонстрировал что этот слишком простой уровень слишком сложен для тебя. и тебе важнее показать как ты умеешь огрызаться на людей которые тебе пытаются помочь. даже не извинился. ох.
!Dron я всегда стебу людей в реале и все позитивно к этому относятся, мы же позитивно помогаем и советы серьёзные/правильные даём, а ты сам решаешь как к этому относиться
Начал изучать буферизацию и вообще плохо её понимаю. Сначала всё попадает в буфер, обрабатывается и только потом выводится? PHP: <?php ob_start(); echo 'Hello<br>'; echo 'Hello<br>'; echo 'Hello<br>'; echo 'Hello<br>'; echo 'Hello<br>'; echo 'Hello<br>'; echo 'Hello<br>'; echo 'Hello<br>'; $content = ob_get_contents(); ob_clean(); $content = strtr($content, 'o', 'O'); echo $content;
Гляди, буферизация это просто. Когда ты делаешь очередное echo, то, по идее, PHP сразу выплевывает данные оттуда клиенту. Если же перед этим был открыт буфер, данные кладутся туда. Как в коробочку. Потом ты можешь их оттуда забрать, а сам буфер закрыть. Или не закрывать, как хочешь. А можешь открыть несколько буферов, и тогда они будут вложенные. Это как бы промежуточный карман между тобой и клиентом, в который ты можешь залезть, если надо. Это действительно очень простой механизм, не надо пугаться слова "буферизация", демонизировать его и усложнять в своем восприятии. В случае, который ты привел да, все echo отдают контент не клиенту, а кладут в буфер. После чего мы оттуда это достаем как обычный текст, делаем что-то, а потом решаем, куда девать дальше. Например - уже реально клиенту отдать.
Буферизация крайне удобна, например, когда тебе надо сгенерить большой HTML внутри функции, которая должна его вернуть. Мне вот влом, в таких случаях, возиться со строками пхпшными. Мне проще закрыть пхп-тег, переключив выполнение в html-режим. А потом открыть пхп-тег в конце. Если перед этим был открыт буфер, то все данные в html-режиме упадут туда. После чего я могу сделать return ob_get_clean(). Красиво, изящно, IDE-френдли. Ну и самый главный плюс использования буферизации - буферы не собирают заголовки. Только контент. По этому, если в начале кода у тебя стоит одинокий ob_start(), проблема с ошибкой "headers already sent" у тебя будет решена раз и навсегда. Вообще. Для такого случая в конфиге PHP есть даже параметр, отвечающий за автоматическое включение буферизации. Но есть и теневая сторона вопроса. Если ты с помощью PHP отдаешь какие-то файлы, или поток вещаешь, то буферизацию нужно обязательно выключать. Потому что в таком случае ты будешь вещать не клиенту, а в буфер. Если данных немного, то, по завершению работы, сервер все равно их отправит клиенту и проблема будет незаметна. А вот если вещается что-то крупное, у тебя может оперативная память кончиться раньше
Архитектура битрикса построена на буферизации, кстати. Не говорю что это хороший тон, но поставленные проблемы решает. Типа отложенного выполнения.
@Fell-x27 буферы не собирают заголовки Тогда почему, если сделать так PHP: <?php ob_start(); { echo "hello world"; session_start(); $content = ob_get_contents(); header('Location: /'); } echo "<h1>".$content."</h1>"; Перенаправление работает?
А почему не должно? Контент пишется только в буфер. Даже если закрыть буфер перед вторым echo, все равно будет норм. После Location выводить контент допустимо, перед нет.
Почему повторяется слово hello? Что нужно добавить, что бы нормально вывело hello world? PHP: <?php ob_start(); { echo "hello"; $a = ob_get_contents(); echo "world"; $b = ob_get_contents(); } ob_end_clean(); echo $a .' '. $b;
Тебе уже выше объяснили. Пока буфер жив, это все равно что временная переменная. Код (Text): $tmp='hello'; $a=$tmp; $tmp.='world'; $b=$tmp; ...
Найдите ошибку в логике. Тезы: 1. denis01 всегда стебет людей в реале и все позитивно к этому относятся. 2. denis01 программист. 3. 85% лексикона программистов - функции и регулярки. 4. 98% людей не понимают сленга и манеры общения программистов, 97.9% эти самые сленг и манера дико раздражают, пример чуть выше. Вывод: @denis01 в реале весит от 120 кг, рост 190, и его улыбка вызывает у людей позитивные ностальгические воспоминания об обаянии молодого Шварценеггера. P.S. На всякий случай дружелюбный смайлик P.P.S
Так правильно? PHP: ob_start(); { echo "hello"; $a = ob_get_contents(); ob_clean(); echo "world"; $b = ob_get_contents(); } ob_end_clean(); echo $a .' '. $b;
Помогите пожалуйста сделать простой шаблонизатор, на основе ob_start Есть такая заготовка PHP: $header = template('header', ['title' => 'Hello World!']); $content = template('content', ['content' => "Lorem ipsum...", 'meta' => 'Author info']); $footer = template('footer', ['copy' => "Copyright ". date('Y')]); // ...skipped logic echo $header, $content, $footer; /** * @param string $template * @param array $vars * @return string */ function template($template, $vars) { // place your code here // ... } Нужно что бы работало так PHP: !-- header.phtml --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title><?=$title?></title> </head> <body> <!-- content.phtml --> <div class="container"> <p><?=$content?></p> <p><?=$meta?></p> </div> <!-- footer.phtml --> <footer> <?=$copy?> </footer> </body> </html> Вообще не понимаю, как это сделать или покидайте ссылки, что бы я изучил нужные статьи.
PHP: function template($template, $vars) { extract($vars); ob_start(); require $template; return ob_get_clean(); }