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

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

gitbox 2025-06-09

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

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

1 ။ ပြ problem နာခွဲခြမ်းစိတ်ဖြာ

File_Get_contents သည် PHP တွင်ဖိုင်များဟုဖတ်ရှုရန်အလွန်အသုံးများသော function တစ်ခုဖြစ်သည်။ သုံးစွဲရန်အလွန်လွယ်ကူသည်, ဥပမာဖိုင်လမ်းကြောင်းတွင်သာကြည့်ပါ။

 $content = file_get_contents('path/to/large/file.txt');

သို့သော်ဖိုင်သည်အလွန်ကြီးမားသောအခါ File_get_controtents သည် ဖိုင်တစ်ခုလုံး၏ contents များကိုတစ်ကြိမ်တွင်ထည့်သွင်းပေးလိမ့်မည်။ ဖိုင်အရွယ်အစားသည် PHP Memory ကန့်သတ် ချက် ထက်ကျော်လွန်ပါက,

2 ။ အဘယ်ကြောင့်မလုံလောက်မှတ်ဉာဏ်မလုံလောက်သော?

ပုံမှန်အားဖြင့် PHP သည် ( memory_limit configuration item မှတဆင့်) scripts သုံးနိုင်သောအမြင့်ဆုံးမှတ်ဉာဏ်ကိုကန့်သတ်လိမ့်မည်။ File_get_contronts ကို အသုံးပြုသောအခါဖိုင်ကြီးတစ်ပါးဖတ်ရန် PHP သည်ဖိုင်တစ်ခုလုံး၏ contents များကိုမှတ်ဉာဏ်ထဲသို့ 0 င်ရောက်လိမ့်မည်။ အကယ်. ဖိုင်အရွယ်အစားသည်ဤမှတ်ဉာဏ်ကန့်သတ်ချက်ထက်ကျော်လွန်ပါက script သည်ပျက်ကျလိမ့်မည်။

ဥပမာအားဖြင့်, သင်သည်ရာနှင့်ချီသော MB သို့မဟုတ် GB ဖိုင်တစ်ခုကိုဖတ်ပါက File_get_Contents သည် ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ 0 င်ရန်ကြိုးစားလိမ့်မည်။

3 ။ ဖြေရှင်းနည်း

3.1 PHP Memory Limit ကိုတိုးမြှင့်ပါ

တိုက်ရိုက်နည်းလမ်းမှာ PHP.ini ဖိုင်တွင် memory_limit ကို ပြုပြင်ခြင်းဖြင့်ရရှိနိုင်သော PHP ၏မှတ်ဉာဏ်ကန့်သတ်ချက်ကိုတိုးမြှင့်ပေးရန်ဖြစ်သည်။

 memory_limit = 512M

သို့မဟုတ် PHP script များတွင် dynamally memory ကန့်သတ်ချက်များကိုသတ်မှတ်နိုင်သည်။

 ini_set('memory_limit', '512M');

သို့သော်ဤချဉ်းကပ်မှုသည်မလွယ်ကူပါ, အကြောင်းမှာအလွန်ကြီးမားသောဖိုင်များအတွက်မှတ်ဉာဏ်အကန့်အသတ်များထည့်သွင်းထားသည့်တိုင်မှတ်ဥာဏ်လျှံခြင်းကိုရှောင်ရှားနိုင်မည်မဟုတ်ပါ။

3.2 segments များရှိဖိုင်များကိုဖတ်ရန် Fopen နှင့် Free ကို သုံးပါ

တစ်ချိန်တည်းတွင်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မထည့်သွင်းနိုင်ရန်အတွက် 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 ကိုပေါင်းစပ်ရန် File_Context_Create ကို သုံး ပါ

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 များတွင်လည်းအသုံးပြုနိုင်သည်။

3.4 ဖိုင်များမှ spl_file_object ကို သုံးပါ

Splfileobject သည် PHP တွင် built-in အတန်းအစားဖြစ်သည်။ ဖိုင်တစ်ခုလုံးကိုမျဉ်းကြောင်းဖြင့်ဖတ်ရန်ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းဖွင့်ခြင်းအားဖြင့်ဖတ်ရန်၎င်းကိုအသုံးပြုပါ။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -

 $file = new SplFileObject('path/to/large/file.txt');
while (!$file->eof()) {
    $line = $file->fgets();
    echo $line;  // လိုင်းအားဖြင့်ဖိုင်အကြောင်းအရာကိုလိုင်း process
}

ဤနည်းလမ်းသည်စာသားဖိုင်များကိုပြုပြင်ရန်အတွက်သင့်တော်သည်, တစ်ချိန်တည်းတွင်လိုင်းတစ်ခုသာဖတ်ရှုခြင်းနှင့်မှတ်ဉာဏ်အသုံးပြုမှုသည်အလွန်သေးငယ်သည်။

3.5 ကြီးမားသောဖိုင်များကိုကိုင်တွယ်ရန် command line tools များကိုအသုံးပြုခြင်း

အချို့ဖြစ်ရပ်များတွင် PHP ၏မှတ်ဉာဏ်ကန့်သတ်ချက်များနှင့်မြန်နှုန်းကိုဖတ်ရှုရန်ပျက်ကွက်ပါက ST , AWK သို့မဟုတ် SED ကဲ့သို့သောကြီးမားသောဖိုင်များကိုကိုင်တွယ်ရန် Systems Command Tools အချို့ကို သုံး. PHP ၏ Exec function မှတဆင့်ဤကိရိယာများကို အသုံးပြု. ထည့်သွင်းစဉ်းစားနိုင်သည်။

 $output = shell_exec('cat /path/to/large/file.txt');
echo $output;

ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါဤနည်းလမ်းသည်စာဖတ်ခြင်းအတွက်သင့်တော်သော်လည်း system tools များ၏လုံခြုံရေးနှင့်ခွင့်ပြုချက်ကိုသေချာစေရန်သတိထားပါ။

3.6 ဝေးလံခေါင်သီသောဖိုင်များရရန် ဆံပင်ကောက်ကောက်ကို အသုံးပြုပါ

ဝေးလံခေါင်သီသောဆာဗာမှဖိုင်ကြီးများကိုသင်ရရန်လိုအပ်ပါက 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);

ဝေးလံခေါင်ဖျားသောဖိုင်များနှင့်ဆက်ဆံရာတွင်ဤနည်းလမ်းသည်အထူးသဖြင့်စာဖတ်ခြင်းအတွက်အထူးသဖြင့်သင့်တော်သည်။

4 ။ အကျဉ်းချုပ်

File_Get_controntents 's Memory ပြ problem နာမလုံလောက်ပါ။ မှတ်ဥာဏ်အမှားများကိုမလုံလောက်မှုကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်မှတ်ဥာဏ်အကန့်အသတ်များ,

ကွဲပြားခြားနားသောဖြေရှင်းနည်းများကိုကွဲပြားခြားနားသောအခြေအနေများအတွက်ရွေးချယ်နိုင်သည်။ ဤဆောင်းပါးတွင်ဖော်ပြထားသောဖြေရှင်းနည်းများသည်ကြီးမားသောဖိုင်များနှင့်ဆက်ဆံရာတွင်မှတ်ဉာဏ်မလုံလောက်မှုပြ the နာကိုဖြေရှင်းနိုင်ရန်မျှော်လင့်ပါသည်။