2012-04-01 17 views
7

मैं एक PHP स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो जितनी जल्दी हो सके वेबसाइट की HTTP स्थिति की जांच करेगा।get_headers से कुछ तेज()

मैं वर्तमान में get_headers() का उपयोग कर रहा हूं और इसे mysql डेटाबेस से 200 यादृच्छिक यूआरएल के लूप में चला रहा हूं।

सभी 200 की जांच करने के लिए - इसमें औसत 2 मीटर 48s लगता है।

क्या ऐसा कुछ भी है जो मैं इसे (अधिक) तेज़ बनाने के लिए कर सकता हूं?

(मुझे fsockopen के बारे में पता है - यह 20s में 200 साइटों पर पोर्ट 80 की जांच कर सकता है - लेकिन यह http स्थिति कोड का अनुरोध करने जैसा नहीं है क्योंकि सर्वर पोर्ट पर प्रतिक्रिया दे सकता है - लेकिन शायद वेबसाइटों को सही ढंग से लोड नहीं किया जा सकता है)

यहाँ कोड है ..

<?php 
    function get_httpcode($url) { 
    $headers = get_headers($url, 0); 
    // Return http status code 
    return substr($headers[0], 9, 3); 
    } 

    ### 
    ## Grab task and execute it 
    ### 


    // Loop through task 
    while($data = mysql_fetch_assoc($sql)): 

     $result = get_httpcode('http://'.$data['url']); 
     echo $data['url'].' = '.$result.'<br/>'; 

    endwhile; 
?> 

उत्तर

6

आप कर्ल पुस्तकालय की कोशिश कर सकते हैं। आप के साथ CURL_MULTI_EXEC

उदाहरण ही समय में एकाधिक अनुरोध समानांतर भेज सकते हैं:

$ch = curl_init('http_url'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
$c = curl_exec($ch); 
$info = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
print_r($info); 

UPDATED

इस उदाहरण देखो। http://www.codediesel.com/php/parallel-curl-execution/

+1

हाय, मैंने आपके द्वारा पोस्ट किए गए कोड की तरह curl का उपयोग करने का भी प्रयास किया है। लेकिन यह वही है, get_headers() से थोड़ा लंबा है; – Clarkey

+1

बहु अनुरोध करने का प्रयास करें क्योंकि मैं उपरोक्त लिंक देता हूं। उदाहरण के लिए प्रति बार 10 अनुरोध – safarov

+0

+1 अच्छा है! मुझे नहीं पता था कि कर्ल एक्सटेंशन समानांतर में अनुरोध संसाधित कर सकता है। – nnichols

3

मैं अगर यह एक विकल्प है कि आप पर विचार कर सकते है लगभग एक ही में एक कांटा का उपयोग कर पता नहीं है, लेकिन आप उन सभी को चला सकते हैं, इसके कारण स्क्रिप्ट केवल थोड़ा अधिक समय से एक अनुरोध से ले जाएगा http://www.php.net/manual/en/function.pcntl-fork.php

आप उदाहरण के लिए एक स्क्रिप्ट है कि CLI मोड में भाग गया और एक ही समय में सभी अनुरोधों का शुभारंभ किया गया है में इस जोड़ सकता है,

संपादित करें: आप कहते हैं कि तुम बनाने के लिए 200 कॉल, तो एक बात है कि आपको डेटाबेस कनेक्शन हानि का अनुभव हो सकता है। समस्या इस तथ्य के कारण होती है कि पहली स्क्रिप्ट पूर्ण होने पर लिंक नष्ट हो जाता है। इससे बचने के लिए आप प्रत्येक बच्चे के लिए एक नया कनेक्शन बना सकते हैं। मैं देखता हूं कि आप मानक mysql_ * फ़ंक्शंस का उपयोग कर रहे हैं, इसलिए यह सुनिश्चित करने के लिए कि आप हर बार एक नया लिंक बनाते हैं, चौथा पैरामीटर पारित करना सुनिश्चित करें। अपने सर्वर पर एक साथ कनेक्शन की अधिकतम संख्या भी देखें

+0

यह वही है जो मैं कर रहा हूं - मैं आपके लिंक पर एक नज़र डालेगा, धन्यवाद। – Clarkey

+0

@MattClarke ठीक है, मुझे खुशी है कि आपको यह उपयोगी लगता है .. आपको पुनरावृत्ति में कांटा चलाने की आवश्यकता होगी, जहां आप बच्चे पाएंगे या अगर आप माता-पिता – mishu

+0

में हैं, तो आप परिणाम प्राप्त कर सकते हैं और साइट को पिंग कर सकते हैं। मैं आपकी कहानियों का पालन नहीं कर रहा हूं - यह कांटा व्यवसाय मेरे लिए बिल्कुल नया है, मुझे यह भी पता नहीं था कि यह संभव था। – Clarkey

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