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