Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: Why isn't exec() returning output?

Tags:

php

exec

ping

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?

like image 458
Edward Avatar asked May 21 '13 08:05

Edward


People also ask

What does Exec return in PHP?

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.

How do I know if PHP exec is enabled?

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.

Does PHP exec wait until finished?

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.


2 Answers

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.

like image 59
Hariprasad Avatar answered Nov 07 '22 19:11

Hariprasad


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.

like image 21
Phạm Tuấn Anh Avatar answered Nov 07 '22 19:11

Phạm Tuấn Anh