백엔드 개발 PHP 튜토리얼 PHP中对缓冲区的统制实现代码

PHP中对缓冲区的统制实现代码

Jun 13, 2016 am 11:38 AM
info void

PHP中对缓冲区的控制实现代码

大家在使用PHP的过程中不免要使用到header和setcookie两个函数,这两个函数会发送一段文件头信息给浏览器,但是如果在使用这两个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错,提示信息如下:“Header had all ready send by”!那有什么方法可以在有了输出的情况下面在发送文件头信息呢?在PHP 4.0里面加入了缓冲区控制的几个函数,使用这些函数可以帮我们解决很多问题。

一、 相关函数简介:

1、Flush:输出缓冲区内的内容并且删除缓冲区。

函数格式:flush()

说明:这个函数经常使用,效率很高。

2、ob_start :打开输出缓冲区

函数格式:void ob_start(void)

说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或者使用ob_end_clean()来输出缓冲区的内容。

3 、ob_get_contents :返回内部缓冲区的内容。

使用方法:string 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 flag])

说明:使用过Perl的人都知道?$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出。

二、使用例子:

在一开始,笔者说了用缓冲区控制的函数可以防止文件头发送信息出错,下面就是一个例子:

?

.代码如下:

//PHP提示符
ob_start(); //打开缓冲区
echo "Hello/n"; //输出
header('location:gotourl.php'); //把浏览器重定向到gotourl.php
?>

?

如果去掉ob_start,PHP就会提示在文件的第4行出错(出错信息如前面所示),但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!

下面再给出一个很经典的用途:

比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:

?

.代码如下:


ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
?$info=ob_get_contents(); //得到缓冲区的内容并且赋值给?$info
?$file=fopen('info.txt','w'); //打开文件info.txt
fwrite(?$file,?$info); //写入信息到info.txt
fclose(?$file); //关闭文件info.txt
?>

?


用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!


另:验证码生成的图像,在将图像输出到浏览器里,要清除下缓存区
????????//清除缓存区
??????? ob_clean();
??????? //设置文件头;?
??????? Header("Content-type: image/PNG");

??????? //以PNG格式将图像输出到浏览器或文件;
??????? ImagePNG($distortion_im);

??????? //销毁一图像,释放与image关联的内存;
??????? ImageDestroy($distortion_im);
??????? ImageDestroy($im);

?

来源:http://www.poluoluo.com/jzxy/201309/243650.html

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Java에서 void는 무엇을 의미합니까? Java에서 void는 무엇을 의미합니까? Mar 01, 2023 pm 07:19 PM

Java에서 void는 "비어 있음", 즉 "아무것도 반환하지 않음"을 의미합니다. 메서드가 선언되면 메서드에 반환 값이 없음을 의미합니다. void는 래퍼 클래스 "java.lang.Void"에 해당합니다. Void 클래스는 final로 수정되며 Java 키워드 void를 나타내는 Class 개체에 대한 참조를 저장하는 데 사용되는 인스턴스화할 수 없는 자리 표시자 클래스입니다.

PHP에서 void 유형 반환 값을 사용하는 것의 의미는 무엇입니까? PHP에서 void 유형 반환 값을 사용하는 것의 의미는 무엇입니까? Apr 10, 2024 pm 09:21 PM

PHP에서 void 유형의 반환값은 함수가 어떤 값도 반환하지 않는다는 의미이며, 일반적으로 반환값이 필요하지 않은 레코드 업데이트와 같은 작업에 사용됩니다. void 함수를 선언할 때는 void 키워드를 사용하세요. void 함수를 호출할 때는 결과가 변수에 할당되어서는 안 됩니다. 실제 사례: void 유형 반환 값을 사용하면 정보를 반환하지 않고 데이터베이스 레코드를 업데이트할 수 있습니다.

C 언어에서 void 키워드의 기능 C 언어에서 void 키워드의 기능 Feb 19, 2024 pm 11:33 PM

C에서 void는 특정 유형이 없는 데이터를 의미하는 빈 유형을 나타내는 데 사용되는 특수 키워드입니다. C 언어에서 void는 주로 다음 세 가지 측면에서 사용됩니다. 함수 반환 유형은 void입니다. C 언어에서 함수는 int, float, char 등과 같은 다양한 반환 유형을 가질 수 있습니다. 그러나 함수가 어떤 값도 반환하지 않는 경우 반환 유형을 void로 설정할 수 있습니다. 이는 함수가 실행된 후에 특정 값을 반환하지 않음을 의미합니다. 예: voidhelloWorld()

'javascript:void(O)' 문제를 이해하고 해결하는 방법 'javascript:void(O)' 문제를 이해하고 해결하는 방법 Feb 19, 2024 pm 05:35 PM

javascript:void(0)은 무엇을 의미하나요? 이 문제에 대한 해결책은 무엇입니까? 웹을 탐색할 때 클릭 후 응답하지 않고 브라우저의 주소 표시줄에 "javascript:void(0)"로 표시되는 링크가 있는 경우가 있습니다. 이 질문은 문자 그대로 JavaScript 코드처럼 보이는 오류 메시지가 무엇을 의미하는지 모르기 때문에 일부 웹 방문자에게 혼란을 줄 수 있습니다. 그럼 이걸 함께 풀어보자

C++ 함수는 어떻게 void 유형을 반환합니까? C++ 함수는 어떻게 void 유형을 반환합니까? Apr 20, 2024 pm 01:06 PM

C++의 void 함수는 값을 반환하지 않으며 구문은 voidfunction_name()입니다. 일반적인 용도는 다음과 같습니다. 사용자 나이를 가져와서 콘솔에 인쇄하는 등 사용자 입력을 입력합니다.

javascriptvoid(o)를 해결하는 방법 javascriptvoid(o)를 해결하는 방법 Nov 23, 2023 am 11:02 AM

javascriptvoid(o)에 대한 해결 방법: 1. 구문 오류를 확인합니다. 2. 올바른 실행 환경을 확인합니다. 3. 다른 코드와의 충돌을 확인합니다. 5. 다른 바인딩 방법을 사용합니다. 7. 디버깅 도구를 사용합니다. 8. 종속 라이브러리 또는 플러그인을 업데이트합니다. 9. 문자 인코딩을 확인합니다. 10. 종속성을 줄이기 위해 코드를 리팩터링합니다. javascriptvoid(0) 오류를 해결하려면 코드, 실행 환경 및 관련 종속성을 주의 깊게 검사해야 합니다.

C 언어에서 빈 공간의 역할 C 언어에서 빈 공간의 역할 Apr 03, 2025 pm 04:12 PM

C 언어에서 void는 리턴 값을 나타내지 않는 키워드입니다. 이는 다음과 같은 다양한 시나리오에서 사용됩니다 : 반환 값을 선언하지 않는 함수 : void print_message (); 매개 변수를 선언하지 않는 함수 : void print_message (void); 반환 값을 정의하는 함수 : void print_message () {printf (& amp; quot; hello world \ n & amp; quot;); } 매개 변수를 정의하는 함수 : void print_message (void) {printf (& amp; quot; hell

thinkphp5에서 정보 출력을 끄는 방법 thinkphp5에서 정보 출력을 끄는 방법 Jun 03, 2023 am 11:49 AM

1. info의 기능 info를 닫기 전에 info의 기능을 이해해야 합니다. ThinkPHP5 프레임워크에는 세 가지 주요 정보 출력 형식이 있습니다. 현재 액세스한 URL 및 요청 매개변수를 표시하고, 페이지 하단에 현재 페이지의 실행 시간 및 SQL 문 실행과 같은 디버깅 정보를 표시합니다. 실행 오류가 발생하면 정보를 알려주는 것이 편리합니다. 디버깅이 유용해 보이지만 대부분의 정보 정보는 실제 개발자에게는 별로 도움이 되지 않습니다. 개발에 더 집중할 수 있도록 좀 더 간결한 출력이 필요한 경우가 많습니다. 2. 마감정보는 매우 간단하게 구성하면 됩니다.

See all articles