【问题标题】:PHP: Why isn't exec() returning output?PHP:为什么 exec() 不返回输出?
【发布时间】:2013-05-15 22:15:17
【问题描述】:

我正在编写一个 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;
?>

我没有从$output 中 ping 得到错误消息的输出,这正是我所期待的:

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

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

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

【问题讨论】:

    标签: php exec ping


    【解决方案1】:

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

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

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

    有关2&gt;&amp;1 的更多信息意味着here

    【讨论】:

    • add 2>&1 但输出仍然是数组空,如果从 cmd 执行,它输出2个值
    【解决方案2】:

    如果上面的答案不能解决你的问题,可能exec() 被禁用了。您可以尝试在disable_functions 行检查php.ini 文件。

    【讨论】:

    • 好提示。应该是 disable_functions 而不是 disabled_functions
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2011-08-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多