2009-08-06 11 views
23

में पिंग साइट और रिटर्न परिणाम मैं एक छोटी आईएफ प्रक्रिया बनाना चाहता हूं जो जांच करेगा कि ट्विटर उपलब्ध है या नहीं, (उदाहरण के लिए, उदाहरण के लिए), और सही या गलत वापस आ जाएगा।पीएच साइट

मदद :)

+2

, आपको किसी http अनुरोध करना नहीं कर सकते ? – palindrom

उत्तर

34
function urlExists($url=NULL) 
{ 
    if($url == NULL) return false; 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 
    if($httpcode>=200 && $httpcode<300){ 
     return true; 
    } else { 
     return false; 
    } 
} 

यह है कि URL मौजूद है, इसकी जांच करने पर this post से पकड़ा गया था। चूंकि ट्विटर को रखरखाव में 300 से ऊपर एक त्रुटि संदेश प्रदान करना चाहिए, या 404, यह पूरी तरह से काम करना चाहिए।

+0

यदि आपको एसएसएल की आवश्यकता है तो इस पोस्ट को https: // stackoverflow पर एक नज़र डालें।कॉम/प्रश्न/4372710/php-curl-https – eballo

19

यहाँ एक है:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786

एक और:

function ping($host, $port, $timeout) { 
    $tB = microtime(true); 
    $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); 
    if (!$fP) { return "down"; } 
    $tA = microtime(true); 
    return round((($tA - $tB) * 1000), 0)." ms"; 
} 

//Echoing it will display the ping if the host is up, if not it'll say "down". 
echo ping("www.google.com", 80, 10); 
+8

कि कोई अच्छा रिटर्न वैल्यू नहीं है। विफलता पर 0/झूठी/शून्य क्यों नहीं लौटें और सफलता पर मिलीसेकंड का प्रतिनिधित्व करने वाला एक पूर्णांक? –

+2

@ फिलिपेप Gerber - क्योंकि मैंने इसे नहीं लिखा था, लेकिन वे अच्छे सुझाव हैं। – karim79

+4

पिंग आईसीएमपी प्रोटोकॉल पर काम कर रहा है, ऐसी कोई चीज नहीं है जैसे 'पोर्ट'। आप 0 खुले टीसीपी बंदरगाहों के साथ एक मेजबान पिंग कर सकते हैं। – deejayy

5

ping लगभग हर ओएस पर उपलब्ध है। तो आप एक सिस्टम कॉल कर सकते हैं और परिणाम प्राप्त कर सकते हैं।

8

shell_exec का उपयोग करना:

<?php 
$output = shell_exec('ping -c1 google.com'); 
echo "<pre>$output</pre>"; 
?> 
+4

आपको 'पिंग-सी 1 होस्ट' या लिनक्स पर कुछ उपयोग करना चाहिए। सादा 'पिंग होस्ट' वहां वापस नहीं आएगा। – Michas

+0

बेहतर अभी तक: 'if (0! = ($ _result = \' ping -q -c1 google.com>/dev/null 2> &1 ; echo $? \ ')) { गूंज 'विफल'। } ' – lucifurious

6

एक अन्य विकल्प (आप की जरूरत/के बजाय पिंग एक HTTP अनुरोध भेजना चाहते हैं) Ping class for PHP है। मैंने इसे केवल इस उद्देश्य के लिए लिखा है, और यह आपको सर्वर को पिंग करने के लिए तीन समर्थित तरीकों में से एक का उपयोग करने देता है (कुछ सर्वर/वातावरण केवल तीन विधियों में से एक का समर्थन करते हैं)।

उदाहरण उपयोग:

require_once('Ping/Ping.php'); 
$host = 'www.example.com'; 
$ping = new Ping($host); 
$latency = $ping->ping(); 
if ($latency) { 
    print 'Latency is ' . $latency . ' ms'; 
} 
else { 
    print 'Host could not be reached.'; 
} 
0
निम्नलिखित समारोह तुम सिर्फ socket_create का उपयोग कर शुद्ध ICMP पैकेट भेजने रहे हैं

। मुझे निम्नलिखित कोड a user note से मिला है। N.B. आपको रूट के रूप में निम्न को चलाना होगा।

हालांकि आप इसे एक मानक वेब पेज में नहीं डाल सकते हैं, आप इसे क्रॉन नौकरी के रूप में चला सकते हैं और परिणामों के साथ डेटाबेस को पॉप्युलेट कर सकते हैं।

तो यदि आपको साइट पर नजर रखने की आवश्यकता है तो यह सबसे उपयुक्त है।

function twitterIsUp() { 
    return ping('twitter.com'); 
} 

function ping ($host, $timeout = 1) { 
    /* ICMP ping packet with a pre-calculated checksum */ 
    $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; 
    $socket = socket_create(AF_INET, SOCK_RAW, 1); 
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); 
    socket_connect($socket, $host, null); 

    $ts = microtime(true); 
    socket_send($socket, $package, strLen($package), 0); 
    if (socket_read($socket, 255)) {  
     $result = microtime(true) - $ts; 
    } else { 
     $result = false; 
    } 
    socket_close($socket); 

    return $result; 
} 
0

इस php कोड मैं प्रयोग किया जाता है, जबाब इस तरह आम तौर पर है:

 
    2 packets transmitted, 2 received, 0% packet loss, time 1089ms 

तो मैं इस तरह कोड का इस्तेमाल किया:

 

    $ping_how_many = 2; 
    $ping_result = shell_exec('ping -c '.$ping_how_many.' bing.com'); 
    if(!preg_match('/'.$ping_how_many.' received/',$ping_result)){ 
     echo 'Bad ping result'. PHP_EOL; 
     // goto next1; 
    } 


पिंग के बजाय
+0

इससे 'पिंग: आईसीएमपी खुली सॉकेट हो सकती है: अनुमति अस्वीकृत'। इसे हल करने के लिए, SELinux अनुमोदित होना चाहिए –