လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> set_local_infile_handler function မှတဆင့် local file တင်သွင်းမှုကိုဘယ်လိုအကောင်အထည်ဖော်မလဲ။ အသေးစိတ်နည်းလမ်းခွဲခြမ်းစိတ်ဖြာ

set_local_infile_handler function မှတဆင့် local file တင်သွင်းမှုကိုဘယ်လိုအကောင်အထည်ဖော်မလဲ။ အသေးစိတ်နည်းလမ်းခွဲခြမ်းစိတ်ဖြာ

gitbox 2025-09-30

PHP တွင်သင်သည်ဒေသဖိုင်တစ်ခုမှဒေတာများကို MySQL ဒေတာဘေ့စ်သို့တင်သွင်းရန်လိုအပ်ပါကများသောအားဖြင့်သင်သည်ပုံမှန်အားဖြင့် load data local infile statement ကိုအသုံးပြုလေ့ရှိသည်။ သို့သော်လုံခြုံရေးအကြောင်းပြချက်များကြောင့်အချို့သောပတ်ဝန်းကျင်တွင်ဤအင်္ဂါရပ်ကိုပိတ်ထားနိုင်သည်။ MySQLI :: set_local_infile_handler မှတဆင့် local files များဖတ်ရှုခြင်း၏အပြုအမူကို PHP သည်အခြားရွေးချယ်စရာတစ်ခုပေးသည်။ ၎င်းသည်လုံခြုံရေးကိုမြှင့်တင်ရုံသာမက developer များကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ပေးသည်။

MySQL ၏ဒေသတင်သွင်းမှုကိုအကောင်အထည်ဖော်ရန် set_local_infile_handler () function ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါမည်။

1 ။ အခြေခံသဘောတရားများ

MySQLI :: set_local_infile_handler () PHP တွင် MySQLI extension မှပေးသောနည်းလမ်းဖြစ်သည်။ ဒေတာဒေသခံတိကျသော 0 န် ဆောင်မှုပေးသည့်အခါဒေသဆိုင်ရာဖိုင်ပါသောအချက်အလက်များကိုအသုံးပြုသူသတ်မှတ်ထားသော callback function မှတဆင့်၎င်းကိုဖတ်ရှုရန်အသုံးပြုသည်။

အခြေခံ syntax:

 <span><span>mysqli::</span><span><span class="hljs-variable constant_">set_local_infile_handler</span></span><span> ( </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$read_func</span></span><span> ) : </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>

$ Read_Func သည်အချက်အလက်များကိုစာဖတ်ခြင်းနှင့်ထုတ်လွှင့်ခြင်းကိုကိုင်တွယ်သောအသုံးပြုသူသတ်မှတ်ထားသော function ကိုဖြစ်သည်။

2 ။ local_infile ပံ့ပိုးမှုဖွင့်ပါ

၎င်းကိုအသုံးမပြုမီ, အောက်ပါတို့ကိုမှန်ကန်စွာ configure လုပ်ရန်သေချာစေရန်လိုအပ်သည်။

  1. MySQL server-side တွင် local_infile တွင်ပါ 0 င်သည်။

     <span><span><span class="hljs-keyword">SHOW</span></span><span> VARIABLES </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'local_infile'</span></span><span>;
    </span></span>

    အကယ်. ပိတ်ထားပါ က၎င်းကို server configuration file ထဲ၌၎င်းကို server configuration file ထဲတွင်သတ်မှတ်ရန်လိုအပ်သည်

     <span><span><span class="hljs-section">[mysqld]</span></span><span>
    </span><span><span class="hljs-attr">local_infile</span></span><span>=</span><span><span class="hljs-number">1</span></span><span>
    </span></span>
  2. MySQLI.allow_local_infile ကို PHP Configuration တွင်ဖွင့်ထားသည်။
    Php.ini တွင်အောက်ပါပါ 0 င်သည်ကိုစစ်ဆေးပါ။

     <span><span><span class="hljs-attr">mysqli.allow_local_infile</span></span><span> = </span><span><span class="hljs-literal">On</span></span><span>
    </span></span>
  3. ဒေတာဘေ့စ်ကိုချိတ်ဆက်သောအခါ MySQLI_CLITID_Local_Files option ကိုထည့်ပါ။

     <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_init</span></span><span>();
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">options</span></span><span>(MYSQLI_OPT_LOCAL_INFILE, </span><span><span class="hljs-literal">true</span></span><span>);
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">real_connect</span></span><span>(</span><span><span class="hljs-string">"host"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, MYSQLI_CLIENT_LOCAL_FILES);
    </span></span>

3 ။ စိတ်ကြိုက်ဖတ်ရန် function ကိုဖန်တီးပါ

ဤလုပ်ဆောင်မှု၏လုပ်ဆောင်ချက်သည် local file content ကို MySQL သို့ကြားခံဖြင့်ပေးရန်ဖြစ်သည်။ CSV ဖိုင်ကိုဖတ်ရှုခြင်းဥပမာတစ်ခုမှာဤတွင်ဖြစ်သည်။

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">localInfileReader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$stream</span></span></span><span>, &amp;</span><span><span class="hljs-variable">$buffer</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>)
{
    </span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;

    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
        </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'/path/to/data.csv'</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">$fp</span></span><span>) {
            </span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
        }
    }

    </span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
    }

    </span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>;

    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>)) {
        </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
        </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span></span>

4 ။ ပြီးပြည့်စုံသောဥပမာ

Set_local_infile_Handler ကို မည်သို့အသုံးပြုရမည်ကိုပြသသည့်ဥပမာပြည့်စုံသောဥပမာတစ်ခုဖြစ်သည်။

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_init</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">options</span></span><span>(MYSQLI_OPT_LOCAL_INFILE, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">real_connect</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'test_db'</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, MYSQLI_CLIENT_LOCAL_FILES)) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'Connect Error ('</span></span><span> . </span><span><span class="hljs-title function_ invoke__">mysqli_connect_errno</span></span><span>() . </span><span><span class="hljs-string">') '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">mysqli_connect_error</span></span><span>());
}

</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">localInfileReader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$stream</span></span></span><span>, &amp;</span><span><span class="hljs-variable">$buffer</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>)
{
    </span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;

    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
        </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'/path/to/data.csv'</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">$fp</span></span><span>) {
            </span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
        }
    }

    </span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
    }

    </span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>;

    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>)) {
        </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
        </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}

</span><span><span class="hljs-comment">// ဖတ်ပါပရိုဆက်ဆာကို set up</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">set_local_infile_handler</span></span><span>(</span><span><span class="hljs-string">"localInfileReader"</span></span><span>);

</span><span><span class="hljs-comment">// သွင်းကုန်ကြေညာချက်ကို execute</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"LOAD DATA LOCAL INFILE 'dummy.csv' INTO TABLE my_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n'"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"သွင်းကုန်မအောင်မြင်ပါ: ("</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;errno . </span><span><span class="hljs-string">") "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
} </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><span class="hljs-comment">// Processor ကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">set_local_infile_default</span></span><span>();

</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

ဥပမာ -

  • Dummy.csv သည် placeholder file name တစ်ခုဖြစ်ပြီး MySQL သည်လမ်းကြောင်းကိုအမှန်တကယ်မဖတ်ပါ, သို့သော်သင်ပေးသည့် callback function ကိုမူတည်သည်။

  • Callback function အတွင်းရှိတကယ့်ဖိုင်လမ်းကြောင်းသည်တရားဝင်ဖတ်နိုင်သောလမ်းကြောင်းဖြစ်နိုင်သည်။

5 ။ မှတ်စုဖို့အရာ

  1. callback function ကိုစဉ်ဆက်မပြတ်ဖတ်ရှုနိုင်ပြီးဒေတာအရှည်ကိုမှန်ကန်စွာပြန်ပို့နိုင်ရမည်။

  2. နောက်ဆက်တွဲစစ်ဆင်ရေးအတွက်အမှားအစပျိုးခြင်းကိုရှောင်ရှားရန် callback ( set_local_infile_default () ) ကိုပိတ်ရန်သေချာပါစေ။

  3. ကျေးဇူးပြု. ဒေတာဘေ့စ်အသုံးပြုသူသည် ဝန်အချက်အလက်ဒေသတွင်း မသုံးရမီလုံလောက်သောခွင့်ပြုချက်ရှိကြောင်းသေချာအောင်လုပ်ပါ။

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

set_local_infile_handler () နည်းလမ်းဖြင့် PHP သည် load data local infile အတွက် PHP သည်ပိုမိုလုံခြုံသောနှင့်ထိန်းချုပ်နိုင်သောအထောက်အပံ့နည်းလမ်းကိုပေးသည်။ ဤနည်းလမ်းသည်ဒေတာထည့်သွင်းရန်အတွက်တင်းကြပ်စွာစစ်ဆေးရန်လိုအပ်ချက်ရှိသည့်အခြေအနေများအတွက်အထူးသင့်တော်သည်။ ၎င်းသည်အလွန်အမင်းရှုပ်ထွေးသော်လည်း၎င်းသည်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင် developer များကိုတန်ဖိုးရှိသောပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လုံခြုံမှုရှိစေသည်။

ဤနည်းစနစ်ကိုကျွမ်းကျင်ခြင်းသည်သင်၏အကြီးစားဒေတာသွင်းကုန်လုပ်ငန်းများကိုကိုင်တွယ်ရန်သင့်အားအစွမ်းထက်သောကိရိယာများကိုထည့်သွင်းပေးလိမ့်မည်။

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    MySQL