phpseclib 3 သည် ၎င်း၏ SSH/SFTP constructor က hostname ကို လက်ခံမည့်နေရာတွင် ဖွင့်ထားသော stream resource ကို လက်ခံသည်။ ၎င်းသည် proxy မှတစ်ဆင့် သယ်ဆောင်နေပြီဖြစ်သော ချိတ်ဆက်မှုအတွက် အများသုံး လွှဲပြောင်းရေးနေရာ ဖြစ်သည်။

ပထမဦးစွာ connector သည် အမှန်တကယ် SFTP ဆာဗာနှင့် ၎င်း၏ port သို့ HTTP CONNECT သို့မဟုတ် SOCKS tunnel ကို တည်ဆောက်သည်။ ထို့နောက် တည်ဆောက်ပြီးသော stream ကို SFTP သို့ ပေးပို့ပါ။

use phpseclib3\Net\SFTP;

$sftp = new SFTP($tunnel);

$actualHostKey = $sftp->getServerPublicHostKey();
if ($actualHostKey === false
    || !hash_equals($expectedHostKey, $actualHostKey)) {
    throw new RuntimeException('Unexpected SFTP server key');
}

if (!$sftp->login($sftpUser, $sftpCredential)) {
    throw new RuntimeException('SFTP login failed');
}

$tunnel သည် ချိတ်ဆက်ပြီးသား stream ဖြစ်ပြီး proxy URL မဟုတ်ပါ။ $expectedHostKey သည် ဆာဗာ၏ ယုံကြည်ရသော အများသုံးသော့ string ဖြစ်ပြီး application ၏ ပြင်ဆင်မှုလုပ်ငန်းစဉ်မှ ရရှိသည်၊ phpseclib ပြန်ပေးသော format အတိုင်း ဖြစ်သည်။ လော့ဂ်အင်အထောက်အထားသည် ပံ့ပိုးထားသော စကားဝှက် သို့မဟုတ် application ရွေးချယ်သော တင်ထားသော သော့အရာဝတ္ထု ဖြစ်နိုင်သည်။

connector က ဘာပြန်ပေးသည်ကို သတ်မှတ်ပါ

stream သည် SFTP ဆာဗာသို့ ရောက်နေရမည်။ HTTP CONNECT အတွက် ဆိုလိုသည်မှာ proxy က ဦးတည်ရာကို လက်ခံပြီး proxy တုံ့ပြန်မှု ခေါင်းစီးအားလုံးကို သုံးပြီးဖြစ်သည် ဟု ဆိုလိုသည်။ SOCKS အတွက် သက်ဆိုင်ရာ ညှိနှိုင်းမှု အောင်မြင်စွာ ပြီးစီးရမည်။ ထိုနယ်နိမိတ်ကို ကျော်လွန်၍ ဖတ်ပြီးသား SSH byte များသည် SSH အကောင်အထည်ဖော်မှုအတွက် ရရှိနိုင်နေရမည်။

ထိုအချိန်တွင် phpseclib သည် SSH ဖလှယ်မှုကို ပြုလုပ်ပြီး တူညီသော stream ပေါ်တွင် SFTP ကို စတင်သည်။ application သည် ၎င်း၏ ပုံမှန် SFTP လုပ်ဆောင်ချက်များကို အသုံးပြုနိုင်သည်။ constructor interface သည် အတွင်းပိုင်း socket အကွက်များကို အစားထိုးရန် တာဝန်ရှိသော application ခွဲအတန်းကို ရှောင်ရှားသည်။

ဆက်စပ်ဆောင်းပါးများ