[英]php exec doesn't work for ping on server
我正在嘗試使用exec函數對IP進行ping操作,以了解IP是否被ping通,它在localhost上可以正常工作並返回輸出數組,但是當我在服務器上運行它時,它將返回一個空的輸出數組。
當exec工作時,它返回一個數組為$ output,返回變量為$ return_var。
如果ping不成功,那么當IP無法ping時,它將返回:
數組:具有9個元素
return_var:1
如果IP ping通,它將返回:
數組:具有9個以上的元素
return_var:0
在服務器上,它返回:
空數組
return_var:2
當我搜索並發現return_var為2時,這意味着exec無法正常工作並且出現錯誤。
這是我的代碼:
<?php
exec('ping -n 4 '.$ip, $output, $return_var);
echo "<pre>";
var_dump($output);
?>
exec()未在服務器上禁用,我嘗試了以下操作:
<?php
$disabled = explode(',', ini_get('disable_functions'));
echo "<pre>";
var_dump($disabled);
?>
這是我得到的禁用功能列表:
array(8) {
[0]=>
string(7) "symlink"
[1]=>
string(10) "proc_close"
[2]=>
string(9) "proc_open"
[3]=>
string(5) "popen"
[4]=>
string(6) "system"
[5]=>
string(2) "dl"
[6]=>
string(8) "passthru"
[7]=>
string(14) "escapeshellcmd"
}
這些被阻塞的函數是否有可能導致exec()功能出現問題?
服務器上的安全模式也關閉,並且運行php版本5.3.29
我解決了這個問題,我以為所有服務器都在運行Windows,但是我的站點可以運行的服務器正在運行unix,而exec需要做一些改動:
在Windows上是:
exec('ping -n 4 '.$ip, $output, $return_var);
在Unix上,它是:
exec('ping -c 4 '.$ip, $output, $return_var);
但是新的問題是,它無法ping到實際上會被ping通但無法在cmd的ns_lookup中找到的ip。 這些IP中的一些會被ping通,而有些則不會。 在本地主機上工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.