PHP, Socket_Accept () တွင် server-side Socket ဆက်သွယ်ရေးကိုအကောင်အထည်ဖော်ရန်အဓိကလုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းမှတစ်ဆင့် client မှ စတင်. client မှ စတင်. အချက်အလက်များကိုထပ်မံထုတ်လွှင့်ပြီးလက်ခံနိုင်သည်။ ဤဆောင်းပါးတွင် Basic File Upload ကိုမည်သို့အကောင်အထည်ဖော်နိုင်မည်ကို အခြေခံ. Native PHP ၏ Socke ၏ societ extension ကို အခြေခံ. ရိုးရိုး FTP ကဲ့သို့သောဖိုင်လွှဲပြောင်းခြင်းဝန်ဆောင်မှုကိုတည်ဆောက်မည်။
ပထမ ဦး စွာ PHP တွင် Socket extension ကိုဖွင့်ထားကြောင်းသေချာပါစေ။ PHPP.ini တွင်အောက်ပါ configuration ရှိမရှိစစ်ဆေးပါ။
extension=sockets
ဖိုင်များကိုဖတ်နိုင်ပြီးရေးဆွဲနိုင်သောလမ်းညွှန်တစ်ခုလည်းလိုအပ်သည့် PHP scripts များကိုလုပ်ဆောင်နိုင်သည့်လမ်းညွှန်တစ်ခုကိုလည်းလိုအပ်သည်။
ဆာဗာ၏တာ 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);
}
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);
ခွင့်ပြုချက်ထိန်းချုပ်မှု - အမှန်တကယ်ဖြန့်ကျက်နေစဉ်အတွင်းတရားမဝင်ဝင်ရောက်ခွင့်ကိုကာကွယ်ရန်စစ်မှန်ကြောင်းအတည်ပြုယန္တရားလိုအပ်သည်။
Multithreading / Concurrency - PCNTL_Fork () ကိုသုံးပါသို့မဟုတ်စွမ်းဆောင်ရည်တိုးတက်စေရန် SWOOLE ကိုသုံးပါ။
ဖိုင်အတည်ပြုခြင်း - MD5 Verification Code မှတဆင့်ဖိုင်သမာဓိကိုသေချာပါစေ။
စာဝှက်ထားတဲ့ဂီယာ - TLS / SSL မှတဆင့်လုံခြုံစိတ်ချရသောဆက်သွယ်ရေး။
ဤဆောင်းပါးသည် Socket_Accept () နှင့်ပေါင်းစပ်ထားသော PHP ဇာတိ socket programming method များမှတဆင့်ရိုးရှင်းသော FTP ကဲ့သို့သော FTP ကဲ့သို့သောဖိုင်လွှဲပြောင်းခြင်း 0 န်ဆောင်မှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုပြသသည်။ ဤနည်းလမ်းသည် Socket ဆက်သွယ်ရေး၏အခြေခံနိယာမများကိုလေ့လာရန်သင့်တော်သည်။ ပိုကြီးတဲ့စီမံကိန်းတွေအတွက် FTP / SFTP ဆာဗာများသို့မဟုတ် webdav 0 န်ဆောင်မှုများကဲ့သို့သောရင့်ကျက်သောဖြေရှင်းနည်းများကိုအကြံပြုပါသည်။