2011-11-06 21 views
13

गूंज मैं निम्नलिखित समारोह है कि मैं अब तक काम नहीं करता है। मैं एक आईपी पता पिंग करना चाहता हूं और फिर गूंजना चाहता हूं कि आईपी जिंदा है या नहीं।एक आईपी पता पिंग PHP का उपयोग और परिणाम

function pingAddress($ip){ 
    $pingresult = shell_exec("start /b ping $ip -n 1"); 
    $dead = "Request timed out."; 
    $deadoralive = strpos($dead, $pingresult); 

    if ($deadoralive == false){ 
     echo "The IP address, $ip, is dead"; 
    } else { 
     echo "The IP address, $ip, is alive"; 
    } 

} 

जब मैं इस समारोह उदाहरण का उपयोग फोन:

pingAddress("127.0.0.1") 

गूंज परिणाम हमेशा 'मृत' है - कोई बात नहीं क्या।

कोई मेरी मदद कृपया मैं कहाँ गलत जा रहा हूँ सकता है? और/या एक ही परिणाम के साथ ऐसा करने का एक बेहतर तरीका है?

बहुत धन्यवाद।

अद्यतन: डबल कोट्स, लेकिन अभी भी एक ही (गलत) परिणाम प्राप्त होने के शामिल करने के लिए कोड में संशोधन किया है।

+2

आप को 'अन्यथा shell_exec'' $ ip' बदला नहीं जाएगा अपने कॉल के लिए दोहरे उद्धरण चिह्नों का उपयोग करने की जरूरत है। – Clive

+0

हाय क्लाइव, धन्यवाद - मैंने अब डबल कोट्स का उपयोग किया है लेकिन फिर भी वही परिणाम प्राप्त कर रहे हैं। – Bernard

उत्तर

15

नोट: नीचे समाधान विंडोज पर काम नहीं करता। पर linux कार्यकारी एक "जो पिंग" कंसोल से आदेश है, और (सुझाव कार्यकारी कॉल का) सेट आदेश पथ तदनुसार

मुझे लगता है कि आप आदेश के निकास की स्थिति की जांच करना चाहते हैं, जबकि shell_exec आप पूर्ण निर्गम (देता है खतरनाक हो सकता है कमांड संस्करण से संस्करण में आउटपुट परिवर्तन कमांड होगा। किसी कारण से)। इसके अलावा आपके परिवर्तनीय $ आईपी को एकल उद्धरणों के भीतर व्याख्या नहीं किया गया है। आपको डबल "" का उपयोग करना होगा। यह एकमात्र चीज हो सकती है जिसे आपको इसे काम करने के लिए ठीक करने की आवश्यकता है।

लेकिन मुझे लगता है निम्नलिखित कोड अधिक "पोर्टेबल" हो सकता है। आईएमएचओ परिणाम स्ट्रिंग को पार्स करने की कोशिश करने के बजाए बाहर निकलने की स्थिति को पकड़ना बेहतर है। IMHO पिंग कमांड के लिए पूर्ण पथ निर्दिष्ट करना भी बेहतर है।

<?php 
function pingAddress($ip) { 
    $pingresult = exec("/bin/ping -n 3 $ip", $outcome, $status); 
    if (0 == $status) { 
     $status = "alive"; 
    } else { 
     $status = "dead"; 
    } 
    echo "The IP address, $ip, is ".$status; 
} 

pingAddress("127.0.0.1"); 
+0

HI maraspin, इस फ़ंक्शन का उपयोग ठीक से ऊपर करने का प्रयास किया है, लेकिन यह कहेंगे कि 999.9 99.9 99.9 99 भी जीवित है जब मैं कोशिश करता हूं - क्या कुछ और गलत हो सकता है? क्या आप किसी समस्या निवारण युक्तियों का सुझाव दे सकते हैं? – Bernard

+4

** 1) ** 'पिंग', अधिकांश यूनिक्स कमांड लाइन उपयोगिताओं की तरह, सफलता पर 0 लौटाता है, नहीं 1. ** 2) ** ओपी विंडोज का उपयोग कर रहा है, इसलिए '/ bin/ping' काम नहीं करेगा । – duskwuff

+1

हटाने/बिन/और 0 से 1 को बदलना काम करता है - धन्यवाद। – Bernard

5

यह वर्डप्रेस में मेरे लिए भी काम नहीं करता था। मैंने कोशिश की - और और अन्य तरीकों से, लेकिन काम नहीं किया। मैंने इस्तेमाल किया,

function pingAddress($ip) { 
    $pingresult = exec("/bin/ping -c2 -w2 $ip", $outcome, $status); 
    if ($status==0) { 
    $status = "alive"; 
    } else { 
    $status = "dead"; 
    } 
    $message .= '<div id="dialog-block-left">'; 
    $message .= '<div id="ip-status">The IP address, '.$ip.', is '.$status.'</div><div style="clear:both"></div>';  
    return $message; 
} 
// Some IP Address 
pingAddress("192.168.1.1"); 

यह अंत में मेरे लिए पूरी तरह से काम करता है। मैं http://www.phpscriptsdaily.com/php/php-ping/ आशा से संदर्भित किया जाता इस में मदद मिलेगी

खैर मैं के रूप में यह मेरी स्थानीय होस्ट पर लेकिन मेरे लाइव सर्वर लाइव सर्वर के लिए पर नहीं ठीक काम कर रहा है इस संशोधित करना चाहते हैं, मैं एक और बात जो अब दोनों को स्थानीय के लिए काम करता मिल गया साथ ही साथ रहते हैं।

$fp = fSockOpen($ip,80,$errno,$errstr,1); 
if($fp) { $status=0; fclose($fp); } else { $status=1; } 

तब मैं दिखाने के सर्वर 0 के लिए निर्भर है और के लिए 1.

नीचे यह मेरे लिए पूरी तरह से काम करता है। मैं से Ping site and return result in PHP धन्यवाद यह मिल गया @ karim79

0

इस होस्टनाम के साथ ठीक काम करता है, आईपी (आंतरिक नेटवर्क के लिए) और आईपी रिवर्स।

function pingAddress($ip) { 
    $ping = exec("ping -n 2 $ip", $output, $status); 
    if (strpos($output[2], 'unreachable') !== FALSE) { 
     return '<span style="color:#f00;">OFFLINE</span>'; 
    } else { 
     return '<span style="color:green;">ONLINE</span>'; 
    } 
} 

echo pingAddress($ip); 
+0

कभी भी 'exec' में उपयोगकर्ता इनपुट का उपयोग न करें। उपयोगकर्ता इनपुट डेटा को स्वच्छ करने के सही तरीके के लिए [यह प्रश्न] देखें (http://stackoverflow.com/q/982904/2008285)। – Linek

+0

ये, सच है। मेरे कोड में मेरे पास $ _get के आसपास एक sanitize फ़ंक्शन है, लेकिन इस सवाल के लिए थोड़े प्रासंगिक नहीं हैं, इसलिए मैंने इसे हटा दिया। संपादित करें: $ _get पैरामीटर को साफ़ करने के लिए हटा दिया गया। – ChristianG

0

यह मेरे लिए ठीक काम करता है ..

$host="127.0.0.1"; 
$output=shell_exec('ping -n 1 '.$host); 

echo "<pre>$output</pre>"; //for viewing the ping result, if not need it just remove it 

if (strpos($output, 'out') !== false) { 
    echo "Dead"; 
} 
    elseif(strpos($output, 'expired') !== false) 
{ 
    echo "Network Error"; 
} 
    elseif(strpos($output, 'data') !== false) 
{ 
    echo "Alive"; 
} 
else 
{ 
    echo "Unknown Error"; 
} 
1

विंडोज इस्तेमाल के लिए इस वर्ग के

$host = 'www.example.com'; 
$ping = new Ping($host); 
$latency = $ping->ping(); 
if ($latency !== false) { 
print 'Latency is ' . $latency . ' ms'; 
} 
else { 
print 'Host could not be reached.'; 
} 

https://github.com/geerlingguy/Ping

0

मैं इस समारोह का उपयोग करें:

<?php 
function is_ping_address($ip) { 
    exec('ping -c1 -w1 '.$ip, $outcome, $status); 
    preg_match('/([0-9]+)% packet loss/', $outcome[3], $arr); 
    return ($arr[1] == 100) ? false : true; 
} 
0

इनमें से कुछ प्रयास करने से पहले अपने पिंग कमांड का आदमी पृष्ठों की जाँच करें उदाहरण बाहर (हमेशा वैसे भी अच्छा अभ्यास)। उबंटू 16 के लिए (उदाहरण के लिए) स्वीकृत उत्तर -n 3 विफल नहीं होता है (यह अब पैकेट की गिनती नहीं है, -n आईपी पते को होस्टनाम में परिवर्तित नहीं करने का संकेत देता है)।

ओपी के अनुरोध के बाद, एक संभावित विकल्प समारोह के रूप में किया जाएगा इस प्रकार है:

function checkPing($ip){ 
    $ping = trim(`which ping`); 
    $ll = exec($ping . '-n -c2 ' . $ip, $output, $retVar); 
    if($retVar == 0){ 
     echo "The IP address, $ip, is alive"; 
     return true; 
    } else { 
     echo "The IP address, $ip, is dead"; 
     return false; 
    } 
}