2012-04-19 21 views
70

मुझे समझ में नहीं आता है कि जब मैं $ httpCode को प्रतिबिंबित करता हूं तो मुझे हमेशा 0 मिलता है, मैं 404 की उम्मीद कर रहा था जब मैं $ html_brand को टूटा हुआ यूआरएल में बदलता था। क्या ऐसी कोई चीज है जिसे मैं याद करता हूं या नहीं जानता? धन्यवाद।PHP कर्ल HTTP कोड वापसी 0

//check if url exist 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $html_brand); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

if ($httpCode == 404) { 
    echo "The Web Page Cannot Be Found"; 
    return; 
} 
curl_close($ch); 

उत्तर

65

यदि आप सर्वर से कनेक्ट करते हैं, तो आप इससे रिटर्न कोड प्राप्त कर सकते हैं, अन्यथा यह असफल हो जाएगा और आपको 0 मिल जाएगा। इसलिए यदि आप "www.google.com/lksdfk" से कनेक्ट करने का प्रयास करते हैं तो आपको मिलेगा 400 का रिटर्न कोड, यदि आप सीधे google.com पर जाते हैं, तो आपको 302 मिलेगा (और फिर 200 यदि आप अगले पृष्ठ पर अग्रेषित करेंगे ... अच्छा मैं करता हूं क्योंकि यह google.com.br पर आगे बढ़ता है, तो हो सकता है कि आप शायद इसे प्राप्त करें), और यदि आप "googlecom" पर जाते हैं तो आपको 0 (होस्ट नहीं मिला) मिलेगा, इसलिए आखिरी के साथ, कोई कोड वापस भेजने के लिए कोई नहीं है।

नीचे दिए गए कोड का उपयोग करके परीक्षण किया गया।

<?php 

$html_brand = "www.google.com"; 
$ch = curl_init(); 

$options = array(
    CURLOPT_URL   => $html_brand, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_HEADER   => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_ENCODING  => "", 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_CONNECTTIMEOUT => 120, 
    CURLOPT_TIMEOUT  => 120, 
    CURLOPT_MAXREDIRS  => 10, 
); 
curl_setopt_array($ch, $options); 
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

if ($httpCode != 200){ 
    echo "Return code is {$httpCode} \n" 
     .curl_error($ch); 
} else { 
    echo "<pre>".htmlspecialchars($response)."</pre>"; 
} 

curl_close($ch); 
+0

भी अनुवर्ती अनुवर्ती करने के लिए thx भी, कभी-कभी मुझे 301 मिलता है जो एक पुनर्निर्देशित समस्या है। – Ardeus

+0

इसकी अजीब हालांकि $ प्रतिक्रिया में एचटीएमएल सामग्री है, लेकिन $ httpcode हमेशा 0 लौटाता है, साथ ही curl_error शून्य है। क्या संभव हो सकता गलत हो गया। मैं केवल रिटर्न ट्रांसफर, हेडर (झूठा), केवल सेटिंग में अनुवर्तीकरण शामिल करता हूं। – Ardeus

+0

बहुत उपयोगी! आपका बहुत बहुत धन्यवाद। –

1

$ html_brand में आप कितनी सटीक सामग्री पारित कर रहे हैं?

है यह एक अमान्य URL वाक्य रचना है, तो आपको बहुत संभावना HTTP कोड 0.

1

जैसा कहा here और नीचे मिल जाएगा, एक असफल अनुरोध (सर्वर यानी नहीं मिला है) झूठी देता है, कोई HTTP स्थिति कोड, क्योंकि एक उत्तर कभी प्राप्त नहीं हुआ है।

कॉल curl_error()। ऐसा लगता है जैसे 'विकृत' तो अपने URL स्वरूप चेक प्रिंट कुछ तो

print curl_error($ch); 

:

54

समस्या क्या देखने के लिए curl_exec के बाद यह कोशिश करो।

+4

उस सुझाव के लिए धन्यवाद - मेरे बट को बचाया :) – wbj

+0

हाँ! मेरे गधे को बचाया – pimbrouwers

1

छिपी हुई त्रुटियों को जानने के लिए curl_getinfo के बाद curl_error जांचें।

if(curl_errno($ch)){ 
    echo 'Curl error: ' . curl_error($ch); 
} 
1

मुझे एक ही समस्या थी और मेरे मामले में ऐसा इसलिए था क्योंकि curp_exec फ़ंक्शन php.ini में अक्षम है। लॉग के लिए जांचें:

PHP Warning: curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18 

समाधान सर्वर कॉन्फ़िगरेशन फ़ाइल पर php.ini में अक्षम फ़ंक्शंस से curl_exec को हटा दिया गया है।

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