PHP တွင် hash_copy function ကို hash context ( hashcontext ) ကိုကူးယူရန်အသုံးပြုသည်။ ကဏ် mult ရိယာအမျိုးမျိုးပတ် 0 န်းကျင်တွင်လုပ်ငန်းများကိုဆေးကြောရန်အတွက်လုံခြုံရေးနှင့်ထိရောက်မှုသည် developer များအာရုံစိုက်မှု၏အဓိကအချက်များဖြစ်သည်။ ဤဆောင်းပါးသည်ပေါင်းစုံသောပတ် 0 န်းကျင်ရှိ hash_copy function ၏လုံခြုံရေးနှင့်အကောင်းဆုံးအလေ့အကျင့်များမည်သို့လုပ်ဆောင်နေကြသည်ကိုအသေးစိတ်လေ့လာပါလိမ့်မည်။
Hash_Copy သည် Hash Computing အခြေအနေကိုကူးယူရန် PHP 5.3.0 တွင်မိတ်ဆက်ပေးသော function တစ်ခုဖြစ်သည်။
<?php
$ctx1 = hash_init('sha256');
hash_update($ctx1, 'hello');
$ctx2 = hash_copy($ctx1);
hash_update($ctx2, ' world');
echo hash_final($ctx1); // hello hash တန်ဖိုး
echo "\n";
echo hash_final($ctx2); // hello world hash တန်ဖိုး
?>
Hash_copy သည် လက်ရှိ hash အချက်အလက်များကိုထပ်ခါတလဲလဲတွက်ချက်ခြင်းနှင့်အခြေအနေကူးယူခြင်းဖြင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။
PHP သည်ပတ် 0 န်းကျင်တွင်ပတ် 0 န်းကျင်တွင်ဇာတိပတ် 0 န်းကျင်နှင့်မတူပါ။ ဤအချိန်တွင် Threads မျိုးစုံသည်တစ်ချိန်တည်းတွင်တူညီသော hash ဆက်စပ်အရင်းအမြစ်ကိုရယူနိုင်သည်။
Hash_copy ကိုယ်တိုင်ကမှတ်ဥာဏ်ရှိပြည်နယ်အရာဝတ်ထုကိုကူးယူသည်။ အကယ်. Threads မျိုးစုံသည် တူညီသောအခင်းအကျင်းကိုတစ်ချိန်တည်းတွင်ကွဲပြားစွာဝေမျှပါ က၎င်းကိုမပိတ်ပါနှင့်, ထို့နောက်ပ conflicts ိပက်ခများကိုဖတ်ရန်နှင့်ရေးသားခြင်းနှင့်ရေးသားခြင်းကိုပြုလုပ်နိုင်ပြီးခန့်မှန်းရခက်သော Hash ရလဒ်များထုတ်လုပ်နိုင်သည်။
သို့သော်တစ် ဦး ကချည်တစ်ခုချင်းစီသည် hashcontext မိတ္တူတစ်စောင်များကိုလွတ်လပ်စွာကိုင်ထားပါကသို့မဟုတ်ကူးယူပြီးနောက်အမှီအခိုကင်းစွာလည်ပတ်ပါက,
PHP hash extensionions များသည်အခြေခံဂဘာသာစကားအကောင်အထည်ဖော်မှု (Openssl သို့မဟုတ် built-in hash libraries) အပေါ်အခြေခံသည်။ များသောအားဖြင့်ဤစာကြည့်တိုက်များသည်ချည်မျှင်များဖြစ်သည်။ သို့သော်ဂရုပြုသင့်သည် -
ကွဲပြားခြားနားသော PHP သို့မဟုတ် hash extensions များ၏ဗားရှင်းကွဲပြားခြားနားသောချည်ဘေးကင်းလုံခြုံရေးအာမခံချက်ရှိပါတယ်။
User-mode shared variable တွေကို mutexes သို့မဟုတ်အခြားထပ်တူထပ်တူပြုခြင်းယန္တရားများမှတဆင့်သူတို့ကိုယ်သူတို့ကာကွယ်ထားရမည်။
Hash_Copy function သည်လုံခြုံသည်။ သို့သော် Threads မျိုးစုံတွင်သာချည်မျှင်မျိုးစုံတွင်တစ်ပြိုင်နက်တည်းတူညီသော hash asthing accourt လုပ်ပါ ။ ကူးယူထားသောအခြေအနေကိုချည်တစ်ခုချင်းစီတွင်လွတ်လပ်စွာအသုံးပြုနိုင်သည်။
Hash Plarication သည်ပတ် 0 န်းကျင်ပတ် 0 န်းကျင်တွင်လုံခြုံမှုရှိပြီးထိရောက်စွာသေချာစေရန်အတွက်အောက်ပါအလေ့အကျင့်များကိုအကြံပြုပါသည်။
Hash အခြေအနေကို အစပြု. charsh_copy မှတဆင့်၎င်းကိုကူးယူပါ။
<?php
$ctx = hash_init('sha256');
hash_update($ctx, 'common part data');
$threads = [];
for ($i = 0; $i < 5; $i++) {
$threadCtx = hash_copy($ctx); // တစ်ခုချင်းစီကိုချည်တစ်ခုလွတ်လပ်သောမိတ္တူကိုရရှိသွားတဲ့
// ဒီနေရာမှာချည်တစ်ခုဖန်တီးပြီးအဲဒါကိုဖြတ်သန်းရအောင်$threadCtx
// ချည်အတွင်းဆက်လက် hash_update နောက်ဆုံးတော့ hash_final
}
?>
အကယ်. Threads မျိုးစုံကိုတူညီသောအခြေအနေကိုမွမ်းမံရန်လိုအပ်ပါက Mutex ကာကွယ်မှုကိုအသုံးပြုရမည်။
<?php
$mutex = new Mutex();
function safe_hash_update($ctx, $data, $mutex) {
$mutex->lock();
hash_update($ctx, $data);
$mutex->unlock();
}
?>
သို့သော်မကြာခဏသော့ခတ်ခြင်းလုပ်ငန်းများသည်စွမ်းဆောင်ရည်ကိုအကျိုးသက်ရောက်စေပြီးအကြံပြုခြင်းမရှိပါ။
uncapied hash ဆက်တိုက် pointers ဖြတ်သန်းသွားလာရင်းပြိုင်ပွဲပြ issues နာများကိုဖြစ်ပေါ်စေသည်။ မိတ္တူအသစ်တစ်ခုကို hash_copy ဖြင့်အမြဲတမ်းထုတ်လုပ်သင့်သည်။
ပတ်ဝန်းကျင်ကိုခွင့်ပြုပါက Constitation Constitions ၏ရှုပ်ထွေးမှုများကြောင့်ဖြစ်ပေါ်လာသောရှုပ်ထွေးမှုများကိုရှောင်ရှားရန် collition များကိုရှောင်ရှားရန် Central Hash functions များကိုတိုက်ရိုက်အသုံးပြုနိုင်သည် ။
Hash_Copy function သည်လုံခြုံစိတ်ချရသောလုံခြုံစိတ်ချရသောအန္တရာယ်များကိုမိတ်ဆက်ပေးလိမ့်မည်မဟုတ်ပါ။
ပေါင်းစုံသောဝန်းကျင်တွင်အဓိကသော့ချက်သည်တူညီသော hashcontext ဥပမာအားမျှဝေခြင်းနှင့်လည်ပတ်ခြင်းများကိုဝေမျှခြင်းနှင့်လည်ပတ်ခြင်းတို့ကိုရှောင်ရှားရန်ဖြစ်သည်။
အကောင်းဆုံးအလေ့အကျင့်မှာ - အခြေအနေကိုကူးယူပြီးနောက်, လွတ်လပ်သောအသုံးပြုမှုအတွက်ချည်တစ်ခုစီကိုလွှဲပြောင်းပေးပြီး,
ဖြစ်နိုင်လျှင်, လူစုလူဝေးကိုရိုးရှင်းစေရန် stateless hash interface ကိုသုံးရန်ကြိုးစားပါ။