PHP တွင် FTP ဖိုင်တင်ခြင်းကိုအကောင်အထည်ဖော်ရန် FSOCCKOPEN () function ကိုအသုံးပြုခြင်းလုပ်ငန်းစဉ်သည် FTP protocol ပေါ်တွင် manual operations နှင့်ပါ 0 င်သည်။ PHP သည် FTP upload လုပ်ငန်းစဉ်ကိုရိုးရှင်းစေရန် FTP_ * လုပ်ဆောင်ချက်များကိုထောက်ပံ့ပေးသော်လည်းတစ်ခါတစ်ရံတွင်သင်သည်အထူးလိုအပ်ချက်များနှင့်ကြုံတွေ့ရနိုင်သည် ။ FSOCCKOPEN () FSOCCKOPEN မှတဆင့် FTP ဖိုင်တင်ခြင်းကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုဤဆောင်းပါးကအသေးစိတ်ဖော်ပြထားသည်။
FTP (File Transfer Protocol) သည်ဖောက်သည်များနှင့်ဆာဗာများအကြားဖိုင်များကိုလွှဲပြောင်းရန်အသုံးပြုသောအများအားဖြင့်အသုံးပြုသော network protocol တစ်ခုဖြစ်သည်။ FSOCCKOPEN () function ကို အသုံးပြု. PHP ရှိ FTP server သို့ socket connection တစ်ခုဖွင့်နိုင်သည်။ ထို့ကြောင့် FTP server နှင့်အပြန်အလှန်ဆက်သွယ်ခြင်း, ဒေါင်းလုပ်,
ဆက်သွယ်မှုတစ်ခုတည်ဆောက်ပါ ပထမ ဦး စွာ FTP server သို့ဆက်သွယ်မှုကိုဖွင့်ရန် FSOCCKOPEN () ကို အသုံးပြုရန်လိုအပ်သည်။ ပုံမှန်အားဖြင့် FTP server ၏ပုံမှန် port သည် 21 ဖြစ်သည်။
<span><span><span class="hljs-variable">$ftp_server</span></span><span> = </span><span><span class="hljs-string">'ftp.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>;
</span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">'username'</span></span><span>;
</span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;
</span><span><span class="hljs-comment">// ဖန်တီးပါFTPဆာဗာဆက်သွယ်မှု</span></span><span>
</span><span><span class="hljs-variable">$ftp_socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fsockopen</span></span><span>(</span><span><span class="hljs-variable">$ftp_server</span></span><span>, </span><span><span class="hljs-variable">$ftp_port</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$ftp_socket</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTPဆက်သွယ်မှုမအောင်မြင်ပါ: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)");
}
</span></span> ဆာဗာတုံ့ပြန်မှုကိုလက်ခံပါ
ဆက်သွယ်မှုကိုထူထောင်သောအခါ FTP သည်များသောအားဖြင့်ကြိုဆိုသောသတင်းစကားကိုပို့သည်။ အောင်မြင်သောဆက်သွယ်မှုကိုသေချာစေရန်ဆာဗာ၏တုန့်ပြန်မှုကိုဖတ်ရန်နှင့်စစ်ဆေးရန်လိုအပ်သည်။
<span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'220'</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"ဆက်သွယ်မှုမအောင်မြင်ပါ: <span class="hljs-subst">$response</span></span></span><span>");
}
</span></span>အသုံးပြုသူအမည်နှင့်စကားဝှက်ကိုပေးပို့ပါ FTP protocol တွင်မူ 0 င်ရောက်ခြင်းလုပ်ငန်းစဉ်ကိုအသုံးပြုသူအမည် (အသုံးပြုသူ) နှင့်စကားဝှက် (pass) command များကိုပေးပို့ခြင်းဖြင့်ပြုလုပ်သည်။ ဤ command များကိုပို့ရန် FPATS () function ကိုသုံးနိုင်သည်။
<span><span><span class="hljs-comment">// Username ကိုပို့ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"USER <span class="hljs-subst">$ftp_user</span></span></span><span>\r\n");
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'331'</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"အသုံးပြုသူအမည်တွင်အမှား: <span class="hljs-subst">$response</span></span></span><span>");
}
</span><span><span class="hljs-comment">// စကားဝှက်ပို့ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"PASS <span class="hljs-subst">$ftp_pass</span></span></span><span>\r\n");
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'230'</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"စကားဝှက်: <span class="hljs-subst">$response</span></span></span><span>");
}
</span></span> passive mode ကိုသတ်မှတ်ပါ (optional)
အချို့သောကွန်ယက်ပတ် 0 န်းကျင်တွင် passive mode ကို အသုံးပြု. (PASV) ကိုအသုံးပြုခြင်းသည်ပိုမိုတည်ငြိမ်သည်။ Passive Mode သည် FTP ဆာဗာဘေးတွင်ဆိပ်ကမ်းအသစ်တစ်ခုကိုဖွင့်ပြီး client သည် data transmission အတွက်ဤ port ကိုဆက်သွယ်လိမ့်မည်။
<span><span><span class="hljs-comment">// passive mode ကိုရိုက်ထည့်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"PASV\r\n"</span></span><span>);
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'227'</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"passive mode ကိုရိုက်ထည့်ပါ失败: <span class="hljs-subst">$response</span></span></span><span>");
}
</span></span>ဆာဗာမှပြန်လာသောတုန့်ပြန်မှုသည်ဒေတာဆိပ်ကမ်းတစ်ခုနှင့်ပတ်သက်သောသတင်းအချက်အလက်များကိုပါ 0 င်မည်ဖြစ်ပြီးဒေတာဆိပ်ကမ်းကိုရယူရန်ဤတုံ့ပြန်မှုကိုဆန်းစစ်ရန်လိုအပ်သည်။
ဖိုင်ကိုတင်ပါ ဖိုင်တစ်ခုကိုတင်ရန်ဖိုင်၏ upload တည်နေရာကိုသတ်မှတ်ရန် သင်ခန်းစာ တစ်ခုပို့ရန်လိုအပ်ပြီးဖိုင်အကြောင်းအရာကိုဆာဗာပိတ်ပင်တားဆီးမှုသို့လွှဲပြောင်းပါ။
<span><span><span class="hljs-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">'local_file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">'remote_file.txt'</span></span><span>;
</span><span><span class="hljs-comment">// local file ကိုဖွင့်ပါ</span></span><span>
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$local_file</span></span><span>, </span><span><span class="hljs-string">'rb'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"无法local file ကိုဖွင့်ပါ: <span class="hljs-subst">$local_file</span></span></span><span>");
}
</span><span><span class="hljs-comment">// ပေးပို့ STOR command upload စတင်သည်</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"STOR <span class="hljs-subst">$remote_file</span></span></span><span>\r\n");
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'150'</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"တင်ရန်မအောင်မြင်ပါ: <span class="hljs-subst">$response</span></span></span><span>");
}
</span><span><span class="hljs-comment">// ဖိုင်တွဲများကိုပိတ်ပင်တားဆီးမှုဖြင့်တင်ပါ</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">$file</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">$file</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>ဆက်သွယ်မှုကိုပိတ်ပါ ဖိုင်ကိုတင်ပြီးနောက် FTP ဆက်သွယ်မှုကိုပိတ်ပါ။
<span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"QUIT\r\n"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>);
</span></span> အမှားကိုင်တွယ်
FTP protocol တွင် command များနှင့်တုံ့ပြန်မှုများစွာပါဝင်သည်။ ထို့ကြောင့်အမှားကိုင်တွယ်ခြင်းသည်အလွန်အရေးကြီးသည်။ FTP command တစ်ခုစီ၏တုန့်ပြန်မှုတစ်ခုစီ၏တုန့်ပြန်မှုသည်ဂဏန်း 220 , 230 , 331 စသဖြင့်စသည်တို့ပါ 0 င်သည်။ ဤ status codes တွေကိုစစ်ဆေးခြင်းအားဖြင့်စစ်ဆင်ရေးအောင်မြင်မှုရှိမရှိဆုံးဖြတ်နိုင်ပါသည်။
Passive Mode နှင့် Active Mode <br> <br> အချို့သောကွန်ယက်ပတ် 0 န်းကျင်တွင် passive mode ကိုအသုံးပြုခြင်းသည် NAT (Network address ပြန်ခြင်း) ကိရိယာများနှင့် firewalls များကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားနိုင်သည်။ ပုံမှန် mode သည်မသင့်တော်ပါက passive mode သို့ပြောင်းရန်သတိရပါ။
Binary နှင့် Ascii Mode <br> <br> ဖိုင်များကိုတင်သည့်အခါဖိုင်လွှဲပြောင်းမှုစနစ်၏မှန်ကန်သောချိန်ညှိချက်များကိုသေချာစေရန်လိုအပ်သည်။ binary files များအတွက် (ဓာတ်ပုံများ, ဗီဒီယိုများ, compressed file များစသဖြင့်), binary mode (i.e. အမျိုးအစား i ) ကိုအသုံးပြုသင့်သည်။ စာသားဖိုင်များအတွက် ASCII mode ကိုသုံးပါ (i.e. အမျိုးအစားက ) ကိုသုံးပါ။
buffer အရွယ်အစား <br> ဖိုင်တင်ခြင်းအတွင်း, စာဖတ်ခြင်းနှင့်ရေးသားခြင်းကိုစာဖတ်ခြင်းနှင့်ရေးသားခြင်းကိုရေးသည့်အခါ, အရူးအမူး () နှင့်အစက်အပြောက်များ ()) နှင့် အစက်အပြောက်များ () () သည် အချက်အလက်များအားအမြန်နှုန်းကိုအကျိုးသက်ရောက်လိမ့်မည်။
အရင်းအမြစ်ယိုစိမ့်မှုကိုကာကွယ် <br> <br> FSOCOPEN () မှတဆင့် socket connection တစ်ခုဖန်တီးခြင်းပြီးနောက်အရင်းအမြစ်ယိုစိမ့်မှုကိုရှောင်ရှားရန်တင်ပို့ပြီးနောက်ဆက်သွယ်မှုကိုပိတ်ရန်သတိရပါ။
FSOCCKOPEN မှတစ်ဆင့် FTP ဖိုင်တင်ခြင်းကိုအကောင်အထည်ဖော်ရန်အတွက်အဆင့်နိမ့်သော်လည်း developer များက developer များကဖိုင်လွှဲပြောင်းခြင်းကိုပိုမိုထိန်းချုပ်စေသည်။ FTP protocol ၏ခြေလှမ်းတစ်ခုစီကိုကိုယ်တိုင်ကိုယ်ကျအကောင်အထည်ဖော်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ရှုပ်ထွေးသောအခြေအနေများတွင်စိတ်ကြိုက်စစ်ဆင်ရေးများကိုပြုလုပ်နိုင်သည်။ သို့သော်၎င်းကိုအသုံးပြုသောအခါ upload လုပ်ငန်းစဉ်၏တိုးတက်မှုကိုသေချာစေရန် protocol, အမှားကိုင်တွယ်ခြင်း, ထုတ်လွှင့်ခြင်း, ပုံမှန်ဖိုင်တင်ခြင်းလိုအပ်ချက်များအတွက် PHP ၏ built-in ftp function ကို အသုံးပြု. လုပ်ဆောင်မှုများကိုလွယ်ကူစွာပြုလုပ်နိုင်သည်။ FSOCCKOPEN () fsocckopen () မှတစ်ဆင့်ပြုလုပ်သောလုပ်ငန်းများအတွက်သင့်လျော်သည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
FTP