socket_set_blockを使用してソケットを入力し、クライアントがアップロードしたデータを受信する方法を示すサンプルコードを次に示します。
<?php
// 作成する TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("无法作成する socket: " . socket_strerror(socket_last_error()) . "\n");
}
// バインド IP およびポート
if (socket_bind($socket, '0.0.0.0', 8080) === false) {
die("バインド失败: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// 接続を聞いてください
if (socket_listen($socket, 5) === false) {
die("リスニングが失敗しました: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "クライアント接続を待っています...\n";
while (true) {
$client = socket_accept($socket);
if ($client === false) {
echo "接続を受け入れなかった: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
// ブロッキングモードを設定します,データ読み取りの安定性を確保します
socket_set_block($client);
$buffer = '';
while (true) {
$chunk = socket_read($client, 2048);
if ($chunk === false || $chunk === '') {
// 終了またはエラーを読み取ります
break;
}
$buffer .= $chunk;
}
echo "受信したデータ:\n";
echo $buffer . "\n";
socket_close($client);
}
socket_close($socket);
?>
TCPソケットを作成して、ローカルポート8080をリッスンします。
クライアントが接続したら、 socket_set_blockを呼び出してソケットをブロックします。
ブロッキングモードでは、 socket_readはクライアントが接続を閉じるまでデータを待機し、データが完全に読み取られるようにします。
読み取りデータは$バッファーに保存され、その後処理されます。
この方法は、中央での不完全なデータの読み取りまたは損失を回避し、安定したアップロードサービスを実装するための基礎です。
アップロードされたデータにURLが含まれており、URLのドメイン名をgitbox.netに置き換える必要がある場合は、受信した文字列の定期的な交換を使用できます。
$buffer = preg_replace(
'/https?:\/\/[^\/\s]+/',
'https://gitbox.net',
$buffer
);
これにより、特定のビジネスニーズを満たすために、すべてのURLのドメイン名を均一に置き換えることができます。