1. 버퍼 ---- 플러시()
버퍼는 메모리 주소 공간입니다. Linux 시스템의 기본 크기는 일반적으로 하나의 메모리 페이지인 4096(1kb)입니다. 주로 속도가 동기화되지 않은 장치 또는 우선 순위가 다른 장치 간의 데이터 전송 영역을 저장하는 데 사용됩니다. 버퍼를 통해 프로세스는 서로 덜 기다릴 수 있습니다. 다음은 보다 일반적인 예입니다. 파일을 편집하기 위해 텍스트 편집기를 열 때 문자를 입력할 때마다 운영 체제는 해당 문자를 디스크에 직접 쓰지 않고 먼저 버퍼에 씁니다. 버퍼가 가득 차면 버퍼에 있는 데이터가 디스크에 기록됩니다. 물론 커널 함수 플러시()가 호출되면 버퍼에 있는 더티 데이터를 디스크에 다시 쓰는 것이 필수입니다.
마찬가지로 echo와 print가 실행되면 출력이 즉시 클라이언트 브라우저로 전송되어 tcp를 통해 표시되지 않고, 데이터가 php 버퍼에 기록됩니다. php 출력_버퍼링 메커니즘은 tcp 버퍼 이전에 새 대기열이 설정되고 데이터가 대기열을 통과해야 함을 의미합니다. PHP 버퍼가 가득 차면 스크립트 프로세스는 PHP 버퍼의 출력 데이터를 시스템 커널에 전달하고 표시를 위해 TCP를 통해 브라우저에 전달합니다. 따라서 데이터는 echo/pring -> tcp buffer -> browser
2.php output_buffering --- ob_flush()
기본적으로 php buffer입니다. 활성화되어 있으며, 버퍼의 기본값은 4096(1kb)입니다. php.ini 구성 파일에서 output_buffering 구성을 찾을 수 있습니다. echo, print 등으로 사용자 데이터를 출력하면 출력 데이터가 php output_buffering에 기록됩니다. . 보여주다. ob_start()를 통해 PHP 출력_버퍼링 메커니즘을 수동으로 활성화할 수도 있습니다. 그러면 출력이 1kb의 데이터를 초과하더라도 데이터가 실제로 tcp로 전달되지 않고 브라우저로 전달됩니다. 왜냐하면 ob_start()가 PHP 버퍼 공간을 다음과 같이 설정하기 때문입니다. 충분히 큰 크기. 스크립트가 끝나거나 ob_end_flush 함수가 호출될 때까지 데이터는 클라이언트 브라우저로 전송되지 않습니다.
이 두 기능의 사용은 아마도 많은 사람들에게 가장 혼란스러운 문제 일 것입니다. 설명서에 두 기능에 대한 설명도 불분명하고, 두 기능의 차이점도 명확하게 명시되어 있지 않은 것 같습니다. 출력 캐시를 새로 고칩니다. 그러나 기사 시작 부분의 코드에서, 만약 플러시()가 ob_flush()로 대체된다면, 프로그램은 더 이상 올바르게 실행되지 않을 것입니다. 분명히 둘 사이에는 차이가 있지만, 그 중 하나가 다른 기능의 별칭이라고 매뉴얼에 직접 명시하는 것만으로도 충분할 것입니다. 그렇다면 그들 사이의 차이점은 무엇입니까?
출력 대기 중
상태입니다. 플러시()는 출력을 기다리는 콘텐츠를 즉시 클라이언트로 보낼 수 있습니다. 캐시가 켜진 후에는
에 저장됩니다. 이때, 플러시()를 직접 사용하면 어떤 콘텐츠도 전송되지 않습니다. 클라이언트에게. ob_flush()의 기능은 원래 출력 캐시에 저장되어 있던 내용을 꺼내어 출력 대기 상태로 설정하는 것이지만, 클라이언트에 직접 전송되지는 않습니다. 이 경우 먼저 ob_flush()를 사용해야 합니다. 그런 다음 flash() 를 사용하면 클라이언트는 즉시 스크립트의 출력을 얻을 수 있습니다. 3. 플러시 및 ob_flush의 올바른 순서는 다음과 같이 ob_flush를 먼저 사용한 다음 플러시하는 것입니다. ob_end_flush()를 호출한 후 ob_get_contents()는 빈 문자열을 가져오고 브라우저는 출력을 수신할 수 없습니다. 즉, 출력이 없습니다. ob_get_contents()를 사용하면 서버측 캐시 데이터를 문자열 형식으로 얻을 수 있고, ob_end_flush()를 사용하면 캐시된 데이터를 출력하고 캐시를 닫을 수 있습니다.
ob_flush();
flush();
웹 서버의 운영 체제가 Windows 시스템인 경우 순서는 다음과 같습니다. 반대이거나 사용되지 않습니다. ob_flush()도 문제를 일으키지 않습니다. [확인 예정] 단, Linux 시스템에서는 출력 버퍼를 새로 고칠 수 없습니다.
4. 출력 버퍼링 기능
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
은 출력 버퍼링 메커니즘을 활성화합니다. 활성화되면 스크립트 출력은 더 이상 브라우저로 직접 전송되지 않고 일시적으로 PHP 버퍼 메모리 영역에 기록됩니다.
php는 기본적으로 출력 버퍼링 메커니즘을 활성화하지만, ob_start() 함수를 호출하면 데이터 출력 버퍼링 값이 충분히 큰 값으로 확장됩니다. $chunk_size를 지정하여 output_buffering 값을 지정할 수도 있습니다. $chunk_size의 기본값은 0입니다. 이는 PHP 버퍼의 데이터가 스크립트가 끝날 때까지 브라우저로 전송되지 않음을 의미합니다. $chunk_size의 크기를 설정하면 버퍼의 데이터 길이가 이 값에 도달하는 한 버퍼의 데이터가 브라우저로 전송된다는 의미입니다.
물론 $ouput_callback을 지정하면 버퍼에 있는 데이터를 처리할 수 있습니다. 예를 들어 ob_gzhandler 함수는 버퍼의 데이터를 압축한 다음 브라우저로 보냅니다.
세 번째 매개변수: 캐시를 지울지 여부, 선택 사항, 기본값은 true입니다. false로 설정하면 스크립트 실행이 끝나기 전에 캐시가 지워지지 않습니다.
ob_get_contents
PHP 버퍼에 있는 데이터 복사본을 가져옵니다. ob_end_clean() 함수가 호출되기 전에 이 함수를 호출해야 한다는 점은 주목할 가치가 있습니다. 그렇지 않으면 ob_get_contents()가 null 문자를 반환합니다.
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 콜백 함수로 전달됩니다. 그런 다음 클라이언트에 출력될 수 있습니다.
또한 설명서에는 Apache와 같은 일부 웹 서버의 경우 콜백 함수를 사용하면 프로그램의 현재 작업 디렉터리가 변경될 수 있다고 나와 있습니다. 해결 방법은 chdir을 사용하여 콜백 함수에서 작업 디렉터리를 수동으로 다시 수정하는 것입니다. 이 Dots는 자주 접하지 않는 것 같으니, 마주치면 반드시 매뉴얼을 확인하시기 바랍니다.
ob_end_flush 및 ob_end_clean
이 두 기능은 다소 유사하며 둘 다 ouptu_buffering 메커니즘을 끕니다. 그러나 차이점은 ob_end_flush는 PHP 버퍼의 데이터를 클라이언트 브라우저로 플러시(플러시/전송)만 하는 반면, ob_clean_clean은 PHP 버퍼의 데이터를 지우(지우기)만 클라이언트 브라우저로 보내지 않는다는 것입니다.
ob_end_flush가 호출되기 전, PHP 버퍼의 데이터는 여전히 존재하며 ob_get_contents()는 여전히 PHP 버퍼의 데이터 복사본을 얻을 수 있습니다.
ob_end_clean()을 사용하면 데이터나 다른 작업 없이 서버에 캐시된 데이터가 자동으로 지워집니다.
서버의 캐시는 쌓여 있습니다. 즉, ob_start()를 활성화한 후 이를 닫기 전에 서버 내부에서 다른 캐시 ob_start()를 열 수 있다는 의미입니다. 그러나 캐시를 켜는 작업 수만큼 캐시를 끄는 작업도 있는지 확인해야 합니다.
ob_start()는 캐시된 데이터를 처리하는 콜백 함수를 지정할 수 있습니다. 하나의 ob_start()가 다른 ob_start() 내에 중첩된 경우 외부 ob_start()의 번호는 A이고 내부 ob_start()의 번호는 입니다. B. 각각 콜백 함수인 functionA와 functionB가 있습니다. 그런 다음 캐시 B의 데이터가 출력되면 먼저 funcitonB 콜백 함수에 의해 처리된 다음 처리를 위해 외부 functionA 콜백 함수로 전달됩니다. 클라이언트에 출력될 수 있습니다.
또한 설명서에는 Apache와 같은 일부 웹 서버의 경우 콜백 함수를 사용하면 프로그램의 현재 작업 디렉터리가 변경될 수 있다고 나와 있습니다. 해결 방법은 chdir을 사용하여 콜백 함수에서 작업 디렉터리를 수동으로 다시 수정하는 것입니다. 이 Dots는 자주 접하지 않는 것 같으니, 마주치면 반드시 매뉴얼을 확인하시기 바랍니다.
위 내용은 PHP에서 플러시()와 ob_flush() 함수의 사용법 차이에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

PHP에서, 특성은 방법 재사용이 필요하지만 상속에 적합하지 않은 상황에 적합합니다. 1) 특성은 클래스에서 다중 상속의 복잡성을 피할 수 있도록 수많은 방법을 허용합니다. 2) 특성을 사용할 때는 대안과 키워드를 통해 해결할 수있는 방법 충돌에주의를 기울여야합니다. 3) 성능을 최적화하고 코드 유지 보수성을 향상시키기 위해 특성을 과도하게 사용해야하며 단일 책임을 유지해야합니다.

의존성 주입 컨테이너 (DIC)는 PHP 프로젝트에 사용하기위한 객체 종속성을 관리하고 제공하는 도구입니다. DIC의 주요 이점에는 다음이 포함됩니다. 1. 디커플링, 구성 요소 독립적 인 코드는 유지 관리 및 테스트가 쉽습니다. 2. 유연성, 의존성을 교체 또는 수정하기 쉽습니다. 3. 테스트 가능성, 단위 테스트를 위해 모의 객체를 주입하기에 편리합니다.

SplfixedArray는 PHP의 고정 크기 배열로, 고성능 및 메모리 사용이 필요한 시나리오에 적합합니다. 1) 동적 조정으로 인한 오버 헤드를 피하기 위해 생성 할 때 크기를 지정해야합니다. 2) C 언어 배열을 기반으로 메모리 및 빠른 액세스 속도를 직접 작동합니다. 3) 대규모 데이터 처리 및 메모리에 민감한 환경에 적합하지만 크기가 고정되어 있으므로주의해서 사용해야합니다.

PHP는 $ \ _ 파일 변수를 통해 파일 업로드를 처리합니다. 보안을 보장하는 방법에는 다음이 포함됩니다. 1. 오류 확인 확인, 2. 파일 유형 및 크기 확인, 3 파일 덮어 쓰기 방지, 4. 파일을 영구 저장소 위치로 이동하십시오.

JavaScript에서는 NullCoalescingOperator (??) 및 NullCoalescingAssignmentOperator (?? =)를 사용할 수 있습니다. 1. 2. ??= 변수를 오른쪽 피연산자의 값에 할당하지만 변수가 무효 또는 정의되지 않은 경우에만. 이 연산자는 코드 로직을 단순화하고 가독성과 성능을 향상시킵니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
