PHP에서 출력 버퍼링 메커니즘은 개발자에게 유연한 출력 제어 기능을 제공하는 반면 OB_END_FLUSH () 기능은 출력 버퍼링을 종료하고 버퍼링 된 컨텐츠를 브라우저로 보내는 데 사용되는 일반적인 기능입니다. 동시에 Session_Register_Shutdown ()은 콜백 함수를 등록하는 데 사용되며 세션이 닫히면 자동으로 실행되므로 세션 데이터의 저장 및 청소를 처리 할 수 있습니다.
이 기사는 SESSION_END_FLUSH ()를 사용하여 세션 데이터의 무결성과 페이지 컨텐츠의 올바른 출력을 보장 할 때 SESSION_REGISTER_SHUTDOWN () 함수와 합리적으로 협력하는 방법을 자세히 소개합니다.
OB_END_FLUSH () 는 현재 출력 버퍼를 닫고 버퍼의 내용을 브라우저로 전송하는 데 사용됩니다. 예를 들어:
<?php
ob_start();
echo "이것은 버퍼링 된 출력입니다。";
ob_end_flush(); // 버퍼링 된 컨텐츠를 보내고 버퍼를 닫습니다
?>
버퍼를 사용하여 페이지 출력을 일시적으로 저장하여 출력 전에 출력 컨텐츠를 수정하거나 캡처 할 수 있습니다.
session_register_shutdown ()은 세션이 닫힐 때 호출 된 콜백 함수를 등록하는 데 사용됩니다. 이 콜백 함수는 스크립트가 실행되고 세션이 닫히면 자동으로 실행됩니다. 일반적으로 세션 쓰기 및 청소를 처리하는 데 사용됩니다.
PHP 5.4.0에서 시작하여 Session_Register_Shutdown ()은 수동으로 호출하지 않고 자동으로 호출됩니다. 그러나 수동 등록은 여전히 일부 기존 버전이나 특별한 요구에 유용합니다.
등록 예 :
<?php
session_register_shutdown(function() {
// 세션이 닫힐 때 수행 된 작업
file_put_contents('session_log.txt', "Session closed at " . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
});
?>
기본적으로 PHP는 스크립트 끝에서 SESSION_WRITE_CLOSE ()를 자동으로 호출하여 세션 데이터를 저장합니다. 그러나 출력 버퍼를 사용하고 OB_END_FLUSH ()가 호출되어 출력을 미리 보내도록 호출되면 세션 데이터가 작성되기 전에 출력을 시작하여 데이터 손실 또는 일관성이없는 상태가 발생할 수 있습니다.
동시에 Session_Register_Shutdown ()을 사용하면 세션이 닫히면 세션 데이터의 무결성을 보장 할 때 일부 사용자 정의 작업을 수행 할 수 있습니다.
다음은 합리적으로 사용하는 방법에 대한 데모입니다.
<?php
session_start();
// 세션을 등록 할 때 콜백이 닫힙니다,세션이 올바르게 작성되었는지 확인하십시오
session_register_shutdown(function() {
// 여기에 사용자 정의 세션 마감 로직을 넣을 수 있습니다
error_log("Session is closing at " . date('Y-m-d H:i:s'));
});
// 출력 버퍼링을 켭니다
ob_start();
echo "페이지 컨텐츠가 출력되기 시작합니다。<br>";
// 비즈니스 로직 처리,수정할 수 있습니다 session 데이터
$_SESSION['last_access'] = time();
// 출력 버퍼링을 종료하고 컨텐츠를 보내십시오
ob_end_flush();
?>
이 예에서 Session_Register_Shutdown ()은 세션이 닫히면 논리가 호출되도록합니다. OB_END_FLUSH () 는 페이지 내용이 세션의 쓰기에 영향을 미치지 않고 적시에 전송되도록합니다.
출력 전에 Session_start ()가 호출되는지 확인하십시오.
Session_Register_Shutdown () 의 콜백 함수는 출력 버퍼 상태에 의존 할 수 없습니다.
세션 데이터를 수정 해야하는 경우 OB_END_FLUSH ()를 호출하기 전에이를 완료하는 것이 좋습니다.
PHP 7 이후에서 Session_Register_Shutdown ()은 일반적으로 PHP가 자동으로 처리되므로 수동 호출이 필요하지 않습니다.
OB_end_flush () 및 session_register_shutdown () 의 합리적인 조합은 개발자가 출력 및 세션 데이터 작성 순서를 더 잘 제어하고 출력 버퍼의 초기 끝으로 인해 세션 데이터 손실 또는 상태 이상을 피할 수 있도록 도와줍니다.
위의 예와 지침을 통해 두 가지의 공동 작업을 마스터했으며 복잡한 PHP 프로젝트에서 세션 보안 및 페이지 출력 안정성을 유지할 수 있다고 생각합니다.