လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> session_register_shutdown () သည် Nginx + PHP-FPM ပတ်ဝန်းကျင်တွင်အမြဲတမ်းအစပျိုးနိုင်ပါသလား။

session_register_shutdown () သည် Nginx + PHP-FPM ပတ်ဝန်းကျင်တွင်အမြဲတမ်းအစပျိုးနိုင်ပါသလား။

M66 2025-05-31

PHP ၏ Session စီမံခန့်ခွဲမှုယန္တရားတွင် Session_register_shutdown () function သည်အတော်အတန်လုပ်ဆောင်မှုဖြစ်သည်။ ၎င်းကို callback function ကိုမှတ်ပုံတင်ရန်အသုံးပြုသည်။ script သည်ကွပ်မျက်ခံရပြီး session ကိုပိတ်ထားသည့်အခါအလိုအလျောက်ခေါ်ဆိုသည်။ ဤယန္တရား၏မူလရည်ရွယ်ချက်မှာ $ _Session သို့ပြောင်းလဲခြင်းအားလုံး၏အပြောင်းအလဲများအားလုံးကိုလုံခြုံစွာပြန်လည်ရေးသားနိုင်ရန်ဖြစ်သည်။

သို့သော်အမှန်တကယ်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်အထူးသဖြင့် Nginx + Php-FPM ကဲ့သို့သောတပ်ဖြန့ ချထားမှုဗိသုကာများ,

1 ။ session_register_shutdown () ၏အလုပ်လုပ်စက်မှုယန္တရား ()

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'];
?>

2 ။ NGINX + PHP-FPM ပတ်ဝန်းကျင်၏ဤလုပ်ဆောင်ချက်အပေါ်သက်ရောက်မှု

2.1 PHP-FPM အလုပ်ခွင်

PHP-FPM သည် PHP အတွက် fastcgi process manager ဖြစ်ပြီး၎င်း၏အဓိကအင်္ဂါရပ်များမှာ -

  • ၎င်းသည်ဝဘ်ဆာဗာ၏လွတ်လပ်စွာလည်ပတ်ပြီး Nginx မှတောင်းဆိုမှုများကိုလက်ခံသည်။

  • တောင်းဆိုမှုပြီးဆုံးသွားသောအခါအရင်းအမြစ်များကိုပြန်လည်အသုံးပြုမည်ဖြစ်သော်လည်းလုပ်ငန်းစဉ်သည်အချိန်ကြာမြင့်စွာဆက်လက်ရှင်သန်နေသည်။

ဤအချက်က PHP ၏ဘဝသံသရာသည်တောင်းဆိုမှုယူနစ်များအပေါ်အခြေခံကြောင်းဆုံးဖြတ်သည်။

2.2 ကအမြဲတမ်းအစပျိုးသလား။

ပုံမှန်တောင်းဆိုမှုလုပ်ငန်းစဉ်တွင်၎င်းသည် session_register_shutdown () ကိုမှတ်ပုံတင်ထားသော callback () သို့မဟုတ် PHP ၏အလိုအလျောက် session ကိုအလိုအလျှောက်ချိတ်ဆက်ထားသောခေါ်ဆိုမှုတစ်ခုဖြစ်သည်ဖြစ်စေ,

သို့သော်အောက်ပါအထူးအခြေအနေများသည်ပြန်ကြားရေးကိုပြန်လည်ဖြစ်ပေါ်စေနိုင်သည်။

  • PHP script သည်ပုံမှန်မဟုတ်သောအမှားများ သည်ပုံမှန်မဟုတ်သောအမှားများကြောင့် (သို့ ) ဇာတ်ကောင်အများစုကိုအကောင်အထည်ဖော်နိုင်သော်လည်းအချို့သောပုံမှန်မဟုတ်သောလည်ပတ်မှုသည်ချိတ်ဆက်မှုမရှိစေနိုင်ပါ။

  • တောင်းဆိုမှုကို Nginx (သို့) PHP-FPM တို့ဖြင့်ရပ်ဆိုင်းထားသည် ။ အကယ်. လုပ်ငန်းစဉ်သည်အချိန်ကုန်ခံပြီးဖြစ်လျှင် PHP script ကိုဖြစ်ပေါ်စေသည်။

  • FastCGI ၏ဆက်သွယ်ရေးခြွင်းချက် - တောင်းဆိုမှုကိုပိတ်ထားပါကပြန်လည်ကြိုးစားပါက PHP လုပ်ငန်းစဉ်သည်ပုံမှန်အားဖြင့်ကွပ်မျက်လုပ်ငန်းစဉ်မပြည့်စုံပါ။

  • FastCgi_finish_Request () ကိုအသုံးပြုသည် ။ ဤလုပ်ဆောင်ချက်သည်တောင်းဆိုမှုတုံ့ပြန်မှုကိုကြိုတင်သတ်မှတ်ထားသည်။ နောက်ဆက်တွဲကုဒ်ကိုကွပ်မျက်မှုအပြီးတွင်မူတည်သည်။

ထို့ကြောင့် session_register_shutdown_shutdown () ကို အများအားဖြင့်အစပျိုးမည်ဖြစ်သော်လည်းတောင်းဆိုမှုအပြီးတွင် 100% ကွပ်မျက်ခံရမည်မဟုတ်ချေ။

3 ။ အကြံပြုချက်များနှင့်အကောင်းဆုံးအလေ့အကျင့်များ

  • Session_register_shutdown () ကိုမှီခိုခြင်းမပြုရန်အဓိကစီးပွားရေးယုတ္တိဗေဒကိုအပြည့်အ 0 ဖြည့်စွက်ရန်ရှောင်ကြဉ်ပါ

  • Erram_shutDown_Function () နှင့် uroshutdown_function () နှင့်အမှားအယွင်းများကို အသုံးပြု. အမှားအယွင်းများပြတ်တောက်မှုကြောင့်အချက်အလက်ဆုံးရှုံးမှုကိုကာကွယ်ရန် Erress_shutDown_Function () နှင့်အမှားရိုက်ကူးမှုယန္တရားကိုအသုံးပြုပါ။

  • ကျိုးကြောင်းဆီလျော်မှုနှင့် Nginx Timesout Parametersters ကိုသတ်မှတ်ပါ

  • Test Anghity Simulation ချွင်းချက်များ

4 ။ ကိုးကားစရာဥပမာ

ဤတွင် 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.";
?>