Можно ли в одном PHP-приложении использовать несколько сетевых протоколов одновременно?

«Можно ли в одном PHP-приложении использовать несколько сетевых протоколов одновременно?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, PHP-приложение может работать с несколькими сетевыми протоколами одновременно, используя соответствующие расширения или функции.

Примеры:

  1. Использование cURL для HTTP/HTTPS и FTP:

    $ch = curl_init();
    // Запрос по HTTPS
    curl_setopt($ch, CURLOPT_URL, "https://api.example.com/data");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $apiResponse = curl_exec($ch);
    
    // Загрузка файла по FTP
    curl_setopt($ch, CURLOPT_URL, "ftp://files.example.com/archive.zip");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $fileContent = curl_exec($ch);
    curl_close($ch);
  2. Использование потоков (streams) для разных протоколов:

    // Чтение файла по HTTP
    $webContent = file_get_contents('http://example.com', false, stream_context_create(['http' => ['timeout' => 5]]));
    
    // Запись файла по FTP
    $ftpStream = fopen('ftp://user:pass@ftp.example.com/upload.txt', 'w');
    fwrite($ftpStream, 'Данные для загрузки');
    fclose($ftpStream);
  3. Работа с WebSocket (используя сторонние библиотеки, например, Ratchet) и HTTP в одном приложении:

    // Часть приложения обрабатывает обычные HTTP-запросы (через Symfony, Laravel и т.д.)
    // Другая часть запускает WebSocket-сервер для реального времени

Важно: Убедитесь, что необходимые расширения PHP (curl, openssl для HTTPS) установлены и включены. Для работы с "сырыми" сокетами можно использовать функции socket_* или stream_socket_*.