PHP ၏ Session စီမံခန့်ခွဲမှုယန္တရားတွင် Session_register_shutdown () function သည်အတော်အတန်လုပ်ဆောင်မှုဖြစ်သည်။ ၎င်းကို callback function ကိုမှတ်ပုံတင်ရန်အသုံးပြုသည်။ script သည်ကွပ်မျက်ခံရပြီး session ကိုပိတ်ထားသည့်အခါအလိုအလျောက်ခေါ်ဆိုသည်။ ဤယန္တရား၏မူလရည်ရွယ်ချက်မှာ $ _Session သို့ပြောင်းလဲခြင်းအားလုံး၏အပြောင်းအလဲများအားလုံးကိုလုံခြုံစွာပြန်လည်ရေးသားနိုင်ရန်ဖြစ်သည်။
သို့သော်အမှန်တကယ်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်အထူးသဖြင့် Nginx + Php-FPM ကဲ့သို့သောတပ်ဖြန့ ် ချထားမှုဗိသုကာများ,
PHP " Session_start (Session_start) တွင်" Close_Start () တွင် "အနီးကပ်အစည်းအဝေး" ချိတ်ကိုမှတ်ပုံတင်သည်။ Session_register_shutdown () အသုံးပြုသူများအား callback function များကိုစိတ်ကြိုက်ပြုပြင်ခွင့်ပြုသည်။
နမူနာကုဒ်:
<?php
session_start();
session_register_shutdown(function() {
// ၎င်းကိုဇာတ်ညွှန်း၏အဆုံးတွင်ကွပ်မျက်ခံရလိမ့်မည်,ပြန်ရေးပါ session
error_log('Session shutdown callback triggered.');
// သင်ဒီမှာလုံခြုံစွာလည်ပတ်နိုင်ပါတယ် $_SESSION
});
$_SESSION['count'] = ($_SESSION['count'] ?? 0) + 1;
echo "လည်ပတ်မှုအရေအတွက်:" . $_SESSION['count'];
?>
PHP-FPM သည် PHP အတွက် fastcgi process manager ဖြစ်ပြီး၎င်း၏အဓိကအင်္ဂါရပ်များမှာ -
၎င်းသည်ဝဘ်ဆာဗာ၏လွတ်လပ်စွာလည်ပတ်ပြီး Nginx မှတောင်းဆိုမှုများကိုလက်ခံသည်။
တောင်းဆိုမှုပြီးဆုံးသွားသောအခါအရင်းအမြစ်များကိုပြန်လည်အသုံးပြုမည်ဖြစ်သော်လည်းလုပ်ငန်းစဉ်သည်အချိန်ကြာမြင့်စွာဆက်လက်ရှင်သန်နေသည်။
ဤအချက်က PHP ၏ဘဝသံသရာသည်တောင်းဆိုမှုယူနစ်များအပေါ်အခြေခံကြောင်းဆုံးဖြတ်သည်။
ပုံမှန်တောင်းဆိုမှုလုပ်ငန်းစဉ်တွင်၎င်းသည် session_register_shutdown () ကိုမှတ်ပုံတင်ထားသော callback () သို့မဟုတ် PHP ၏အလိုအလျောက် session ကိုအလိုအလျှောက်ချိတ်ဆက်ထားသောခေါ်ဆိုမှုတစ်ခုဖြစ်သည်ဖြစ်စေ,
သို့သော်အောက်ပါအထူးအခြေအနေများသည်ပြန်ကြားရေးကိုပြန်လည်ဖြစ်ပေါ်စေနိုင်သည်။
PHP script သည်ပုံမှန်မဟုတ်သောအမှားများ သည်ပုံမှန်မဟုတ်သောအမှားများကြောင့် (သို့ ) ဇာတ်ကောင်အများစုကိုအကောင်အထည်ဖော်နိုင်သော်လည်းအချို့သောပုံမှန်မဟုတ်သောလည်ပတ်မှုသည်ချိတ်ဆက်မှုမရှိစေနိုင်ပါ။
တောင်းဆိုမှုကို Nginx (သို့) PHP-FPM တို့ဖြင့်ရပ်ဆိုင်းထားသည် ။ အကယ်. လုပ်ငန်းစဉ်သည်အချိန်ကုန်ခံပြီးဖြစ်လျှင် PHP script ကိုဖြစ်ပေါ်စေသည်။
FastCGI ၏ဆက်သွယ်ရေးခြွင်းချက် - တောင်းဆိုမှုကိုပိတ်ထားပါကပြန်လည်ကြိုးစားပါက PHP လုပ်ငန်းစဉ်သည်ပုံမှန်အားဖြင့်ကွပ်မျက်လုပ်ငန်းစဉ်မပြည့်စုံပါ။
FastCgi_finish_Request () ကိုအသုံးပြုသည် ။ ဤလုပ်ဆောင်ချက်သည်တောင်းဆိုမှုတုံ့ပြန်မှုကိုကြိုတင်သတ်မှတ်ထားသည်။ နောက်ဆက်တွဲကုဒ်ကိုကွပ်မျက်မှုအပြီးတွင်မူတည်သည်။
ထို့ကြောင့် session_register_shutdown_shutdown () ကို အများအားဖြင့်အစပျိုးမည်ဖြစ်သော်လည်းတောင်းဆိုမှုအပြီးတွင် 100% ကွပ်မျက်ခံရမည်မဟုတ်ချေ။
Session_register_shutdown () ကိုမှီခိုခြင်းမပြုရန်အဓိကစီးပွားရေးယုတ္တိဗေဒကိုအပြည့်အ 0 ဖြည့်စွက်ရန်ရှောင်ကြဉ်ပါ ။
Erram_shutDown_Function () နှင့် uroshutdown_function () နှင့်အမှားအယွင်းများကို အသုံးပြု. အမှားအယွင်းများပြတ်တောက်မှုကြောင့်အချက်အလက်ဆုံးရှုံးမှုကိုကာကွယ်ရန် Erress_shutDown_Function () နှင့်အမှားရိုက်ကူးမှုယန္တရားကိုအသုံးပြုပါ။
ကျိုးကြောင်းဆီလျော်မှုနှင့် Nginx Timesout Parametersters ကိုသတ်မှတ်ပါ ။
Test Anghity Simulation ချွင်းချက်များ
ဤတွင် Session_register_shutdown () နှင့်ခြွင်းချက်ကိုင်တွယ်ခြင်းပေါင်းစပ်ထားသောရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။
<?php
session_start();
session_register_shutdown(function() {
error_log('Session shutdown callback executed.');
session_write_close();
});
register_shutdown_function(function() {
$error = error_get_last();
if ($error !== null) {
error_log('Fatal error captured: ' . print_r($error, true));
// ဤတွင်အချို့သောကုစားစစ်ဆင်ရေးရှိပါတယ်,ဥပမာအားဖြင့်သစ်ထုတ်လုပ်ခြင်းသို့မဟုတ်သတိပေးခြင်းသည်
}
});
try {
$_SESSION['user'] = 'Alice';
// ခြွင်းချက်များ Simulate
// throw new Exception("Something went wrong!");
} catch (Exception $e) {
error_log('Exception caught: ' . $e->getMessage());
// ယုတ္တိဗေဒကိုင်တွယ်
}
echo "Session updated.";
?>