News

Execute Ping Commands and Get Back Structured Data in PHP

Published
Execute Ping Commands and Get Back Structured Data in PHP image

The spatie/ping PHP package provides a simple way to execute Internet Control Message Protocol (ICMP) ping commands and parse the results into structured data. Ping can help determine if a remote host is reachable, providing network diagnostics and measuring latency.

Spatie built the ping package for PHP to create a developer-friendly way to run ping commands and get structured data back:

While developing the feature, I was looking for good PHP packages to actually perform a unix ping and get structured results back, and to open a TCP connection. There weren't any that could do this in a simple and developer friendly way, so I decided to code them up myself.

How does this package look?

Before seeing the PHP package, here's the command that runs with the default options. It sends one packet and sets a timeout for 5 seconds:

$ 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

From the README, you can use the Ping class (with configurable options) to run the ping command, and the result contains useful information in a structured way:

use Spatie\Ping\Ping;
 
$result = (new Ping('8.8.8.8'))->run();
 
// Basic status
echo $result->isSuccess() ? 'Success' : 'Failed';
echo $result->hasError() ? "Error: {$result->error()?->value}" : 'No errors';
 
// Packet statistics
echo "Packets transmitted: {$result->packetsTransmitted()}";
echo "Packets received: {$result->packetsReceived()}";
echo "Packet loss: {$result->packetLossPercentage()}%";
 
// Timing information
echo "Min time: {$result->minimumTimeInMs()}ms";
echo "Max time: {$result->maximumTimeInMs()}ms";
echo "Average time: {$result->averageTimeInMs()}ms";
echo "Standard deviation: {$result->standardDeviationTimeInMs()}ms";

You can also get back individual ping lines:

// Individual ping lines
foreach ($result->lines() as $line) {
echo "Response: {$line->getRawLine()} ({$line->getTimeInMs()}ms)";
}

🧑‍💻 You can get started with this package on GitHub: spatie/ping

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Filed in

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article