Asked  7 Months ago    Answers:  5   Viewed   37 times

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?

 Answers

35

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.

Wednesday, March 31, 2021
 
zIs
answered 7 Months ago
zIs
14

Add 2>&1 to the end of your command to redirect errors from stderr to stdout. This should make it clear what's going wrong.

Wednesday, March 31, 2021
 
Palladium
answered 7 Months ago
12

First of all, what is the version of PHP?

If other .php scripts work except for phpMyAdmin, the is pretty safe to assume something is wrong with phpMyAdmin installation. (either with the files or the Virtual Host)


Troubleshoot:

  1. Can you run another script in phpMyAdmin directory? Try with a file containing phpinfo(); If it does not work then the problem is in your apache configuration.

  2. If the above is true, then the parser is not recognising phpMyAdmin/index.php as a php file, for some reason. Try reinstalling phpMyAdmin.


Thoughts:

Remove AddType application/x-httpd-php .php. You should not need it.

In PHP 5.4 magic_quotes_gpc was removed. If you're running PHP5, remove that line.

As of PHP 4.0.3, track_vars is always turned on, so remove it also.

As of PHP 4.2.0, register_globals this directive defaults to off. In PHP5.3 register_globals is deprecated, as of PHP5.4 register_globals was removed. SO if running PHP > 4.2.0 remove that line.

Saturday, May 29, 2021
 
vuliad
answered 5 Months ago
29

You can implement your own test runner, for example by extending PHPUnit_TextUI_TestRunner and make it collect and print run times.

Friday, September 24, 2021
 
Stuart Blackler
answered 1 Month ago
71

Depends on the OS you are using.

For linux:

pclose(popen("php somefile.php &","r"));

notice the amperstand at the end (very important).

For windows:

pclose(popen("start php.exe somefile.php","r"));

here the start keyword is important.

Hope this helps.

Tuesday, October 12, 2021
 
user308827
answered 2 Weeks ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :