လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အဘယ်ကြောင့်လျစ်လျူရှု image_user_abort အကျိုးသက်ရောက်မှုကိုယူကြဘူး? မကြာခဏမေးလေ့ရှိသောမေးခွန်းများနှင့်ဖြေရှင်းချက်များ၏အကျဉ်းချုပ်

အဘယ်ကြောင့်လျစ်လျူရှု image_user_abort အကျိုးသက်ရောက်မှုကိုယူကြဘူး? မကြာခဏမေးလေ့ရှိသောမေးခွန်းများနှင့်ဖြေရှင်းချက်များ၏အကျဉ်းချုပ်

gitbox 2025-06-15

PHP တွင် Ident_User_abort () function ကိုအသုံးပြုသည်။ သို့သော် developer တော်တော်များများက၎င်းသည်အသုံးပြုရန်အတွက်အကျိုးသက်ရောက်ခြင်းမရှိသေးကြောင်းတွေ့ရှိလိမ့်မည်။ ဤဆောင်းပါးသည်ဤပြ problem နာ၏အကြောင်းရင်းများကိုနက်နက်နဲနဲခွဲခြမ်းစိတ်ဖြာပြီးဘုံဖြေရှင်းချက်အချို့ကိုအကျဉ်းချုပ်ဖော်ပြလိမ့်မည်။


1 ။ လျစ်လျူရှုသူ သည်အဘယ်နည်း။

Idegal_user_abort () သည် Boolean Parameter ကိုလက်ခံသော PHP ၏ built-in function တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်ချက်ကိုဖုန်းဆက်ပြီးနောက် PHP သည်အသုံးပြုသူအ နေ ဖြင့်အသုံးပြုသူအဆက်ပြတ်သည့်အဖြစ်အပျက်ကိုလျစ်လျူရှုပြီးတက်ကြွစွာလုပ်ဆောင်သည်အထိလက်ရှိ script ကိုဆက်လက်လုပ်ဆောင်သည်။

 <?php
ignore_user_abort(true);
echo "အဆိုပါ script ကိုကွပ်မျက်စတင်သည်\n";
// အချို့သောအချိန်ကုန်စားသုံးအလုပ်များဖျော်ဖြေသည်ဟုယူဆပါ
sleep(30);
echo "script လုပ်ဆောင်မှု၏အဆုံး\n";
?>

အထက်ပါကုဒ်သည်သီအိုရီအရအသုံးပြုသူသည် browser ကိုပိတ်ထားရင်တောင်ဆက်လက်လုပ်ဆောင်ရန်လိုအပ်သည်။


2

2.1 operating ပတ်ဝန်းကျင်ကန့်သတ်

PHP ၏ကွပ်မျက် mode ကိုကွဲပြားလိမ့်မည်။

  • CLI MODE - များသောအားဖြင့်အသုံးပြုသူအဆက်ပြတ်သောကြောင့်၎င်းသည်အဆက်ပြတ်သောကြောင့်၎င်းသည်မရပ်နိုင်ပါ။

  • CGI / FastCGi Mode : Web Server Configuration မှကန့်သတ်ထားနိုင်သည်။

  • Apache Mod_php : ယေဘူယျအားဖြင့် Iverver_user_abort ကို ထောက်ခံသည်, သို့သော်သင်က configuration ကိုအာရုံစိုက်သင့်သည်။

2.2 script output ကိုကြားခံ

အကယ်. script သည် output buffer တစ်ခုရှိပါက server သည် browser ကိုအဆက်ဖြတ်ခြင်းခံရသောအခါ PHP လုပ်ငန်းစဉ်ကိုအတိအကျမတူစေရန်အချိန်နှင့်မကိုက်ညီပါ။

ဖြေရှင်းချက် - output buffer ကိုပိတ်ထားပါသို့မဟုတ် refresh လုပ်ပါ။

 <?php
ignore_user_abort(true);
ob_end_flush(); // output ထုတ် buffering ပိတ်ထား
flush();        // output ကို browser မှပေးပို့ပါ
sleep(30);
?>

2.3 PHP PHP configuration ကိုကန့်သတ်ချက်များ

Maxecution_time_time တွင် PHP configuration တွင်အမြင့်ဆုံးကွပ်မျက်ချိန်ကိုကန့်သတ်ထားလိမ့်မည်။

ဖြေရှင်းချက် - Maxecution_Time_Time သို့မဟုတ်ခေါ်ဆိုမှုကိုညှိပါ

 <?php
set_time_limit(0); // Script Execution Time ကန့်သတ်ချက်ကိုပယ်ဖျက်ပါ
ignore_user_abort(true);
?>

2.4 ဆာဗာသို့မဟုတ် proxy အပြုအမူ

အချို့သောဝက်ဘ်ဆာဗာ (သို့) ပြောင်းပြန် proxy (Nginx ကဲ့သို့ Nginx) သည်ပြတ်တောက်မှု၏တောင်းဆိုမှုကိုနှောင့်ယှက်ခြင်း,

ဖြေရှင်းချက် -

  • ဆာဗာနှင့်အေးဂျင့်များအတွက်အချိန်ကုန်ချိန်ညှိချက်များကိုအတည်ပြုပါ။

  • ရေရှည် PHP scripts များကိုအစားထိုးရန်နှင့်နောက်ခံအရောင် daemon ကိုအသုံးပြုပါ။


3 ။ သာမန်အမှားဥပမာများနှင့်မှန်ကန်သောအသုံးပြုမှု

အမှားအယွင်း - Buffer Flushing ကိုလျစ်လျူရှုထားသည်

 <?php
ignore_user_abort(true);
echo "အလုပ်များကိုကွပ်မျက်ခြင်းစတင်ပါ\n";
sleep(30);
echo "မစ်ရှင်အဆုံးသတ်\n";
?>

အကယ်. browser ကိုအဆက်ပြတ်နေလျှင်, output ကိုချက်ချင်းမပို့နိုင်ပါ။

မှန်ကန်သောဥပမာ - ကြားခံကိုပိတ်ထားပြီးအကန့်အသတ်မရှိလွှတ်တင်သည့်အချိန်ကိုပိတ်ထားပါ

 <?php
ignore_user_abort(true);
set_time_limit(0);

echo "အလုပ်များကိုကွပ်မျက်ခြင်းစတင်ပါ\n";
ob_end_flush();
flush();

sleep(30);
echo "မစ်ရှင်အဆုံးသတ်\n";
?>

4 ။ ဖြေရှင်းချက်အကျဉ်းချုပ်

မေးမြန်း အဖေြ
အသုံးပြုသူအဆက်ဖြတ်ခြင်းကြောင့် script သည်ရပ်စဲသည် လျစ်လျူရှုထားသည့် awig_user_abort (True)
Script လုပ်ဆောင်မှုအချိန်ကန့်သတ်သည် set_time_limit (0)
output ကိုချက်ချင်းမပို့ပါ, output ကို buffering ob_end_flush () နှင့် flush ကိုခေါ်ပါ ()
ဆာဗာအချိန်ကုန်သို့မဟုတ် proxy ကန့်သတ် ဆာဗာ configuration ကိုညှိခြင်းနှင့်နောက်ခံအလုပ်နည်းလမ်းများကိုအသုံးပြုပါ

5 ။ နိဂုံးချုပ်

အထူးသဖြင့်ရှုပ်ထွေးသောဆာဗာဝန်းကျင်တွင် imign_user_abort () သည်အထူးသဖြင့်ရှုပ်ထွေးသောဆာဗာပတ်ဝန်းကျင်တွင်ဤလုပ်ငန်းကိုခေါ်ယူခြင်းသည်ဇာတ်ညွှန်းကိုစဉ်ဆက်မပြတ်ကွပ်မျက်ခံရရန်မဖြစ်နိုင်ပါ။ ကျိုးကြောင်းဆီလျော်သော output control ကိုပေါင်းစပ်ခြင်းဖြင့်သာလုပ်ဆောင်ချက်အချိန်ချိန်ညှိချက်များနှင့်ဆာဗာဖွဲ့စည်းမှုကိုစံပြရလဒ်များကိုရရှိနိုင်သည်။ တစ်ချိန်တည်းမှာပင်ရေရှည်အလုပ်များအတွက်စနစ်တည်ငြိမ်မှုနှင့်ပမာဏကိုတိုးတက်စေရန်မက်ဆေ့ခ်ျများသို့မဟုတ်နောက်ခံ daemon ဒီဇိုင်းကိုအသုံးပြုရန်အကြံပြုသည်။


 <?php
// ပုံမှန်အသုံးပြုမှုသရုပ်ပြ
ignore_user_abort(true);
set_time_limit(0);

echo "မစ်ရှင်စတင်သည်\n";
ob_end_flush();
flush();

for ($i = 0; $i < 10; $i++) {
    // ရှည်လျားသောပြေးအလုပ်များပိုမိုဆင်တူသည်
    sleep(3);
    echo "ပစ္စည်းစာရင်း:$i\n";
    flush();
}

echo "Task ပြီးစီးခြင်း\n";
?>