File_Get_contontents ကိုသုံးပြီးဖိုင်ကို PHP တွင်အသုံးပြုသောဖိုင်ကိုဖတ်သည့်အခါဖိုင်သည်ကြီးမားလွန်းပါကမှတ်ဉာဏ်မလုံလောက်ပါ။ ဤဆောင်းပါးသည်ဤပြ problem နာကိုဖြစ်ပေါ်စေပြီးထိရောက်သောဖြေရှင်းနည်းများကိုဖြစ်ပေါ်စေသည့်အရာအားအသေးစိတ်လေ့လာသုံးသပ်လိမ့်မည်။
File_Get_contents သည် PHP တွင်ဖိုင်များဟုဖတ်ရှုရန်အလွန်အသုံးများသော function တစ်ခုဖြစ်သည်။ သုံးစွဲရန်အလွန်လွယ်ကူသည်, ဥပမာဖိုင်လမ်းကြောင်းတွင်သာကြည့်ပါ။
$content = file_get_contents('path/to/large/file.txt');
သို့သော်ဖိုင်သည်အလွန်ကြီးမားသောအခါ File_get_controtents သည် ဖိုင်တစ်ခုလုံး၏ contents များကိုတစ်ကြိမ်တွင်ထည့်သွင်းပေးလိမ့်မည်။ ဖိုင်အရွယ်အစားသည် PHP Memory ကန့်သတ် ချက် ထက်ကျော်လွန်ပါက,
ပုံမှန်အားဖြင့် PHP သည် ( memory_limit configuration item မှတဆင့်) scripts သုံးနိုင်သောအမြင့်ဆုံးမှတ်ဉာဏ်ကိုကန့်သတ်လိမ့်မည်။ File_get_contronts ကို အသုံးပြုသောအခါဖိုင်ကြီးတစ်ပါးဖတ်ရန် PHP သည်ဖိုင်တစ်ခုလုံး၏ contents များကိုမှတ်ဉာဏ်ထဲသို့ 0 င်ရောက်လိမ့်မည်။ အကယ်. ဖိုင်အရွယ်အစားသည်ဤမှတ်ဉာဏ်ကန့်သတ်ချက်ထက်ကျော်လွန်ပါက script သည်ပျက်ကျလိမ့်မည်။
ဥပမာအားဖြင့်, သင်သည်ရာနှင့်ချီသော MB သို့မဟုတ် GB ဖိုင်တစ်ခုကိုဖတ်ပါက File_get_Contents သည် ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ 0 င်ရန်ကြိုးစားလိမ့်မည်။
တိုက်ရိုက်နည်းလမ်းမှာ PHP.ini ဖိုင်တွင် memory_limit ကို ပြုပြင်ခြင်းဖြင့်ရရှိနိုင်သော PHP ၏မှတ်ဉာဏ်ကန့်သတ်ချက်ကိုတိုးမြှင့်ပေးရန်ဖြစ်သည်။
memory_limit = 512M
သို့မဟုတ် PHP script များတွင် dynamally memory ကန့်သတ်ချက်များကိုသတ်မှတ်နိုင်သည်။
ini_set('memory_limit', '512M');
သို့သော်ဤချဉ်းကပ်မှုသည်မလွယ်ကူပါ, အကြောင်းမှာအလွန်ကြီးမားသောဖိုင်များအတွက်မှတ်ဉာဏ်အကန့်အသတ်များထည့်သွင်းထားသည့်တိုင်မှတ်ဥာဏ်လျှံခြင်းကိုရှောင်ရှားနိုင်မည်မဟုတ်ပါ။
တစ်ချိန်တည်းတွင်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မထည့်သွင်းနိုင်ရန်အတွက် fopen နှင့် free free functions များကိုပိတ်ဆို့ခြင်းဖြင့်ဖိုင်ပါ 0 င်သည့်ပိတ်ဆို့မှုကိုဖတ်ရန် Segmented ဖတ်ရှုရန်စာဖတ်ခြင်းကိုသင်အသုံးပြုနိုင်သည်။
$handle = fopen('path/to/large/file.txt', 'r');
if ($handle) {
while (($chunk = fread($handle, 8192)) !== false) {
// တစ်ခုချင်းစီကိုပိတ်ပင်တားဆီးမှုများအတွက်လုပ်ငန်းစဉ်အချက်အလက်
echo $chunk; // အကြောင်းအရာကိုတိုက်ရိုက်ထုတ်လွှင့်နိုင်သည်သို့မဟုတ်အခြားအပြောင်းအလဲများကိုပြုလုပ်နိုင်သည်
}
fclose($handle);
} else {
echo "ဖိုင်ကိုဖွင့ ်. မရပါ";
}
ဤ၏အားသာချက်မှာဖိုင်ရှိအကြောင်းအရာ၏အစိတ်အပိုင်းတစ်ခုသာလျှင်တစ်ကြိမ်တွင်ဖတ်လိမ့်မည်။
stream_context_create ကို scream_get_contents နဲ့ပေါင်းစပ်ထားတဲ့စာဖတ်ခြင်းကိုဖန်တီးဖို့ stream_context_create ကိုလည်း သုံးနိုင်တယ်။ ၎င်းသည်ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းမှတ်ဉာဏ်ထဲသို့ 0 င်ရောက်ခြင်းမှတားဆီးလိမ့်မည်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -
$options = [
'http' => [
'method' => 'GET',
'header' => "Content-Type: text/plain\r\n"
]
];
$context = stream_context_create($options);
$content = file_get_contents('http://gitbox.net/path/to/large/file.txt', false, $context);
ဤချဉ်းကပ်နည်းသည် HTTP တောင်းဆိုမှုများကိုကိုင်တွယ်ရန်အတွက်ပိုမိုသင့်တော်သော်လည်းအခြား streaming sciamarios များတွင်လည်းအသုံးပြုနိုင်သည်။
Splfileobject သည် PHP တွင် built-in အတန်းအစားဖြစ်သည်။ ဖိုင်တစ်ခုလုံးကိုမျဉ်းကြောင်းဖြင့်ဖတ်ရန်ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းဖွင့်ခြင်းအားဖြင့်ဖတ်ရန်၎င်းကိုအသုံးပြုပါ။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -
$file = new SplFileObject('path/to/large/file.txt');
while (!$file->eof()) {
$line = $file->fgets();
echo $line; // လိုင်းအားဖြင့်ဖိုင်အကြောင်းအရာကိုလိုင်း process
}
ဤနည်းလမ်းသည်စာသားဖိုင်များကိုပြုပြင်ရန်အတွက်သင့်တော်သည်, တစ်ချိန်တည်းတွင်လိုင်းတစ်ခုသာဖတ်ရှုခြင်းနှင့်မှတ်ဉာဏ်အသုံးပြုမှုသည်အလွန်သေးငယ်သည်။
အချို့ဖြစ်ရပ်များတွင် PHP ၏မှတ်ဉာဏ်ကန့်သတ်ချက်များနှင့်မြန်နှုန်းကိုဖတ်ရှုရန်ပျက်ကွက်ပါက ST , AWK သို့မဟုတ် SED ကဲ့သို့သောကြီးမားသောဖိုင်များကိုကိုင်တွယ်ရန် Systems Command Tools အချို့ကို သုံး. PHP ၏ Exec function မှတဆင့်ဤကိရိယာများကို အသုံးပြု. ထည့်သွင်းစဉ်းစားနိုင်သည်။
$output = shell_exec('cat /path/to/large/file.txt');
echo $output;
ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါဤနည်းလမ်းသည်စာဖတ်ခြင်းအတွက်သင့်တော်သော်လည်း system tools များ၏လုံခြုံရေးနှင့်ခွင့်ပြုချက်ကိုသေချာစေရန်သတိထားပါ။
ဝေးလံခေါင်သီသောဆာဗာမှဖိုင်ကြီးများကိုသင်ရရန်လိုအပ်ပါက funks ရှိဖိုင်များကို download လုပ်ရန်သင်ဆံပင် ကောက်ကောက်ကို သုံးနိုင်သည်။ Curl သည် ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မထည့်သွင်းနိုင်သည့် HTTP ဒေါင်းလုပ်များကိုထောက်ပံ့သည်။ ဥပမာသည်အောက်ပါအတိုင်းဖြစ်သည် -
$ch = curl_init('http://gitbox.net/path/to/large/file.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
$content = curl_exec($ch);
curl_close($ch);
ဝေးလံခေါင်ဖျားသောဖိုင်များနှင့်ဆက်ဆံရာတွင်ဤနည်းလမ်းသည်အထူးသဖြင့်စာဖတ်ခြင်းအတွက်အထူးသဖြင့်သင့်တော်သည်။
File_Get_controntents 's Memory ပြ problem နာမလုံလောက်ပါ။ မှတ်ဥာဏ်အမှားများကိုမလုံလောက်မှုကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်မှတ်ဥာဏ်အကန့်အသတ်များ,
ကွဲပြားခြားနားသောဖြေရှင်းနည်းများကိုကွဲပြားခြားနားသောအခြေအနေများအတွက်ရွေးချယ်နိုင်သည်။ ဤဆောင်းပါးတွင်ဖော်ပြထားသောဖြေရှင်းနည်းများသည်ကြီးမားသောဖိုင်များနှင့်ဆက်ဆံရာတွင်မှတ်ဉာဏ်မလုံလောက်မှုပြ the နာကိုဖြေရှင်းနိုင်ရန်မျှော်လင့်ပါသည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
file_get_contents