여기서는 php의 헤더 기능을 사용하는데, 이 기능을 사용하면 브라우저에 파일 헤더가 전달됩니다. 이전의 모든 출력(공백, 캐리지 리턴 및 줄 바꿈과 같은 빈 출력 포함)에는 오류 메시지가 표시됩니다. 첫 번째 줄에서 ob_start()를 제거하고 이 프로그램을 실행하면 다음과 같은 오류 메시지가 표시됩니다: "Header had all Ready send by"! ob_start를 추가하면 오류가 발생하지 않습니다. 그 이유는 버퍼가 열릴 때 echo 뒤의 문자가 브라우저에 출력되지 않지만 플러시 또는 ob_end_flush를 사용할 때까지 서버에 유지되기 때문입니다. 그러면 파일 헤더 출력 오류가 발생하지 않습니다! 오늘의 주제를 시작해 보겠습니다. ob_start()를 사용하여 브라우저의 캐시를 제어하세요. 1. 관련 기능 소개: 1. 플러시: 버퍼 및 출력의 내용을 새로 고칩니다. 함수 형식: 플러시() 설명: 이 기능은 자주 사용되며 매우 효율적입니다. 2. ob_start: 출력 버퍼를 엽니다. 함수 형식: void ob_start(void) 참고: 버퍼가 활성화되면 PHP 프로그램의 파일이 아닌 모든 헤더 정보는 전송되지 않고 내부 버퍼에 저장됩니다. 버퍼의 내용을 출력하려면 ob_end_flush() 또는 플러시()를 사용하여 버퍼의 내용을 출력할 수 있습니다. 3. ob_get_contents: 내부 버퍼의 내용을 반환합니다. 사용법: 문자열 ob_get_contents(void) 설명: 이 함수는 현재 버퍼의 내용을 반환합니다. 출력 버퍼가 활성화되지 않은 경우 FALSE를 반환합니다. 4. ob_get_length: 내부 버퍼의 길이를 반환합니다. 사용법: int ob_get_length(void) 설명: 이 함수는 출력 버퍼가 활성화되지 않은 경우 ob_get_contents와 같이 현재 버퍼의 길이를 반환합니다. 그런 다음 FALSE를 반환합니다. 5. ob_end_flush: 내부 버퍼의 내용을 브라우저로 보내고 출력 버퍼를 닫습니다. 사용법: void ob_end_flush(void) 설명: 이 함수는 출력 버퍼(있는 경우)의 내용을 보냅니다. 6. ob_end_clean: 내부 버퍼의 내용을 삭제하고 내부 버퍼를 닫습니다. 사용법: void ob_end_clean(void) 설명: 이 기능은 내부 버퍼의 내용을 출력하지 않고 삭제합니다! 7. ob_implicit_flush: 절대 새로 고침을 켜거나 끕니다. 사용법: void ob_implicit_flush ([int 플래그]) 참고: Perl을 사용해 본 사람이라면 누구나 $|=x의 의미를 알 것입니다. 이 문자열은 버퍼를 열고 닫을 수 있으며, ob_implicit_flush 함수는 그것과 동일합니다. 기본값은 절대 출력을 켠 후 각. 스크립트 출력 브라우저에 직접 보내기, 플러시()를 호출할 필요 없음 2. 심층적인 이해: 1. 플러시 기능 정보: 브라우저의 캐시를 새로 고치는 데 사용됩니다. 예:
참고: 절대 플러시를 켜기 위해 프로그램 시작 부분에 ob_implicit_flush()를 추가하면 더 이상 플러시()를 사용할 수 없습니다. ) 프로그램에서. 2. ob 시리즈 기능 정보: 예를 들어 서버와 클라이언트의 설정 정보를 사용할 수 있는데, 클라이언트에 따라 이 정보가 다를 수 있습니다. phpinfo() 함수의 출력을 저장하고 싶다면 어떻게 해야 할까요? 버퍼 제어가 없었기 전에는 전혀 해결책이 없었다고 할 수 있지만, 버퍼 제어를 사용하면 쉽게 해결할 수 있습니다. 예:
위 방법을 사용하면 다른 사용자의 phpinfo 정보를 저장할 수 있습니다. 이전에는 불가능했을 수도 있습니다! 사실 위의 내용은 일부 "프로세스"를 "기능"으로 변환하는 방법입니다! PHP의 기본 구문 강조 기능은 직접 출력되며 결과를 호출할 때마다 표시하면 CPU가 낭비됩니다. ob_start()의 주요 내용입니다. . ob_start를 사용하여 브라우저의 캐시를 엽니다. 이렇게 하면 플러시(), ob_end_flush()를 호출하기 전에(또는 프로그램이 실행되기 전에) 캐시의 내용이 출력되지 않습니다. 이제 장점을 알아야 합니다. 출력 콘텐츠 후에 헤더, setcookie 및 세션을 사용할 수 있습니다. 이는 ob_start의 뛰어난 기능이며 캐시가 작성된 후에도 ob_start의 매개변수를 사용할 수 있습니다. 그런 다음 ob_start("ob_gzhandler")와 같은 명령을 자동으로 실행합니다. 가장 일반적인 접근 방식은 ob_get_contents()를 사용하여 캐시 내용을 가져온 다음 처리하는 것입니다. 처리가 완료되면 다양한 방법으로 출력, 플러시(), ob_end_flush() 및 프로그램 실행 완료 후 자동 출력을 수행할 수 있습니다. 물론, ob_get_contents()를 사용한다면 출력 방식을 직접 제어해야 합니다. Ob시리즈 기능 사용법을 알아볼까요? 1. 정적 템플릿 기술 소개: 소위 정적 템플릿 기술은 특정 방법을 사용하여 사용자가 클라이언트 측에서 PHP가 생성한 HTML 페이지를 가져올 수 있도록 합니다. 이 HTML 페이지가 더 이상 업데이트되지 않으면 다른 사용자가 이 페이지를 다시 탐색할 때 프로그램은 sina, 163, sohu와 같이 많은 양의 정보가 있는 일부 웹 사이트의 경우 더 이상 PHP 및 관련 데이터베이스를 호출하지 않습니다. 이와 같은 기술의 이점은 엄청납니다. 정적 출력을 얻는 방법에는 두 가지가 있습니다. y10k로 수정된 phplib의 template.inc.php라는 클래스를 통해 구현되었습니다. ob 시리즈 기능을 사용해 구현해보세요. 첫 번째 방법에 대해서는 본 글에서 다룰 내용이 아니므로 자세한 내용은 다루지 않겠다. 이제 두 번째 방법의 구체적인 구현을 살펴보겠습니다. 예:
PHP 페이지의 전체 출력:
2. 캡쳐 출력 위의 예는 작성하기 전에 $content에 대해 작업을 수행할 수도 있는 가장 간단한 경우입니다. 일부 키워드를 캡처한 다음 PHP 구문 강조 표시와 같이 다시 처리할 수 있습니다. 예시 5:
위의 예는 그다지 유용하지는 않지만 $code 자체가 변수를 포함하는 출력 페이지인 것이 일반적입니다. 이 예에서는 eval을 사용하여 $code의 변수를 대체한 다음 출력 결과를 캡처한 다음 한번에 처리하세요... 예 6, 전송 속도 높이기
zlib 기능을 사용하면 전송되는 내용이 압축됩니다. 테스트 결과 10k 이상의 페이지에서 효과가 생성되는 것으로 나타났으며, 페이지가 클수록 효과가 더욱 뚜렷해졌습니다. 이것은 PHP의 ob_start 및 기타 관련 캐시 기능의 사용법에 대한 소개입니다. 모든 사람에게 도움이 되기를 바랍니다. |