목차
php中flush和ob_flush的区别
php
flush
ob_flush
区别
杂谈
php教程 php手册 php中flush和ob

php中flush和ob

Jun 06, 2016 pm 08:01 PM
php 차이점

php中flush和ob_flush的区别 (2011-11-11 15:31:17) ▼ php flush ob_flush 区别 杂谈 分类: PHP buffer ---- flush() buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的设备之间传

php中flush和ob_flush的区别

(2011-11-11 15:31:17)

php中flush和ob

php

flush

ob_flush

区别

杂谈

分类:PHP
buffer ---- flush()

 

buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每输入一个字符,操作系统并不会立即把这个字符直接写入到磁盘,而是先写入到buffer,当写满了一个buffer的时候,才会把buffer中的数据写入磁盘,当然当调用内核函数flush()的时候,强制要求把buffer中的脏数据写回磁盘。

同样的道理,当执行echo,print的时 候,输出并没有立即通过tcp传给客户端浏览器显示, 而是将数据写入phpbuffer。php output_buffering机制,意味在tcpbuffer之前,建立了一新的队列,数据必须经过该队列。当一个php buffer写满的时候,脚本进程会将phpbuffer中的输出数据交给系统内核交由tcp传给浏览器显示。所以,数据会依次写到这几个地方echo/pring-> php buffer -> tcp buffer-> browser

 

php output_buffering --- ob_flush()

默 认情况下,phpbuffer是开启的,而且该buffer默认值是4096,即1kb。你可以通过在php.ini配置文件中找到output_buffering配置.当echo,print等输出用户数据的时候,输出数据都会写入到phpoutput_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显示。你也可以通过ob_start()手动激活phpoutput_buffering机制,使得即便输出超过了1kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将phpbuffer空间设置到了足够大 。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。

 

 

这两个函数的使用怕是很多人最迷惑的一个问题,手册上对两个函数的解释也语焉不详,没有明确的指出它们的区别,似乎二者的功能都是刷新输出缓存。但在我们文章一开始的代码中如果讲fush()替换成ob_flush(),程序就再不能正确执行了。显然,它们是有区别的,否则也手册中直接说明其中一个是另外一个函数的别名即可了,没必要分别说明。那么它们的区别到底是什么呢?

在没有开启缓存时,脚本输出的内容都在服务器端处于等待输出的状态 ,flush()可以将等待输出的内容立即发送到客户端。


开 启缓存后,脚本输出的内容存入了输出缓存中 ,这时没有处于等待输出状态的内容,你直接使用flush()不会向客户端发出任何内容。而ob_flush()的作用就是将本来存在输出缓存中的内容取出来,设置为等待输出状态,但不会直接发送到客户端 ,这时你就需要先使用ob_flush()再使用flush(),客户端才能立即获得脚本的输出。

一. flush和ob_flush的正确顺序,正确应是,先ob_flush再flush,如下: 
ob_flush();
flush();
如果Web服务器的操作系统是windows系统,那顺序颠倒或者不使用ob_flush()也不会出现问题。[有待求证 ]但是在Linux系统上就无法刷新输出缓冲。

output buffering函数

1.bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]])
激活output_buffering机制。一旦激活,脚本输出不再直接出给浏览器,而是先暂时写入php buffer内存区域。

php默认开启output_buffering机制,只不过,通过调用ob_start()函数据output_buffering值扩展到足够大 。也可以指定$chunk_size来指定output_buffering的值。$chunk_size默认值是0,表示直到脚本运行结束,phpbuffer中的数据才会发送到浏览器。如果你设置了$chunk_size的大小 ,则表示只要buffer中数据长度达到了该值,就会将buffer中的数据发送给浏览器。

当然,你可以通过指定$ouput_callback,来处理buffer中的数据。比如函数ob_gzhandler,将buffer中的数据压缩后再传送给浏览器。

第三个参数:是否擦除缓存,可选,默认是true,如果设置为false,则在脚本执行结束前,缓存都不会被清除。

2.ob_get_contents
获取一份phpbuffer中的数据拷贝。值得注意的是,你应该在ob_end_clean()函数调用前调用该函数,否则ob_get_contents()返回一个空字符中。

 

可以使用ob_get_contents()以字符串形式获取服务端缓存的数据,

使用ob_end_flush()则会输出被缓存起来的数据,并关闭缓存。
而使用ob_end_clean()则会静默的清除服务端缓存的数据,而不会有任何数据或其他行为。


服务端的缓存是堆叠起来的,也就是说你在开启了ob_start()后,关闭之前,在其内部还 可以开启另外一个缓存ob_start()。

不过你也要务必保证关闭缓存的操作和开启缓存的操作数量一样多。 
ob_start()可以指定一个回调函数来处理缓存数据,如果一个ob_start()内部嵌套了另一个ob_start(),我们假定,外层的ob_start(),编号是A,内层的ob_start()编号是B,它们各自制定了一个回调函数分别是functionA和functionB,那么在缓存B中的数据输出时,它会先辈funcitonB回调函数处理,再交给外层的functionA回调函数处理,之后才能输出到客户端。

另外,手册说,对于某些web服务器,比如apache,在使用回调函数有可能会改变程序当前的工作目录,解决方法是在回调函数中自行手动把工作目录修改回来,用chdir函数,这点似乎不常遇到,遇到的时候记得去查手册吧。

 

3.ob_end_flush与ob_end_clean
这 二个函数有点相似,都会关闭ouptu_buffering机制。但不同的是,ob_end_flush只是把phpbuffer中的数据冲(flush/send)到客户端浏览器,而ob_clean_clean将phpbufeer中的数据清空(erase),但不发送给客户端浏览器。

ob_end_flush调用之前 ,phpbuffer中的数据依然存在,ob_get_contents()依然可以获取php buffer中的数据拷贝。

而ob_end_flush()调用之后 ob_get_contents()取到的是空字符串,同时浏览器也接收不到输出,即没有任何输出。

 

可以使用ob_get_contents()以字符串形式获取服务端缓存的数据,使用ob_end_flush()则会输出被缓存起来的数据,并关闭缓存。
而使用ob_end_clean()则会静默的清除服务端缓存的数据,而不会有任何数据或其他行为。
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

R1과 V3 버전의 차이점은 무엇입니까? R1과 V3 버전의 차이점은 무엇입니까? Feb 19, 2025 pm 03:24 PM

DeepSeek : R1과 V3 버전의 심층 비교는 최고의 AI 어시스턴트를 선택하는 데 도움이됩니다! DeepSeek에는 이미 수천만 명의 사용자가 있으며 AI 대화 기능이 호평을 받았습니다. 그러나 R1 및 V3 버전에 직면 할 때 혼란 스럽습니까? 이 기사에서는 가장 적합한 버전을 선택하는 데 도움이되는 두 가지의 차이점을 설명합니다. DeepSeekr1과 V3 버전의 핵심 차이 : 기능 V3 버전의 설계 목표는 복잡한 문제 추론, 딥 로직 분석, 다기능 대형 언어 모델, 확장 성 및 효율성 아키텍처 및 매개 변수 강화 학습 최적화 아키텍처, 매개 변수 척도 1.5에 중점을 둡니다. 10 억 ~ 700 억 MOE 하이브리드 전문가 아키텍처, 총 매개 변수는 671 억에 이르며 각 토큰은 370 억으로 활성화됩니다.

깊은 사용을위한 FAQ 요약 깊은 사용을위한 FAQ 요약 Feb 19, 2025 pm 03:45 PM

Deepseekai 도구 가이드 및 FAQ Deepseek은 강력한 AI 지능형 도구입니다. FAQ : 다른 액세스 방법의 차이 : 웹 버전, 앱 버전 및 API 통화간에 기능에는 차이가 없으며 앱은 웹 버전의 래퍼 일뿐입니다. 로컬 배치는 증류 모델을 사용하는데,이 모델은 DeepSeek-R1의 정식 버전보다 약간 열등하지만 32 비트 모델은 이론적으로 90% 정식 버전 기능을 갖습니다. 선술집이란 무엇입니까? Sillytavern은 API 또는 Ollama를 통해 AI 모델을 호출 해야하는 프론트 엔드 인터페이스입니다. 중단 한도는 무엇입니까?

비트 코인에는 비트 코인이 주식이 있습니까? 비트 코인에는 비트 코인이 주식이 있습니까? Mar 03, 2025 pm 06:42 PM

cryptocurrency 시장은 급성장하고 있으며, 리더로서 Bitcoin은 많은 투자자들의 관심을 끌었습니다. 많은 사람들이 궁금합니다. 비트 코인은 주식이 있습니까? 대답은 아니오입니다. 비트 코인 자체는 주식이 아니지만 투자자는 다양한 채널을 통해 비트 코인 관련 자산에 간접적으로 투자 할 수 있으며,이 기사에서 자세히 설명 할 것입니다. 비트 코인 투자에 대한 대안 : Bitcoin에 직접 투자하는 대신, 투자자는 Bitcoin Market에 참여할 수 있습니다. Bitcoin ETF : 이것은 자산 포트폴리오에 Bitcoin 또는 Bitcoin 선물 계약이 포함 된 주식 거래 시장에서 거래되는 펀드입니다. 이것은 비트 코인을 직접 보유하지 않고도 주식 투자에 익숙한 투자자에게 비교적 편리한 옵션입니다. 비트 코인 채굴 회사 주식 :이 회사의 비즈니스는 비트 코인 채굴 및 보유 비트 코인입니다.

문자열로 모음을 계산하는 PHP 프로그램 문자열로 모음을 계산하는 PHP 프로그램 Feb 07, 2025 pm 12:12 PM

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

프리 마켓과 애프터 마켓 거래의 차이점은 무엇입니까? 프리 마켓과 애프터 마켓 거래의 차이점에 대한 자세한 설명 프리 마켓과 애프터 마켓 거래의 차이점은 무엇입니까? 프리 마켓과 애프터 마켓 거래의 차이점에 대한 자세한 설명 Mar 03, 2025 pm 11:54 PM

전통적인 금융 시장에서, 프리 마켓 및 마켓 거래는 정기 거래 기간 이외의 거래 활동을 말합니다. cryptocurrency 시장은 24 시간 내내 거래되고 있지만 Bitget과 같은 거래 플랫폼은 유사한 기능, 특히 주식과 암호 화폐를 동시에 거래하는 일부 포괄적 인 플랫폼을 제공합니다. 이 기사는 프리 마켓 및 애프터 마켓 거래의 차이를 명확히하고 통화 가격에 미치는 영향을 탐구합니다. 프리 마켓과 애프터 마켓 거래의 4 가지 주요 차이점 : 프리 마켓과 마켓 트레이딩과 정기 거래 기간의 주요 차이점은 거래 시간, 유동성, 가격 변동 및 거래량 : 거래 시간 : 공식 거래가 시작되기 전에 시판 전 거래가 수행되기 전에 발생합니다. 유동성 : 시간 전 및 시간외 거래의 유동성은 낮으며, 거래자는 거의 없으며, 입찰 및 제안 가격 차이는 규칙적인 거래 기간 동안 높습니다.

Bittensor가 AI 트랙에서 'Bitcoin'이라고 말하는 이유는 무엇입니까? Bittensor가 AI 트랙에서 'Bitcoin'이라고 말하는 이유는 무엇입니까? Mar 04, 2025 pm 04:06 PM

원본 : Bittensor = Aibitcoin : S4mmyeth, 분산 AI 연구 원본 번역 :이 기사에서는 Bittensor, 분산 된 AI 플랫폼에 대해 논의하고, 중앙 집중식 AI 회사의 독점을 홍보하고 개방형 및 사형에 Ecosystem을 홍보하기를 희망합니다. Bittensor는 다양한 AI 솔루션의 출현을 허용하는 서브넷 모델을 채택하고 TAO 토큰을 통해 혁신을 고무시킵니다. AI 시장은 성숙하지만 Bittensor는 경쟁 위험에 직면하며 다른 오픈 소스의 적용을받을 수 있습니다.

한국 비트 코인과 국내 비트 코인의 차이가 있습니까? 한국 비트 코인과 국내 비트 코인의 차이가 있습니까? Mar 05, 2025 pm 06:51 PM

Bitcoin Investment Boom은 세계 최초의 분산 디지털 자산으로 인해 계속 가열되어 분산 및 글로벌 유동성에 많은 관심을 끌었습니다. 중국은 한때 비트 코인의 가장 큰 시장 이었지만 정책 영향으로 인해 거래 제한이 발생했습니다. 오늘날 한국은 세계의 주요 비트 코인 시장 중 하나가되어 투자자들이 IT와 국내 비트 코인의 차이점에 의문을 제기했습니다. 이 기사는 양국의 비트 코인 시장의 차이점에 대한 심층 분석을 수행 할 것입니다. 한국과 중국 비트 코인 시장의 차이점은 한국과 중국의 비트 코인 시장의 주요 차이점은 가격, 시장 공급 및 환율, 규제 감독, 시장 유동성 및 거래 플랫폼에 반영됩니다. 예를 들어, 2024 년 10 월 말에 한국의 비트 코인 가격은 한 번이었습니다.

See all articles