I'm writing a PHP script to be used to check for network connections with Linux shell command ping
calling it with PHP's exec()
:
<?php // Bad IP domain for testing. $domain_bad = "lksjdflksjdf.com"; $ip_address = $domain_bad; exec("ping -c 1 $domain_bad", $output, $return_var); var_dump($return_var); echo "return_var is: $return_var" . "\n"; var_dump($output); exit; ?>
I'm not getting the output for the error message from ping in $output
which is what I'm expecting:
$ php try.php ping: unknown host lksjdflksjdf.com int(2) return_var is: 2 array(0) { }
If the domain is a good domain, such as yahoo.com, then $output
has the output from ping in an array. But if it's an error such as 'ping: unknown host lksjdflksjdf.com'
it doesn't get returned to the $output
array.
Why is this happening and is there a better method to do this?
The exec() function is an inbuilt function in PHP which is used to execute an external program and returns the last line of the output. It also returns NULL if no command run properly.
php phpinfo(); ?> You can search for disable_functions and if exec is listed it means it is disabled. To enable it just remove the exec from the line and then you need to restart Apache and you will be good to go. If exec is not listed in the disable_functions line it means that it is enabled.
If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.
You should redirect stderr to stdout.
To do that, change your exec() call like this:
exec("ping -c 1 $domain_bad 2>&1", $output, $return_var);
More info about 2>&1
meaning here.
If the answer above could not solve your problem, maybe exec()
is disabled. You can try to check php.ini
file at disable_functions
line.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With