PHP에서 Session_Register_Shutdown ()은 세션이 닫힐 때 실행되는 콜백 함수를 등록하는 데 사용되는 함수입니다. 이 메커니즘은 개발자가 세션 수명주기가 끝날 때 일부 청소 또는 데이터 절약 작업을 수행하는 데 도움이 될 수 있습니다.
그러나 버전 5.4 이후 Session_Register_Shutdown ()은 더 이상 사용되지 않고 session_write_close () 및 세션 종료 자동 콜백 메커니즘으로 대체되었습니다. 그러나 일부 시나리오에서는 특히 YAF 프레임 워크를 사용하여 복잡한 비즈니스 로직을 관리 할 때도 세션이 끝날 때 사용자 정의 코드를 실행하려고합니다.
이 기사는 YAF 프레임 워크에서 Session_Register_Shutdown () -유사 함수를 구현하는 방법을 자세히 소개하고 샘플 코드를 통해 세션 종료 작업을 관리하는 방법을 보여줍니다.
Session_Register_Shutdown () 의 핵심 기능은 PHP가 세션 작성을 닫을 때 콜백 함수를 실행하는 것입니다. 간단히 말해서 요청이 처리되고 PHP가 세션 파일을 자동으로 닫으면 (데이터 작성, 잠금 장치 등) 등록한 콜백 기능이 호출됩니다.
그러나 최신 PHP 버전에서는이 기능이 더 이상 사용되지 않으며 register_shutdown_function ()을 사용하거나 사용자 정의 로직과 결합 된 Session_write_close ()를 기반으로하는 것이 좋습니다.
YAF는 가볍고 고성능 PHP 프레임 워크입니다. 기본적으로 PHP의 세션 메커니즘을 방해하지는 않지만 프레임 워크 라이프 사이클 후크를 확장하여 세션을 관리 할 수 있습니다.
여기에서 권장되는 관행은 다음과 같습니다.
요청이 시작될 때 Session_Start ()를 호출하여 세션을 시작합니다.
요청이 끝나면 Session_write_Close () 가 호출되고 세션을 닫을 때 작업이 수행됩니다 .
다음은 YAF 프레임 워크에서 세션 관리를 구현하는 예입니다.
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract
{
public function _initSession(Yaf_Dispatcher $dispatcher)
{
// 시작 Session
session_start();
// 등록 세션이 닫히면 콜백이 실행됩니다
register_shutdown_function(function() {
// 세션이 닫힐 때 실행 된 코드는 다음과 같습니다.
// 예를 들어 세션 데이터를 저장합니다,로그 등을 작성하십시오.
file_put_contents('/tmp/session_shutdown.log', date('Y-m-d H:i:s') . " Session closed\n", FILE_APPEND);
// 세션 쓰기 및 릴리스 잠금
session_write_close();
});
}
}
위 코드에서 :
session_start ()는 요청 시작시 세션을 엽니 다.
register_shutdown_function ()을 사용하여 익명 함수를 등록하고 스크립트가 실행되고 세션을 닫기 전에 실행합니다.
콜백에서 로깅 또는 기타 청소 작업을 수행 할 수 있습니다.
마지막으로 Call Session_write_close ()를 위해 세션 데이터가 작성되고 세션 잠금이 해제되도록합니다.
모든 컨트롤러에서 $ _session 에 액세스하고 조작 할 수 있으며 요청이 끝날 때 등록 된 콜백이 호출되도록 할 수 있습니다.
<?php
class IndexController extends Yaf_Controller_Abstract
{
public function indexAction()
{
// 설정 Session 변하기 쉬운
$_SESSION['user'] = '장 산';
echo "Hello, " . $_SESSION['user'];
// 수동으로 닫을 필요는 없습니다 session,Bootstrap 프로세스의 콜백이 처리됩니다
return false; // 보기 렌더링 종료
}
}
코드가 외부 URL에 액세스하는 것이 포함 된 경우 : 예를 들어
$url = 'https://www.example.com/api/data';
$response = file_get_contents($url);
요구 사항에 따라 도메인 이름을 M66.net 으로 바꾸고 다음으로 변경해야합니다.