PHP တွင် session_register_shutdown () သည် မှတ်ပုံတင်ခြင်းကိုပိတ်ထားသည့်အခါသန့်ရှင်းရေးလုပ်ငန်းများကိုအလိုအလျောက်အကောင်အထည်ဖော်သည့် function တစ်ခုဖြစ်သည်။ PHP source code တွင်၎င်း၏ခေါ်ဆိုမှုလမ်းကြောင်းကိုနားလည်ခြင်းသည် PHP session စီမံခန့်ခွဲမှုယန္တရားနှင့် Debug နှင့်သက်ဆိုင်သောပြ issues နာများကိုနက်နက်နဲနဲနားလည်ရန်အလွန်အထောက်အကူပြုသည်။ ဤဆောင်းပါးသည် Session_register_shutdown () ၏ခေါ်ဆိုမှုလမ်းကြောင်းကိုမည်သို့ခွဲခြမ်းစိတ်ဖြာရန် PHP source code struction ကိုပေါင်းစပ်ပေးလိမ့်မည်။
ပထမ ဦး စွာသင်သည်တရားဝင် PHP Repository မှအပြည့်အဝ source code ကို download လုပ်ရန်လိုအပ်သည်။
git clone https://github.com/php/php-src.git
ဤဆောင်းပါးသည်အရင်းအမြစ်ကုဒ်စာဖတ်ခြင်းပါ 0 င်သောကြောင့်၎င်းကိုရှာဖွေခြင်းနှင့်ဒေသအလိုက်ရှာဖွေခြင်းအတွက်အဆင်ပြေသောပတ်ဝန်းကျင်တစ်ခုတည်ဆောက်ရန်အကြံပြုသည်။
session_register_shutdown () လုပ်ဆောင်ချက်သည် session module နှင့်သက်ဆိုင်ပြီးအရင်းအမြစ်ကုဒ်တွင်အဓိကအကောင်အထည်ဖော်မှုသည် Ext / Session / Directory တွင်တည်ရှိသည်။ function definitions ကိုအောက်ပါနည်းလမ်းများဖြင့်တည်ရှိနိုင်သည်။
grep -r "session_register_shutdown" ext/session/
function ကို Ext / Session / Session.c ဖိုင်တွင်သတ်မှတ်ထားကြောင်းသင်တွေ့လိမ့်မည်။
သာဓကဥပမာ -
<?php
// အရင်းအမြစ်ကုဒ်မှထုတ်ယူသောရိုးရှင်းသောဗားရှင်းကိုယူဆပါ
void session_register_shutdown(TSRMLS_D) {
// မှတ်ပုံတင်ခြင်းအစီအစဉ်ကိုပိတ်လိုက်သည့်အခါခေါ်ဆိုမှုများ
php_register_shutdown_function(session_module_shutdown_wrapper TSRMLS_CC);
}
?>
ဤတွင် Php_register_shutdown_shutdown_Function () သည် callback function session_module_shutdown_shutdown_shutdown_shutdown_wutdown_wrapper ကို PHP ၏ Shutdown studdown queueward သို့မှတ်ပုံတင်ရန်အသုံးပြုသည်။
session_register_shutdown () တွင်အဓိကလုပ်ဆောင်ချက်ကိုခေါ်သည်။
php_register_shutdown_function(session_module_shutdown_wrapper TSRMLS_CC);
ဤလုပ်ဆောင်မှုကို PHP Kernel မှ PHP Kernel က PHP ၏သက်တမ်းကုန်ဆုံးချိန်တွင်ကွပ်မျက်ခံရသည့် callback_wrapper စာရင်းသို့ PHP Kernel မှအသုံးပြုသည်။
PHP script လုပ်ဆောင်မှုအဆုံးသတ်သောအခါ Kernel သည် session_module_shutdown_wrapper အပါအ 0 င်မှတ်ပုံတင်ထားသောပိတ်ထားသော function list ကိုခေါ်ဆိုပါ။
အရင်းအမြစ်ကုဒ်ထဲမှာ:
void session_module_shutdown_wrapper(int dummy TSRMLS_DC) {
session_module_shutdown(TSRMLS_C);
}
Session_module_shutdown () သည် Session Shutdown နှင့်အရင်းအမြစ်ဖြန့်ချိမှုကိုအမှန်တကယ်လုပ်ဆောင်သော function တစ်ခုဖြစ်သည်။
ဤလုပ်ဆောင်ချက်မှပြီးစီးသောအလုပ်များတွင် -
Session Data ကိုရေးပြီးပိတ်ပါ
session အရင်းအမြစ်များကိုထုတ်ပေးပါ
မှတ်ဉာဏ်သန့်ရှင်းရေး
၎င်း၏တိကျသောအကောင်အထည်ဖော်မှုသည် Ext / Session / Session.c ဖိုင်တွင်လည်းဖြစ်သည်။
int session_module_shutdown(TSRMLS_D) {
if (PS(mod) && PS(mod)->swrite) {
PS(mod)->swrite(PS(save_path), PS(session_name), PS(session_data), PS(session_data_length) TSRMLS_CC);
}
// အခြားသန့်ရှင်းရေးလုပ်ငန်းများ
return SUCCESS;
}
၎င်းတို့အနက် PS (MOD) သည်လက်ရှိ session module ၏လက်ကိုင်ဖြစ်ပြီးအချက်အလက်သိုလှောင်မှုသည်၎င်း၏ရေးနည်းကိုခေါ်ဆိုခြင်းဖြင့်ပြီးစီးသည်။
PHPတောင်းဆိုမှုအဆုံးသတ် -> php_request_shutdown()
↓
တယ်လီဖုန်းဆက်ခြင်းphp_call_shutdown_functions()
↓
ကရိယာတန်းဆာsession_module_shutdown_wrapper()
↓
တယ်လီဖုန်းဆက်ခြင်းsession_module_shutdown()
↓
Session Data ကိုရေးပြီးပိတ်ပါ
အောက်ပါ PHP Code Perfice သည် Shutdown function ကိုမှတ်ပုံတင်ခြင်းနှင့်ကွပ်မျက်ခြင်းလုပ်ငန်းစဉ်ကို Simulates ။ Domain Name ကို M66.net ဖြင့်အစားထိုးသည်ကိုသတိပြုပါ။
<?php
// Simulate မှတ်ပုံတင်ပိတ်ထားသည့် function ကို
register_shutdown_function(function () {
echo "Session shutdown callback executed.\n";
// 这里可以ကရိယာတန်းဆာ写会话数据的操作,比如တယ်လီဖုန်းဆက်ခြင်းURL
$url = "https://m66.net/session/save";
// 假设တယ်လီဖုန်းဆက်ခြင်း接口保存会话
file_get_contents($url);
});
// အခြားစီးပွားရေးယုတ္တိဗေဒ
echo "Script running...\n";
?>
Session_register_shutdown () Shutdown Hook ကိုမှတ်ပုံတင်ပြီး session shutdown handler function ကိုချည်နှောင်ထားသည်
အဆိုပါပိတ်ထားသောချိတ်ကိုတောင်းဆိုမှုအဆုံးမှာ kernel ကအလိုအလျှောက်ကွပ်မျက်ခံရသည်
Session Close function သည် session data data နှင့်အရင်းအမြစ်ဖြန့်ချိရေးကိုအရေးအသားပြုခြင်းပြီးဆုံးသည်
ခွဲခြမ်းစိတ်ဖြာခြင်းတွင် Source Code positioning နှင့် function call call tholking မှတဆင့်ခေါ်ဆိုမှုလမ်းကြောင်းကိုရှင်းရှင်းလင်းလင်းဖွင့်နိုင်သည်။
အထက်ပါအဆင့်များကိုကျွမ်းကျင်စွာလုပ်ဆောင်ခြင်းအားဖြင့်သင်သည် PHP session စီမံခန့်ခွဲမှု၏ဘဝသံသရာကိုနက်နက်နဲနဲနားလည်နိုင်ပြီးတိုးချဲ့ခြင်းသို့မဟုတ် debugging များအတွက်သက်ဆိုင်ရာအရင်းအမြစ်ကုဒ်နေရာများကိုနေရာချထားနိုင်သည်။