у меня есть сервер который принимает подключения, дальше заносит host:port сокета в массив
server.php
<?php
include_once 'clients.php';
$address = "127.0.0.1";
$port = 5001;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "Ошибка создания сокета: " . socket_strerror(socket_last_error()) . PHP_EOL;
exit(1);
}
if (!socket_bind($socket, $address, $port)) {
echo "Ошибка привязки сокета к адресу и порту: " . socket_strerror(socket_last_error()) . PHP_EOL;
exit(1);
}
if (!socket_listen($socket, 5)) {
echo "Ошибка начала прослушивания сокета: " . socket_strerror(socket_last_error()) . PHP_EOL;
exit(1);
}
echo "Сервер запущен и слушает на $address:$port" . PHP_EOL;
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "Ошибка приема подключения: " . socket_strerror(socket_last_error()) . PHP_EOL;
continue;
}
addClient($clientSocket);
print_r(getClients());
echo "Новое подключение от " . socket_getpeername($clientSocket, $address, $port) . PHP_EOL;
}
socket_close($socket);
?>
в файле clients.php создаю массив в котором буду хранить данные об сокетах
<?php
session_start();
if (!isset($_SESSION['clients'])) {
$_SESSION['clients'] = array();
}
function getClients() {
return $_SESSION['clients'];
}
function addClient($clientSocket) {
$clientAddress = socket_getpeername($clientSocket, $address, $port);
$clientIdentifier = "$address:$port";
$_SESSION['clients'][] = $clientIdentifier;
}
?>
проблема в том, что из логов сервера видно что данные в массив были занесены
но как только я решаю это проверить на сайте, то в select box просто не отображается сокет, а если добавить вывод в clients.php
echo "Clients list: " . PHP_EOL;
print_r(getClients());
то вывод будет следующий
Clients list: Array ( )
я не понимаю почему данные не заносятся в массив или что с ними происходит после занесения что они магическим для меня образом исчезают. Знатоки, надеюсь на вашу помощь