0

我有这个小脚本,它应该 ping$hosts_to_ping阵列中的 IP。该 PHP 在 index.html 中使用 JavaScript 调用。

但是有些问题,因为$rval始终为 1(这意味着主机无法访问)。但我知道前两个宿主还活着。

所以我打印了$res变量,我看到了消息:Need to give the IP. 我不明白为什么它不将$host变量替换为函数中的实际 IP 地址。

<?php
  function ping($host) {
  exec(sprintf('ping -n 4', escapeshellarg($host)), $res, $rval);
    print_r($res);
    return $rval === 0;
  }

  $hosts_to_ping = array('10.54.23.254', '10.22.23.254', '10.23.66.134');
?>

<ul>
<?php foreach ($hosts_to_ping as $host): ?>
  <li>
  <?php echo $host; ?>
  <?php $up = ping($host); ?>

    (<img src="<?php echo $up ? 'on' : 'off'; ?>"
          alt="<?php echo $up ? 'up' : 'down'; ?>">)
  </li>
<?php endforeach; ?>
</ul>
4

2 回答 2

1

那是因为您没有替换 sprintf 中的任何内容。它可能应该看起来像这样才能使其工作:exec(sprintf('ping -n 4 %s', escapeshellarg($host)), $res, $rval);

于 2010-05-21T07:31:07.380 回答
1

在这一行:

  exec(sprintf('ping -n 4', escapeshellarg($host)), $res, $rval);

sprintf不会escapeshellarg($host)在字符串中插入,因为您错过了%s。将该行替换为:

  exec(sprintf('ping -n 4 %s', escapeshellarg($host)), $res, $rval);

试试这个,看看它是否有效。

于 2010-05-21T07:31:59.520 回答