လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP ဖိုင် () function ကိုဖတ်သည့်အခါမှတ်ဥာဏ်လျှံကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။ လက်တွေ့ကျတဲ့ကျွမ်းကျင်မှုများကိုမျှဝေပါ

PHP ဖိုင် () function ကိုဖတ်သည့်အခါမှတ်ဥာဏ်လျှံကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။ လက်တွေ့ကျတဲ့ကျွမ်းကျင်မှုများကိုမျှဝေပါ

gitbox 2025-08-30

1 ။ ဖိုင် () function ကို၏အခြေခံအသုံးပြုမှု

ဖိုင် () function သည် PHP တွင်ဖိုင်တစ်ခုစီကို array element တစ်ခုအဖြစ်ဖတ်သည့် PHP တွင် built-in function တစ်ခုဖြစ်သည်။ ၎င်း၏အခြေခံအသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -

 <span><span><span class="hljs-variable">$file_array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file</span></span><span>(</span><span><span class="hljs-string">'largefile.txt'</span></span><span>);
</span></span>

၎င်းသည် Glemefile.txt ဖိုင်တစ်ခုစီကို array ၏ Element တစ်ခုအဖြစ်မှတ်ဉာဏ်တစ်ခုစီကိုဖတ်ပါလိမ့်မည်။ အကယ်. ဖိုင်သည်အလွန်ကြီးမားပါက၎င်းသည်မှတ်ဥာဏ်များစွာကိုလောင်ကျွမ်းစေပြီးမှတ်ဉာဏ်ပြည့်ဝသောပြ problems နာများကိုဖြစ်ပေါ်စေသည်။

2 ။ ဖိုင် () သည် အဘယ်ကြောင့် () မှတ်ဉာဏ်ပြည့်စေသနည်း။

ဖိုင် () function သည်ဖိုင်၏လိုင်းတစ်ခုစီကိုမှတ်ဉာဏ်ထဲသို့ဖတ်ပြီးခင်းကျင်းမှုကိုပြန်ပို့သည်။ အကယ်. ဖိုင်သည်အလွန်ကြီးမားသည်, အထူးသဖြင့် Megabytes ရာနှင့်ချီ။ ထက်ကျော်လွန်သောဖိုင်များသို့မဟုတ်ပိုကြီးသည့်ဖိုင်များသည်တစ်ချိန်တည်းတွင်မှတ်ဉာဏ်တွင်သိမ်းဆည်းထားပြီးမှတ်ဉာဏ်အသုံးပြုမှုတိုးလာသည်။ မှတ်ဉာဏ်အထက်ကန့်သတ်ချက်သို့ရောက်သည်နှင့် PHP သည်မှတ်ဥာဏ်လျှံသောအမှားတစ်ခုကိုလွှင့်ပစ်လိမ့်မည်။

3 ။ function () function ကိုအစား fopen () နှင့် fgets () ကို သုံးပါ

ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းတွင်မွေ့လျော်ရန်ရှောင်ရှားရန်အတွက်ကျွန်ုပ်တို့သည် figgets file file comment line ကိုဖတ်ရန် fopen () function ကိုသုံးနိုင်သည်။ ဤသို့ပြုလုပ်ခြင်းသည်မှတ်ဉာဏ်အသုံးပြုမှုကိုလျော့နည်းစေသည်။ အဘယ်ကြောင့်ဆိုသော်ဖိုင်တစ်ခုလုံးကိုတစ်ကြိမ်သာဖတ်ရှုခြင်း,

 <span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'largefile.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span>) {
    </span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-comment">// တစ်ခုချင်းစီကိုလိုင်း process</span></span><span>
    }
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဖိုင်ကိုဖွင့ ်. မရပါ'</span></span><span>;
}
</span></span>

ဤနည်းလမ်းသည်ဖိုင်တစ်ခုလုံးကို file line ကိုလိုင်းဖြင့်ဖတ်ခြင်းအားဖြင့်ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းတင်ခြင်းကိုရှောင်ရှားသည်။ Memory အသုံးပြုမှုကိုသိသိသာသာလျော့နည်းစေသည်

4 ။ chunking စာဖတ်ခြင်းအတွက် fseek () နှင့် ) ကို သုံးပါ

line-by-line စာဖတ်ခြင်းအပြင်ဖိုင်များကိုပိတ်ပင်တားဆီးမှုဖြင့်ဖတ်ရန် FSEEK () နှင့် frave ကိုသုံးနိုင်သည်။ FESEEK () ဖိုင် ညွှန်ကြားချက်များကိုရှာဖွေရန်, ဤချဉ်းကပ်နည်းသည်ကြီးမားသောဖိုင်များပြုလုပ်ရန်လိုအပ်သည့်အခြေအနေများအတွက်အထူးသဖြင့်အချက်အလက်များ၏အစိတ်အပိုင်းများကိုလုပ်ဆောင်ရန်လိုအပ်သည့်အခါ,

 <span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'largefile.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span>) {
    </span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>)) {
        </span><span><span class="hljs-comment">// တစ်ခုချင်းစီကိုဖတ်ပါ 1MB အချက်များ</span></span><span>
        </span><span><span class="hljs-variable">$chunk</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">1048576</span></span><span>); </span><span><span class="hljs-comment">// 1MB = 1024 * 1024 bytes</span></span><span>
        </span><span><span class="hljs-comment">// 处理读取的အချက်များ块</span></span><span>
    }
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဖိုင်ကိုဖွင့ ်. မရပါ'</span></span><span>;
}
</span></span>

Fixed Beath chunks များကိုဖတ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ထည့်ခြင်းထက်မှတ်ဉာဏ်အသုံးပြုမှုနှင့်ဖိုင်အချက်အလက်များကိုအဆင့်ဆင့်လျှော့ချနိုင်သည်။

5 ။ ကျိုးကြောင်းဆီလျော်သောမှတ်ဉာဏ်ကန့်သတ်ချက်များချမှတ်ပါ

အကယ်. ဖိုင်သည်ကြီးမားပြီးသင် ဖိုင် () function ကိုသုံးရမည်ဆိုပါကအခြားနည်းလမ်းတစ်ခုသည် PHP ၏မှတ်ဉာဏ်ကန့်သတ်ချက်ကိုသင့်လျော်စွာတိုးမြှင့်ပေးရန်ဖြစ်သည်။ Memory_Limit setting ကို php.ini ဖိုင်တွင် memory_limit setting ကိုပြုပြင်ခြင်းသို့မဟုတ် dynamure oni_set () ကို code တွင်ပြုပြင်ခြင်းဖြင့်မှတ်ဉာဏ်အသုံးပြုမှုကန့်သတ်ချက်ကိုတိုးမြှင့်နိုင်သည်။

 <span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'memory_limit'</span></span><span>, </span><span><span class="hljs-string">'512M'</span></span><span>); </span><span><span class="hljs-comment">// အဖြစ်သတ်မှတ် 512MB</span></span><span>
</span></span>

မှတ်ဉာဏ်ကန့်သတ်ချက်များတိုးပွားလာသည်မှာမှတ်ဉာဏ်ပြည့်လျှံပြ problems နာများကိုဖြေရှင်းနိုင်သဖြင့်၎င်းသည်ဆာဗာမှတ်ဉာဏ်ကိုအလွန်အကျွံသောက်သုံးနိုင်သည့်အတွက်ရေရှည်ဖြေရှင်းချက်မဟုတ်ပါ။

6 ။ Splfilebopect အတန်းကိုသုံးပါ

PHP ၏ Splfileboject အတန်းသည်ဖိုင်များကိုဖတ်ရန်ထိရောက်သောနည်းလမ်းဖြစ်သည်။ ဖိုင် တစ်ခုလုံးကိုမှတ်ဉာဏ်အဖြစ်သို့ 0 င်ရောက်ခြင်းကိုရှောင်ရှားနေစဉ်ဖိုင်တွဲများကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်သောနည်းလမ်းဖြင့်ဖတ်ရန်ခွင့်ပြုသည့်အရာ ဝတ်ထု တစ်ခုဖြစ်ပြီးဖိုင်တစ်ခုလုံးကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်သောနည်းလမ်းတစ်ခုနှင့်မတူပါ။ Memory ကိုကယ်တင်ရန် Iterator မှတဆင့်ဖိုင်များကိုလိုင်းဖြင့်သင်ဖတ်ရှုနိုင်သည်။

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">SplFileObject</span></span><span>(</span><span><span class="hljs-string">'largefile.txt'</span></span><span>);
</span><span><span class="hljs-variable">$file</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setFlags</span></span><span>(</span><span><span class="hljs-title class_">SplFileObject</span></span><span>::</span><span><span class="hljs-variable constant_">READ_CSV</span></span><span>); </span><span><span class="hljs-comment">// ဖိုင်ဖတ်ခြင်းပုံစံကိုသင်သတ်မှတ်နိုင်သည်</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$file</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>) {
    </span><span><span class="hljs-comment">// တစ်ခုချင်းစီကိုလိုင်း process</span></span><span>
}
</span></span>

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

7 ။ အကျဉ်းချုပ်နှင့်အကောင်းဆုံးအလေ့အကျင့်

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

  1. အရာအားလုံးကိုတစ်ပြိုင်နက်တည်းတင်ခြင်းမှရှောင်ရှားရန် file line ကိုလိုင်းဖြင့်ဖတ်ရန် fopen () နှင့် fgets () ကို သုံးပါ။

  2. ဒေတာ၏အစိတ်အပိုင်းများကိုပြုပြင်ရန်အတွက်အထူးသဖြင့်သင့်တော်သောစာဖတ်ခြင်းအတွက် fseek () နှင့်) fseek () () ကို သုံးပါ။

  3. PHP အတွက် Memory ကန့်သတ်ချက်များတိုးလာသည်။

  4. Splfileobject Class ကိုအသုံးပြုပြီးဖိုင်များကိုဖတ်ရန်ပိုမိုပြောင်းလွယ်ပြင်လွယ်။ ထိရောက်သောနည်းလမ်းကိုပေးသည်။

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