72

我正在编写一个 PHP 脚本,用于使用 Linux shell 命令检查网络连接,ping使用 PHP 调用它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;
?>

我没有得到来自 ping 的错误消息的输出,$output这是我所期望的:

$ php try.php
ping: unknown host lksjdflksjdf.com
int(2)
return_var is: 2
array(0) {
}

如果该域是一个好的域,例如 yahoo.com,则将$outputping 的输出放在一个数组中。但是如果它是一个错误,例如'ping: unknown host lksjdflksjdf.com'它不会返回到$output数组中。

为什么会发生这种情况,是否有更好的方法来做到这一点?

4

2 回答 2

142

您应该将标准错误重定向到标准输出。

为此,请像这样更改您的 exec() 调用:

exec("ping -c 1 $domain_bad 2>&1", $output, $return_var);

有关此处2>&1含义的更多信息。

于 2013-05-21T08:12:58.490 回答
10

如果上述答案无法解决您的问题,则可能exec()已禁用。您可以尝试在线检查php.ini文件disable_functions

于 2017-03-07T06:30:57.773 回答