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

FSOCCKOPEN function မှတဆင့် FTP ဖိုင်တင်ခြင်းကိုအကောင်အထည်ဖော်ရန်အသေးစိတ်နည်းလမ်းကဘာလဲ။ မည်သည့်သော့ချက်အချက်များကိုအာရုံစိုက်သင့်သနည်း။

gitbox 2025-08-25

PHP တွင် FTP ဖိုင်တင်ခြင်းကိုအကောင်အထည်ဖော်ရန် FSOCCKOPEN () function ကိုအသုံးပြုခြင်းလုပ်ငန်းစဉ်သည် FTP protocol ပေါ်တွင် manual operations နှင့်ပါ 0 င်သည်။ PHP သည် FTP upload လုပ်ငန်းစဉ်ကိုရိုးရှင်းစေရန် FTP_ * လုပ်ဆောင်ချက်များကိုထောက်ပံ့ပေးသော်လည်းတစ်ခါတစ်ရံတွင်သင်သည်အထူးလိုအပ်ချက်များနှင့်ကြုံတွေ့ရနိုင်သည် FSOCCKOPEN () FSOCCKOPEN မှတဆင့် FTP ဖိုင်တင်ခြင်းကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုဤဆောင်းပါးကအသေးစိတ်ဖော်ပြထားသည်။

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

FTP (File Transfer Protocol) သည်ဖောက်သည်များနှင့်ဆာဗာများအကြားဖိုင်များကိုလွှဲပြောင်းရန်အသုံးပြုသောအများအားဖြင့်အသုံးပြုသော network protocol တစ်ခုဖြစ်သည်။ FSOCCKOPEN () function ကို အသုံးပြု. PHP ရှိ FTP server သို့ socket connection တစ်ခုဖွင့်နိုင်သည်။ ထို့ကြောင့် FTP server နှင့်အပြန်အလှန်ဆက်သွယ်ခြင်း, ဒေါင်းလုပ်,

2 ။ fsocckopen မှတဆင့်ဖိုင်များကိုတင်ခြင်း၏အခြေခံဖြစ်စဉ်ကို ()

  1. ဆက်သွယ်မှုတစ်ခုတည်ဆောက်ပါ ပထမ ဦး စွာ 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>
  2. ဆာဗာတုံ့ပြန်မှုကိုလက်ခံပါ
    ဆက်သွယ်မှုကိုထူထောင်သောအခါ 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>
  3. အသုံးပြုသူအမည်နှင့်စကားဝှက်ကိုပေးပို့ပါ 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>
  4. 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 င်မည်ဖြစ်ပြီးဒေတာဆိပ်ကမ်းကိုရယူရန်ဤတုံ့ပြန်မှုကိုဆန်းစစ်ရန်လိုအပ်သည်။

  5. ဖိုင်ကိုတင်ပါ ဖိုင်တစ်ခုကိုတင်ရန်ဖိုင်၏ 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>
  6. ဆက်သွယ်မှုကိုပိတ်ပါ ဖိုင်ကိုတင်ပြီးနောက် 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>

3 ။ အဓိကအချက်များနှင့်ကြိုတင်ကာကွယ်မှုများ

  1. အမှားကိုင်တွယ်
    FTP protocol တွင် command များနှင့်တုံ့ပြန်မှုများစွာပါဝင်သည်။ ထို့ကြောင့်အမှားကိုင်တွယ်ခြင်းသည်အလွန်အရေးကြီးသည်။ FTP command တစ်ခုစီ၏တုန့်ပြန်မှုတစ်ခုစီ၏တုန့်ပြန်မှုသည်ဂဏန်း 220 , 230 , 331 စသဖြင့်စသည်တို့ပါ 0 င်သည်။ ဤ status codes တွေကိုစစ်ဆေးခြင်းအားဖြင့်စစ်ဆင်ရေးအောင်မြင်မှုရှိမရှိဆုံးဖြတ်နိုင်ပါသည်။

  2. Passive Mode နှင့် Active Mode <br> <br> အချို့သောကွန်ယက်ပတ် 0 န်းကျင်တွင် passive mode ကိုအသုံးပြုခြင်းသည် NAT (Network address ပြန်ခြင်း) ကိရိယာများနှင့် firewalls များကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားနိုင်သည်။ ပုံမှန် mode သည်မသင့်တော်ပါက passive mode သို့ပြောင်းရန်သတိရပါ။

  3. Binary နှင့် Ascii Mode <br> <br> ဖိုင်များကိုတင်သည့်အခါဖိုင်လွှဲပြောင်းမှုစနစ်၏မှန်ကန်သောချိန်ညှိချက်များကိုသေချာစေရန်လိုအပ်သည်။ binary files များအတွက် (ဓာတ်ပုံများ, ဗီဒီယိုများ, compressed file များစသဖြင့်), binary mode (i.e. အမျိုးအစား i ) ကိုအသုံးပြုသင့်သည်။ စာသားဖိုင်များအတွက် ASCII mode ကိုသုံးပါ (i.e. အမျိုးအစားက ) ကိုသုံးပါ။

  4. buffer အရွယ်အစား <br> ဖိုင်တင်ခြင်းအတွင်း, စာဖတ်ခြင်းနှင့်ရေးသားခြင်းကိုစာဖတ်ခြင်းနှင့်ရေးသားခြင်းကိုရေးသည့်အခါ, အရူးအမူး () နှင့်အစက်အပြောက်များ ()) နှင့် အစက်အပြောက်များ () () သည် အချက်အလက်များအားအမြန်နှုန်းကိုအကျိုးသက်ရောက်လိမ့်မည်။

  5. အရင်းအမြစ်ယိုစိမ့်မှုကိုကာကွယ် <br> <br> FSOCOPEN () မှတဆင့် socket connection တစ်ခုဖန်တီးခြင်းပြီးနောက်အရင်းအမြစ်ယိုစိမ့်မှုကိုရှောင်ရှားရန်တင်ပို့ပြီးနောက်ဆက်သွယ်မှုကိုပိတ်ရန်သတိရပါ။

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

FSOCCKOPEN မှတစ်ဆင့် FTP ဖိုင်တင်ခြင်းကိုအကောင်အထည်ဖော်ရန်အတွက်အဆင့်နိမ့်သော်လည်း developer များက developer များကဖိုင်လွှဲပြောင်းခြင်းကိုပိုမိုထိန်းချုပ်စေသည်။ FTP protocol ၏ခြေလှမ်းတစ်ခုစီကိုကိုယ်တိုင်ကိုယ်ကျအကောင်အထည်ဖော်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ရှုပ်ထွေးသောအခြေအနေများတွင်စိတ်ကြိုက်စစ်ဆင်ရေးများကိုပြုလုပ်နိုင်သည်။ သို့သော်၎င်းကိုအသုံးပြုသောအခါ upload လုပ်ငန်းစဉ်၏တိုးတက်မှုကိုသေချာစေရန် protocol, အမှားကိုင်တွယ်ခြင်း, ထုတ်လွှင့်ခြင်း, ပုံမှန်ဖိုင်တင်ခြင်းလိုအပ်ချက်များအတွက် PHP ၏ built-in ftp function ကို အသုံးပြု. လုပ်ဆောင်မှုများကိုလွယ်ကူစွာပြုလုပ်နိုင်သည်။ FSOCCKOPEN () fsocckopen () မှတစ်ဆင့်ပြုလုပ်သောလုပ်ငန်းများအတွက်သင့်လျော်သည်။

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

    FTP