У меня есть онлайн-функция, которая должна подключаться к самому быстрому серверу из нескольких сайтов в массиве на PHP.
Вот как далеко я добрался. Я использовал Fopen, чтобы проверить, работает ли веб-сайт, и перенаправить на него foreach. Я подумал, что самый быстрый сервер перенаправит первым, но вместо этого он просто перенаправил последний элемент в массиве в URL.
Вот как далеко я добрался:
// The URLs to check in an Array.
$urls = ['website1.com', 'website2.com', 'website3.com'];
// Get the fastest server (the fastest server should redirect first)
foreach($urls as $proxy) {
if ($socket = @ fsockopen($proxy, 80, $errno, $errstr, 30)) {
header('Location: https://'.$proxy.'');
fclose($socket);
} else {}
}
echo 'Connecting to the fastest server...';
Заранее спасибо. Я с нетерпением жду ваших ответов 🙂
Похоже, что Php не предоставляет опцию, похожую на функцию обратного вызова, для получения асинхронного успешного или неудачного соединения на сокете.
Во всяком случае, там есть отличные библиотеки для Php. Я также заинтересован в этой функции для Php.
Вы можете установить с композитор следующая библиотека https://github.com/reactphp/socket
кажется довольно простым в использовании.
Найдите его слегка адаптированным к вашему случаю:
$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop);
$urls = ['website1.com', 'website2.com', 'website3.com'];
foreach($urls as $proxy) {
$socket = new React\Socket\Server($proxy, $loop);
$socket->on('connection', function (ConnectionInterface $conn) {
header('Location: https://'.$proxy.'');
$conn->close();
});
});
$loop->run();
Удачи!
Других решений пока нет …