2010-05-21 5 views
0

$hosts_to_ping 배열의 IP를 ping해야하는이 작은 스크립트가 있습니다. 이 PHP는 index.html에서 JavaScript로 호출됩니다.PHP 함수의 오류

$rval이 항상 1 (호스트에 도달 할 수 없음)이기 때문에 뭔가 잘못되었습니다. 그러나 나는 처음 두 주인이 살아 있다는 것을 압니다.

그래서 $res 변수를 인쇄하고 메시지 : Need to give the IP이 표시됩니다. 함수의 실제 IP 주소에 $host 변수가 대체되지 않는 이유를 모르겠습니다.

<?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> 

답변

1

을이 라인에서 : 당신이 퍼센트의을 놓친 때문에

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

sprintf

문자열에 escapeshellarg($host)을 보간하지 않습니다. 그 라인을 다음으로 대체하십시오 :

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

시도해보고 작동하는지 확인하십시오.

+0

예 .. 고마워요! – Holian

+0

당신을 환영합니다 :-) –

1

sprintf에서 아무 것도 교체하지 않았기 때문입니다. 그것은 아마 작동하도록 다음과 같아야합니다 exec(sprintf('ping -n 4 %s', escapeshellarg($host)), $res, $rval);

+0

그래, 그게 – Thariama

+0

예. 고맙습니다! – Holian