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

Socket_Accept ကို အသုံးပြု. ရိုးရိုး FTP ကဲ့သို့သော FTP ကဲ့သို့သောဖိုင်လွှဲပြောင်းခြင်း 0 န်ဆောင်မှုကိုမည်သို့တည်ဆောက်ရမည်နည်း။

M66 2025-05-23

PHP, Socket_Accept () တွင် server-side Socket ဆက်သွယ်ရေးကိုအကောင်အထည်ဖော်ရန်အဓိကလုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းမှတစ်ဆင့် client မှ စတင်. client မှ စတင်. အချက်အလက်များကိုထပ်မံထုတ်လွှင့်ပြီးလက်ခံနိုင်သည်။ ဤဆောင်းပါးတွင် Basic File Upload ကိုမည်သို့အကောင်အထည်ဖော်နိုင်မည်ကို အခြေခံ. Native PHP ၏ Socke ၏ societ extension ကို အခြေခံ. ရိုးရိုး FTP ကဲ့သို့သောဖိုင်လွှဲပြောင်းခြင်းဝန်ဆောင်မှုကိုတည်ဆောက်မည်။

1 ။ ပြင်ဆင်မှု

ပထမ ဦး စွာ PHP တွင် Socket extension ကိုဖွင့်ထားကြောင်းသေချာပါစေ။ PHPP.ini တွင်အောက်ပါ configuration ရှိမရှိစစ်ဆေးပါ။

 extension=sockets

ဖိုင်များကိုဖတ်နိုင်ပြီးရေးဆွဲနိုင်သောလမ်းညွှန်တစ်ခုလည်းလိုအပ်သည့် PHP scripts များကိုလုပ်ဆောင်နိုင်သည့်လမ်းညွှန်တစ်ခုကိုလည်းလိုအပ်သည်။

2 ။ ဆာဗာကုဒ်နံပါတ်

ဆာဗာ၏တာ 0 န် 0 တ္တရားများတွင်ဆိပ်ကမ်းကိုနားထောင်ခြင်း, ဆက်သွယ်မှုများကိုလက်ခံခြင်း, connections များကိုလက်ခံခြင်း, ဤတွင်အခြေခံအကောင်အထည်ဖော်မှုဖြစ်သည်။

 <?php

$host = '0.0.0.0';
$port = 2121; // တူသောFTPစိတ်ကြိုက် ports များ
$saveDir = __DIR__ . '/uploads';

if (!is_dir($saveDir)) {
    mkdir($saveDir, 0777, true);
}

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

echo "FTP-like server started on $host:$port\n";

while (true) {
    $client = socket_accept($socket);
    if ($client === false) continue;

    socket_write($client, "220 m66.net FTP Service Ready\r\n");

    $command = trim(socket_read($client, 1024));

    if (preg_match('/^UPLOAD (\S+)$/', $command, $matches)) {
        $filename = basename($matches[1]);
        $filepath = $saveDir . '/' . $filename;

        socket_write($client, "150 Opening binary mode data connection.\r\n");

        $file = fopen($filepath, 'w');
        while ($data = socket_read($client, 2048)) {
            fwrite($file, $data);
            if (feof($file)) break;
        }
        fclose($file);
        socket_write($client, "226 Transfer complete.\r\n");
    }

    elseif (preg_match('/^DOWNLOAD (\S+)$/', $command, $matches)) {
        $filename = basename($matches[1]);
        $filepath = $saveDir . '/' . $filename;

        if (!file_exists($filepath)) {
            socket_write($client, "550 File not found.\r\n");
        } else {
            socket_write($client, "150 Opening binary mode data connection.\r\n");
            $file = fopen($filepath, 'r');
            while (!feof($file)) {
                $buffer = fread($file, 2048);
                socket_write($client, $buffer);
            }
            fclose($file);
            socket_write($client, "226 Transfer complete.\r\n");
        }
    }

    else {
        socket_write($client, "500 Unknown command.\r\n");
    }

    socket_close($client);
}

3 ။ client ကို simulation

Telnet / Netcat ကိုစမ်းသပ်ရန်သုံးနိုင်သည်။

 <?php

$host = 'm66.net';
$port = 2121;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, $port);

$response = socket_read($socket, 1024);
echo $response;

$filename = 'test.txt';
$data = file_get_contents($filename);
$command = "UPLOAD $filename\r\n";

socket_write($socket, $command);
usleep(100000); // အနည်းငယ်နှောင့်နှေး
socket_write($socket, $data);

$response = socket_read($socket, 1024);
echo $response;

socket_close($socket);

4 ။ လုံခြုံမှုနှင့်တိုးတက်မှုအကြံပြုချက်များ

  1. ခွင့်ပြုချက်ထိန်းချုပ်မှု - အမှန်တကယ်ဖြန့်ကျက်နေစဉ်အတွင်းတရားမဝင်ဝင်ရောက်ခွင့်ကိုကာကွယ်ရန်စစ်မှန်ကြောင်းအတည်ပြုယန္တရားလိုအပ်သည်။

  2. Multithreading / Concurrency - PCNTL_Fork () ကိုသုံးပါသို့မဟုတ်စွမ်းဆောင်ရည်တိုးတက်စေရန် SWOOLE ကိုသုံးပါ။

  3. ဖိုင်အတည်ပြုခြင်း - MD5 Verification Code မှတဆင့်ဖိုင်သမာဓိကိုသေချာပါစေ။

  4. စာဝှက်ထားတဲ့ဂီယာ - TLS / SSL မှတဆင့်လုံခြုံစိတ်ချရသောဆက်သွယ်ရေး။

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

ဤဆောင်းပါးသည် Socket_Accept () နှင့်ပေါင်းစပ်ထားသော PHP ဇာတိ socket programming method များမှတဆင့်ရိုးရှင်းသော FTP ကဲ့သို့သော FTP ကဲ့သို့သောဖိုင်လွှဲပြောင်းခြင်း 0 န်ဆောင်မှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုပြသသည်။ ဤနည်းလမ်းသည် Socket ဆက်သွယ်ရေး၏အခြေခံနိယာမများကိုလေ့လာရန်သင့်တော်သည်။ ပိုကြီးတဲ့စီမံကိန်းတွေအတွက် FTP / SFTP ဆာဗာများသို့မဟုတ် webdav 0 န်ဆောင်မှုများကဲ့သို့သောရင့်ကျက်သောဖြေရှင်းနည်းများကိုအကြံပြုပါသည်။