Виконайте команди Ping та отримайте структуровані дані у PHP

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 22 липня, 2025
У світі веб-розробки важливо мати надійні інструменти для діагностики мережі. У нашій статті ми розглянемо, як пакет spatie/ping для PHP спрощує виконання команд ping та надає структуровані дані, які можуть допомогти вам у моніторингу доступності серверів. Чи готові дізнатися, як цей пакет може змінити ваш підхід до мережевої діагностики? Читайте далі

PHP-пакет spatie/ping дозволяє просто виконувати команди ping за протоколом ICMP та обробляти результати у структурованому вигляді. Ping допомагає визначити, чи доступний віддалений хост, що забезпечує мережеву діагностику та вимірювання затримки.

Спеціалісти Spatie створили пакет ping для PHP, щоб спростити виконання команд ping та отримання структурованих даних:

Під час розробки цієї функції я шукав надійні PHP-пакети для виконання ping в Unix та повернення структурованих результатів, а також для відкриття TCP-з’єднання. Оскільки таких пакетів не було, я вирішив написати їх сам.

Яким чином працює цей пакет?

Перед тим як ознайомитися з PHP-пакетом, розгляньмо команду з параметрами за замовчуванням. Вона відправляє один пакет і встановлює таймаут у 5 секунд:

$ ping -c 1 -W 5000 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=251 time=24.049 ms
  
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 24.049/24.049/24.049/nan ms

З документації ви дізнаєтеся, що можете використовувати клас Ping (з налаштовуваними параметрами) для виконання команди ping. Результат міститиме корисну інформацію у структурованому вигляді:

use Spatie\Ping\Ping;
  
$result = (new Ping('8.8.8.8'))->run();
  
// Основний статус
echo $result->isSuccess() ? 'Успіх' : 'Не вдалося';
echo $result->hasError() ? "Помилка: {$result->error()->value}" : 'Помилок немає';
  
// Статистика пакетів
echo "Передано пакетів: {$result->packetsTransmitted()}";
echo "Отримано пакетів: {$result->packetsReceived()}";
echo "Втрата пакетів: {$result->packetLossPercentage()}%";
  
// Інформація про затримку
echo "Мінімальний час: {$result->minimumTimeInMs()}ms";
echo "Максимальний час: {$result->maximumTimeInMs()}ms";
echo "Середній час: {$result->averageTimeInMs()}ms";
echo "Середнє квадратичне відхилення: {$result->standardDeviationTimeInMs()}ms";

Також ви можете отримати окремі рядки ping:

// Окремі рядки ping
foreach ($result->lines() as $line) {
    echo "Відповідь: {$line->getRawLine()} ({$line->getTimeInMs()}ms)";
}

🧑‍💻 Розпочати роботу з цим пакетом можна на GitHub: spatie/ping