2011-02-01 28 views
35

मैं कैसे जांच सकता हूं कि मैं अपने डीवी मशीन पर चल रहा है जो मेरी PHP स्क्रिप्ट से इंटरनेट से कनेक्ट है?इंटरनेट से कनेक्ट होने पर PHP स्क्रिप्ट में निर्धारित करें?

मैं wget का उपयोग कर फ़ाइलों का एक सेट डाउनलोड करने के लिए स्क्रिप्ट चलाता हूं (जो मौजूद हो सकता है या नहीं भी हो सकता है)। अगर मैं कनेक्ट किए बिना डाउनलोड करने का प्रयास करता हूं, तो अगली सोच में भाग निकलती है कि फाइल मौजूद नहीं है।

उत्तर

57
<?php 
function is_connected() 
{ 
    $connected = @fsockopen("www.example.com", 80); 
             //website, port (try 80 or 443) 
    if ($connected){ 
     $is_conn = true; //action when connected 
     fclose($connected); 
    }else{ 
     $is_conn = false; //action in connection failure 
    } 
    return $is_conn; 

} 
?> 
+2

+ अच्छा जवाब किसी और को लगता है कि '[80 | 443]' किसी भी बंदरगाह के बीच स्विच करेगा ... :) – Baba

+0

आप सही हैं @ बाबा ... :) –

+1

[इस] के आधार पर (https: // www .quora.com/डाउनटाइम/सबसे-विश्वसनीय-वेबसाइट-इन-टर्म-ऑफ-अपटाइम) पोस्ट, यह शायद example.com का उपयोग करने के लिए बहुत अधिक समझ में आएगा "www.some_domain.com "जवाब का। – nzn

0

http://www.weberdev.com/get_example-4025.html

गूगल पर उदाहरण के टोंस। हालांकि, अगर आप कनेक्शन डाउनलोड के दौरान खो दिया है, यह इस तरह ही आसान होने की उम्मीद नहीं है ..

0

आप किसी लोकप्रिय साइट करने के लिए या साइट पर आप www.google तरह से wgetting रहे हैं (करने के लिए पिंग सकता है। nl) फिर परिणाम देखने के लिए देखें कि क्या आप उससे कनेक्ट कर सकते हैं।

<?php 
$ip = '127.0.0.1'; //some ip 
exec("ping -n 4 $ip 2>&1", $output, $retval); 
if ($retval != 0) { 
echo "no!"; 
} 
else 
{ 
echo "yes!"; } 
?> 
+0

छोड़कर वास्तव में आईपी पते से ऐसा नहीं करते हैं। –

+0

और क्यों कुछ आईपी का उपयोग नहीं करते? वैसे भी कुछ डोमेन का उपयोग कर दृश्यों के पीछे क्या होता है। – killstreet

6

तुम हमेशा अच्छा पिंग कर सकते हैं 'भरोसेमंद गूगल राजभाषा:

$response = null; 
system("ping -c 1 google.com", $response); 
if($response == 0) 
{ 
    // this means you are connected 
} 
+5

यह काफी विश्वसनीय है, लेकिन ध्यान रखें कि "आईसीएमपी काम करता है! = टीसीपी काम करता है" (फ़ायरवॉल, एनएटी और व्हाट्नॉट के साथ क्या), और यहां तक ​​कि "टीसीपी काम करता है! = HTTP काम करता है" (पारदर्शी प्रॉक्सी आदि)। – Piskvor

1

विभिन्न कारकों है कि इंटरनेट कनेक्शन का निर्धारण कर रहे हैं। इंटरफेस राज्य, उदाहरण के लिए। लेकिन, उन लोगों के संबंध में, नेट की प्रकृति के कारण, उचित कॉन्फ़िगरेशन में कोई कामकाजी कनेक्शन नहीं होता है।

तो सबसे अच्छा तरीका यह है कि आप उस फ़ाइल को डाउनलोड करने का प्रयास करें जो आप निश्चित हैं। यदि आप सफल होते हैं, तो आप अगले चरणों का पालन कर सकते हैं। यदि नहीं, तो एक बार फिर से प्रयास करें और फिर असफल हो जाएं।

गंतव्य होस्ट में से किसी एक को चुनने का प्रयास करें। यदि यह संभव नहीं है, तो Google या याहू जैसी कुछ प्रमुख वेबसाइट चुनें।

अंत में, बस wget द्वारा दिए गए त्रुटि कोड की जांच करने का प्रयास करें। मैं शर्त लगाता हूं कि वे 404-एस और टाइमआउट के लिए अलग हैं। आप exec कॉल में तीसरे पैरामीटर का उपयोग कर सकते हैं:

string exec (string $command [, array &$output [, int &$return_var ]])

3

क्यों आप यह निर्धारित करने डाउनलोड सफल रहा था या नहीं, wget से वापसी कोड लाने नहीं है? संभावित मूल्यों की सूची wget exit status पर पाई जा सकती है।

दूसरी ओर, आप php के curl functions का भी उपयोग कर सकते हैं, तो आप PHP के भीतर से सभी त्रुटि ट्रैकिंग कर सकते हैं।

0

बस wget का परिणाम देखें। 4 का स्टेटस कोड नेटवर्क समस्या इंगित करता है, 8 का स्टेटस कोड सर्वर त्रुटि इंगित करता है (जैसे कि 404)। यह केवल तभी काम करता है जब आप प्रत्येक फाइल के लिए सभी फ़ाइलों के लिए अनुक्रम में प्रत्येक फ़ाइल के लिए wget को कॉल करते हैं।

आप wget को कॉल करने के बजाय, PHP के साथ libcurl का भी उपयोग कर सकते हैं। कुछ की तरह:

foreach (...) { 
    $c = curl_init($url); 
    $f = fopen($filepath, "w") 
    curl_setopt($c, CURLOPT_FILE, $f); 
    curl_setopt($c, CURLOPT_HEADER, 0); 
    if (curl_exec($c)) { 
     if (curl_getinfo($c, CURLINFO_HTTP_CODE) == 200) { 
      // success 
     } else { 
      // 404 or something, delete file 
      unlink($filepath); 
     } 
    } else { 
     // network error or server down 
     break; // abort 
    } 
    curl_close($c); 
} 
+0

http कोड के लिए निरंतर CURLINFO_HTTP_CODE है –

5

इस कोड को कोई आंतरिक सर्वर 500 त्रुटि के साथ laravel 4.2 php ढांचे में असफल रहा था:

<?php 
    function is_connected() 
    { 
     $connected = @fsockopen("www.some_domain.com", 80); 
     //website, port (try 80 or 443) 
     if ($connected){ 
      $is_conn = true; //action when connected 
      fclose($connected); 
     }else{ 
     $is_conn = false; //action in connection failure 
     } 
     return $is_conn; 
    } 
?> 

कौन सा मैं अपने आप को तनाव नहीं चाहता था कि यह पता लगाने के लिए है, इसलिए मैंने कोशिश की इस कोड और यह मेरे लिए काम किया:

function is_connected() 
{ 
    $connected = fopen("http://www.google.com:80/","r"); 
    if($connected) 
    { 
    return true; 
    } else { 
    return false; 
    } 

} 

कृपया ध्यान दें कि: यह धारणा है कि google.com का कनेक्शन कम विफलता की संभावना है पर आधारित है।

0

स्वीकृत उत्तर मेरे लिए काम नहीं करता था। जब इंटरनेट डिस्कनेक्ट हो गया तो यह एक PHP त्रुटि फेंक दिया। इसलिए मैं यह थोड़ा संशोधन जो नीचे है के साथ प्रयोग किया है:

if(!$sock = @fsockopen('www.google.com', 80)) 
{ 
    echo 'Not Connected'; 
} 
else 
{ 
echo 'Connected'; 
} 
0

इस समारोह को संभालती है कि तुम क्या जरूरत है

function isConnected() 
{ 
    // use 80 for http or 443 for https protocol 
    $connected = @fsockopen("www.example.com", 80); 
    if ($connected){ 
     fclose($connected); 
     return true; 
    } 
    return false; 
} 
संबंधित मुद्दे