PHP에서 ob_start ()의 사용법은 무엇입니까?
PHPPHP에서 ob_start ()의 사용법은 무엇입니까?
출력 버퍼링에 ob_start ()가 사용되어 헤더가 버퍼링되어 브라우저로 전송되지 않습니까? 나는 여기에 감각이 있니? 그렇지 않다면 우리는 왜 ob_start ()를 사용해야합니까?
해결법
-
==============================
1.ob_start ()는 "일반적으로 출력되는 모든 것을 기억하기 시작하지만 아직 아무 것도하지 않습니다."라고 생각하십시오.
ob_start ()는 "일반적으로 출력되는 모든 것을 기억하기 시작하지만 아직 아무 것도하지 않습니다."라고 생각하십시오.
예 :
ob_start(); echo("Hello there!"); //would normally get printed to the screen/output to browser $output = ob_get_contents(); ob_end_clean();
ob_start (), ob_end_clean () 또는 ob_flush ()를 사용하여 버퍼를 "켰다"면 기본적으로 버퍼에 저장된 내용을 제공하는 ob_get_contents ()와 같은 두 가지 다른 함수가 있습니다. 저장을 중단하고 저장된 모든 것을 버리거나 저장을 중지하고 동시에 모두 출력합니다.
-
==============================
2.PHP를 많은 HTML로 분해 할 수는 있지만 렌더링하지는 않습니다. 그것은 색상 코딩을 불가능하게하는 문자열로 저장하지 못하게합니다.
PHP를 많은 HTML로 분해 할 수는 있지만 렌더링하지는 않습니다. 그것은 색상 코딩을 불가능하게하는 문자열로 저장하지 못하게합니다.
<?php ob_start(); ?> <div> <span>text</span> <a href="#">link</a> </div> <?php $content = ob_get_clean(); ?>
대신에:
<?php $content = '<div> <span>text</span> <a href="#">link</a> </div>'; ?>
-
==============================
3.여기에서 허용되는 대답은 ob_start ()가 수행하는 작업 (사용 된 이유가 아닌) (질문 된 질문)을 설명합니다.
여기에서 허용되는 대답은 ob_start ()가 수행하는 작업 (사용 된 이유가 아닌) (질문 된 질문)을 설명합니다.
ob_start ()는 출력이 기록되는 버퍼를 생성합니다.
그러나 PHP 내에서 여러 버퍼를 쌓는 것이 가능하다는 언급은 없습니다. ob_get_level ()을 참조하십시오.
이유에 관해서 ....
-
==============================
4.당신은 거꾸로 가지고 있습니다. ob_start는 헤더를 버퍼링하지 않으며, 내용을 버퍼링합니다. ob_start를 사용하면 컨텐트를 표시 할 준비가 될 때까지 컨텐트를 서버 측 버퍼에 보관할 수 있습니다.
당신은 거꾸로 가지고 있습니다. ob_start는 헤더를 버퍼링하지 않으며, 내용을 버퍼링합니다. ob_start를 사용하면 컨텐트를 표시 할 준비가 될 때까지 컨텐트를 서버 측 버퍼에 보관할 수 있습니다.
이것은 일반적으로 페이지가 헤더를 보낼 수 있도록하기 위해 사용됩니다 (즉, 페이지 렌더링의 절반을 리디렉션하기로 결정한 경우).
-
==============================
5.나는 선호한다:
나는 선호한다:
ob_start(); echo("Hello there!"); $output = ob_get_clean(); //Get current buffer contents and delete current output buffer
-
==============================
6.이것은 JD Isaaks의 대답을 더 명확히하는 것입니다 ...
이것은 JD Isaaks의 대답을 더 명확히하는 것입니다 ...
자주 접하는 문제는 PHP를 사용하여 여러 다른 PHP 소스에서 HTML을 출력하고 있으며, 그 이유는 무엇이든간에 다양한 방법으로 출력하는 경우가 종종 있습니다.
때로는 브라우저에 직접 출력하려는 리터럴 html 콘텐츠가 있습니다. 출력이 동적으로 생성되는 다른 경우 (서버 측).
동적 내용은 항상 문자열이 될 것입니다 (?). 이제이 문자열 화 된 동적 HTML을 임의의 리터럴, 직접 표시 html ...과 결합하여 하나의 의미있는 html 노드 구조로 만들어야합니다.
이것은 대개 개발자가 모든 다이렉트 - 투 - 디스플레이 컨텐츠를 문자열 (JD Isaak이 논한 바와 같이)로 감싸도록하여 동적 HTML과 함께 적절하게 전달 / 삽입 될 수 있도록합니다. 감싸 주길 바래.
그러나 ob _ ## 메소드를 사용하면 문자열 둘러싸기를 피할 수 있습니다. 리터럴 내용은 대신 버퍼에 출력됩니다. 그런 다음 간단한 단계로 버퍼의 전체 내용 (모든 리터럴 HTML)을 동적 HTML 문자열에 연결합니다.
(필자의 예제는 문자 그대로의 html이 버퍼에 출력되는 것을 보여 주며, html-string에 추가된다. 또한 JD Isaaks 예제에서 string-wrapping-of-html을 본다.)
<?php // parent.php //--------------------------------- $lvs_html = "" ; $lvs_html .= "<div>html</div>" ; $lvs_html .= gf_component_assembler__without_ob( ) ; $lvs_html .= "<div>more html</div>" ; $lvs_html .= "----<br/>" ; $lvs_html .= "<div>html</div>" ; $lvs_html .= gf_component_assembler__with_ob( ) ; $lvs_html .= "<div>more html</div>" ; echo $lvs_html ; // 02 - component contents // html // 01 - component header // 03 - component footer // more html // ---- // html // 01 - component header // 02 - component contents // 03 - component footer // more html //--------------------------------- function gf_component_assembler__without_ob( ) { $lvs_html = "<div>01 - component header</div>" ; // <table ><tr>" ; include( "component_contents.php" ) ; $lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ; return $lvs_html ; } ; //--------------------------------- function gf_component_assembler__with_ob( ) { $lvs_html = "<div>01 - component header</div>" ; // <table ><tr>" ; ob_start(); include( "component_contents.php" ) ; $lvs_html .= ob_get_clean(); $lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ; return $lvs_html ; } ; //--------------------------------- ?>
<!-- component_contents.php --> <div> 02 - component contents </div>
-
==============================
7.이 함수는 헤더에만 사용되는 것이 아닙니다. 이것으로 많은 재미있는 것을 할 수 있습니다. 예 : 페이지를 여러 섹션으로 나누어 다음과 같이 사용할 수 있습니다.
이 함수는 헤더에만 사용되는 것이 아닙니다. 이것으로 많은 재미있는 것을 할 수 있습니다. 예 : 페이지를 여러 섹션으로 나누어 다음과 같이 사용할 수 있습니다.
$someTemplate->selectSection('header'); echo 'This is the header.'; $someTemplate->selectSection('content'); echo 'This is some content.';
여기에서 생성 된 출력을 캡처하여 레이아웃의 완전히 다른 두 위치에 추가 할 수 있습니다.
-
==============================
8.아니요, 틀렸지 만 방향이 맞습니다.)
아니요, 틀렸지 만 방향이 맞습니다.)
Output-Buffering은 스크립트 출력을 버퍼링합니다. 그것은 에코 나 프린트 후에도 끝이 없습니다. 헤더가있는 것은 이미 전송되지 않은 경우에만 전송할 수 있다는 것입니다. 그러나 HTTP는 헤더가 전송의 첫 번째라고 말합니다. 따라서 요청을 통해 처음으로 무언가를 출력하면 헤더가 전송되고 다른 헤더는 설정할 수 없습니다.
-
==============================
9.다음과 같은 것들은 기존 답변에 언급되어 있지 않습니다 : 버퍼 크기 구성 HTTP 헤더 및 중첩.
다음과 같은 것들은 기존 답변에 언급되어 있지 않습니다 : 버퍼 크기 구성 HTTP 헤더 및 중첩.
ob_start의 버퍼 크기 구성 :
ob_start(null, 4096); // Once the buffer size exceeds 4096 bytes, PHP automatically executes flush, ie. the buffer is emptied and sent out.
위의 코드는 PHP가 4KB와 같은 더 큰 데이터 청크를 전송할 때 서버 성능을 향상시킵니다 (ob_start 호출없이 php는 각 에코를 브라우저에 보냅니다).
청크 크기 (즉, 간단한 ob_start ())없이 버퍼링을 시작하면 스크립트가 끝날 때 페이지가 한 번 전송됩니다.
출력 버퍼링은 HTTP 헤더에 영향을 미치지 않으며, 다른 방식으로 처리됩니다. 그러나 버퍼링으로 인해 출력이 보내진 후에도 여전히 버퍼에 있기 때문에 헤더를 보낼 수 있습니다.
ob_start(); // turns on output buffering $foo->bar(); // all output goes only to buffer ob_clean(); // delete the contents of the buffer, but remains buffering active $foo->render(); // output goes to buffer ob_flush(); // send buffer output $none = ob_get_contents(); // buffer content is now an empty string ob_end_clean(); // turn off output buffering
여기에 잘 설명되어 있습니다 : https://phpfashion.com/everything-about-output-buffering-in-php
from https://stackoverflow.com/questions/4401949/whats-the-use-of-ob-start-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
어떻게 PHP에서 file_get_contents () 함수의 경고를 처리 할 수 있습니까? (0) | 2018.09.20 |
---|---|
REST API - PUT DELETE POST GET을 사용하는 이유는 무엇입니까? (0) | 2018.09.20 |
명령 줄에서 사용하는 php.ini 파일을 찾는 방법은 무엇입니까? (0) | 2018.09.20 |
PHP 경로를 찾지 못하는 오류 포함 (0) | 2018.09.20 |
bbcode를 파싱하는 가장 좋은 방법 (0) | 2018.09.20 |