2010-08-21 28 views
6

मैं एक वेबसाइट/वेबपृष्ठ मौजूद है या नहीं, यह जांचने के लिए एक फॉर्म को सत्यापित करने में सक्षम होना चाहता हूं। अगर यह 404 त्रुटि देता है तो निश्चित रूप से सत्यापित नहीं होना चाहिए। यदि कोई रीडायरेक्ट है ... मैं सुझावों के लिए खुला हूं, कभी-कभी रीडायरेक्ट एक त्रुटि पृष्ठ या मुखपृष्ठ पर जाते हैं, कभी-कभी वे उस पृष्ठ पर जाते हैं जिसे आप ढूंढ रहे थे, इसलिए मुझे नहीं पता। शायद एक रीडायरेक्ट के लिए एक विशेष नोटिस हो सकता है जो उपयोगकर्ता को गंतव्य पता सुझाता है।यह जांचने के लिए कि कोई वेबपृष्ठ मौजूद है या नहीं। jQuery और/या PHP

सबसे अच्छी बात मैंने पाया अब तक इस तरह था:

$.ajax({url: webpage ,type:'HEAD',error:function(){ 
    alert('No go.'); 
}}); 

404 और 200 के, लेकिन यह सिर्फ लटकी हुई है अगर आप यूआरएल के लिए 'http://xyz' की तरह कुछ करने के साथ कोई समस्या नहीं है यही कारण है कि। इसके अलावा 302 और त्रुटि त्रुटि हैंडलर भी ट्रिगर।

यह एक सामान्य पर्याप्त प्रश्न है, यदि कोई व्यक्ति एक कर सकता है तो मैं एक पूर्ण कार्य कोड उदाहरण चाहता हूं। यह बहुत से लोगों के उपयोग के लिए आसान हो सकता है।

+0

मैं इसे भी जानना चाहता हूं। – esqew

+0

अस्तित्व में, आपका मतलब है और चल रहा है, या सिर्फ डोमेन। –

+0

क्या आप इंटरैक्शन को फिर से डिज़ाइन कर सकते हैं ताकि यूआरएल को इसके लिए इंतजार किए बिना सर्वरसाइड सत्यापित किया जा सके? – SargeATM

उत्तर

3

ऐसा लगता है कि आपको वेब पेज की सामग्री की परवाह नहीं है, आप बस देखना चाहते हैं कि यह मौजूद है या नहीं। यहां बताया गया है कि मैं इसे PHP में कैसे करूं - मैं PHP को पृष्ठ की सामग्री के साथ मेमोरी लेने से रोक सकता हूं।

/* 
* Returns false if the page could not be retrieved (ie., no 2xx or 3xx HTTP 
* status code). On success, if $includeContents = false (default), then we 
* return true - if it's true, then we return file_get_contents()'s result (a 
* string of page content). 
*/ 
function getURL($url, $includeContents = false) 
{ 
    if($includeContents) 
    return @file_get_contents($url); 

    return (@file_get_contents($url, null, null, 0, 0) !== false); 
} 

कम verbosity के लिए, उपरोक्त फ़ंक्शन की सामग्री को इसके साथ प्रतिस्थापित करें।

return ($includeContents) ? 
       @file_get_contents($url) : 
       (@file_get_contents($url, null, null, 0, 0) !== false) 
; 

कैसे एक धारा संदर्भ का उपयोग कर HTTP हेडर निर्दिष्ट करने के लिए पर जानकारी के लिए http://www.php.net/file_get_contents देखें।

चीयर्स।

+0

यह शानदार रूप से सरल है और यह काम करता है। शायद बहुत आसान है क्योंकि वांछित अगर अलग कोड को संभालने का कोई तरीका नहीं है। लेकिन शायद मेरी वर्तमान जरूरतों के लिए काम करता है। – Moss

+0

आपकी टिप्पणी बहुत सराहना की है। :-) यदि आप HTTP कोड पर स्विच करना चाहते हैं, तो आपको या तो curl या सॉकेट जैसे तंत्र का उपयोग करना होगा। सॉकेट अच्छे होते हैं क्योंकि वे किसी अन्य निर्भरता में नहीं खींचते हैं, और curl और कॉन्फ़िगर करने के लिए दर्द हो, लेकिन आपको सॉकेट के साथ देशी HTTPS समर्थन नहीं मिलता है। उपर्युक्त विधि बॉक्स के बाहर HTTPS और कई अन्य प्रोटोकॉल का समर्थन करती है (http://us2.php.net/manual/en/wrappers.php)। चीयर्स। –

1

सबसे पहले आपको यह जांचना होगा कि पृष्ठ DNS के माध्यम से मौजूद है। यही कारण है कि आप कहते हैं कि "बस लटकता है" - यह DNS क्वेरी का समय समाप्त होने का इंतजार कर रहा है। यह वास्तव में लटका नहीं है।

DNS की जांच करने के बाद, जांचें कि आप सर्वर से कनेक्ट कर सकते हैं। यदि आप सावधान नहीं हैं तो यह एक और लंबा समय है।

अंत में, HTTP HEAD निष्पादित करें और स्थिति कोड जांचें। ऐसे कई, कई विशेष मामले हैं जिन पर आपको यहां विचार करना है: मौजूदा पृष्ठ के लिए "अस्थायी आंतरिक सर्वर त्रुटि" का क्या अर्थ है? "स्थायी रूप से स्थानांतरित" के बारे में क्या? HTTP स्थिति कोड में देखें।

+0

तो मैं AJAX के साथ चेक 1 और 2 कैसे कर सकता हूं? – Moss

+0

@ मॉस: मैं इसे PHP में करूँगा, जहां यह अच्छा और आसान है। जावास्क्रिप्ट थ्रेडिंग और यूआई प्रतिक्रिया एक मुद्दा है। – Borealid

0

शायद आप डोमेन चेकर को जोड़ सकते हैं, और jQuery, डोमेन चेकर (PHP) गैर-मौजूदा डोमेन के लिए 1 या 0 का जवाब दे सकता है।

उदाहरण के लिए। http://webarto.com/snajper.php?domena=stackoverflow.com, 1 लौटाएगा, आप तत्काल जांचने के लिए इनपुट ब्लर फ़ंक्शन का उपयोग कर सकते हैं।

1

मैं सिर्फ PHP का उपयोग एक सरल संस्करण में लिखा है:

function url_check($url) { 

$x = @fopen($url,"r"); 

if ($x) { 

     $reply = 1; 

     fclose($x); 

} else { 

      $reply = 0; 

} 

return $reply; 

} 

जाहिर $url, परीक्षण यूआरएल है रिटर्न सच (1) या गलत (0) यूआरएल अस्तित्व पर निर्भर करता है।

संबंधित मुद्दे

 संबंधित मुद्दे