2012-08-28 22 views
6

को छोड़कर मैंने इस साइट पर 20 से अधिक संबंधित प्रश्न पढ़े, Google में खोज की लेकिन कोई उपयोग नहीं किया। मैं PHP के लिए नया हूं और एक यूआरएल लाने के लिए PHP सरल एचटीएमएल डोम पार्सर का उपयोग कर रहा हूं। हालांकि यह स्क्रिप्ट स्थानीय परीक्षण पृष्ठों के साथ काम करती है, यह सिर्फ उस यूआरएल के साथ काम नहीं करेगी जिसके लिए मुझे स्क्रिप्ट चाहिए।चेतावनी: file_get_contents: स्ट्रीम खोलने में विफल: रीडायरेक्शन सीमा तक पहुंच गई,

यहाँ कोड है कि मैं इस के लिए लिखा था, एक उदाहरण फ़ाइल है कि PHP सरल डोम पार्सर पुस्तकालय के साथ आया था निम्नलिखित है:

<?php 

include('simple_html_dom.php'); 

$html = file_get_html('http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL'); 

foreach($html->find('li.name ul#generalListing') as $e) 
echo $e->plaintext; 

?> 

और इस त्रुटि संदेश है कि मैं मिलता है:

Warning: file_get_contents(http://www.farmersagent.com/Results.aspx?isa=1&amp;name=A&amp;csz=AL) [function.file-get-contents]: failed to open stream: Redirection limit reached, aborting in /home/content/html/website.in/test/simple_html_dom.php on line 70 

कृपया मुझे मार्गदर्शन करें कि इसे काम करने के लिए क्या किया जाना चाहिए। मैं नया हूं इसलिए कृपया एक तरीका सुझाएं जो सरल है। इस साइट पर अन्य प्रश्नों और उनके उत्तरों को पढ़ने के दौरान, मैंने हैंडल बनाने के लिए कर्ल विधि की कोशिश की लेकिन मैं इसे काम करने में असफल रहा। मैंने जिस कर्ल विधि की कोशिश की वह "संसाधन" या "ऑब्जेक्ट्स" लौटती रहती है। मुझे नहीं पता कि सरल एचटीएमएल डोम पार्सर को $ html-> ढूंढें() सही तरीके से काम करने के लिए कैसे पास किया जाए।

कृपया मदद करें! धन्यवाद!

+1

मैं '200 OK', रीडायरेक्ट न सब पर जब मैं उस तक पहुँचने का प्रयास फ़ाइल ... –

+0

हाय, कोलिंक! आपके कमेंट के लिए धन्यवाद।यह अजीब बात है कि यह मेरे विंडोज पीसी पर एक त्रुटि 500 ​​दिखाता है और जब मैं इसे अपने लिनक्स सर्वर पर चलाता हूं, तो यह त्रुटि संदेश दिखाता है। –

+0

@ कंधन मिश्रा अच्छा होगा यदि आप उत्तर में से कोई एक चुनते हैं और इसे सही के रूप में चिह्नित करते हैं, अगर यह आपकी समस्या हल करता है, ठीक है? – PSyLoCKe

उत्तर

1

cURL आप चाहते हैं का उपयोग करना CURLOPT_RETURNTRANSFER विकल्प क्रम में सही पर सेट इस तरह curl_exec करने के लिए कॉल के साथ अनुरोध के शरीर वापस जाने के लिए की आवश्यकता है:

$url = 'http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL'; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
// you may set this options if you need to follow redirects. Though I didn't get any in your case 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
$content = curl_exec($curl); 
curl_close($curl); 

$html = str_get_html($content); 
+0

हाय माइक, उत्तर देने के लिए धन्यवाद! मैंने कोशिश की है लेकिन मुझे नहीं पता कि कर्ल से डीओएम पार्सर में हैंडल को कैसे पास किया जाए ताकि खोज() विधि काम करना शुरू कर दे। मैंने इस कोड को आजमाया लेकिन कृपया देखें कि इसे कैसे लिखा जाना चाहिए क्योंकि यह कोड एक चेतावनी और घातक त्रुटि देता है (घातक त्रुटि: किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन को ढूंढें() पर कॉल करें): –

+0

@ कंधन मिश्रा मैं परिचित नहीं हूं लाइब्रेरी जिसका आप उपयोग कर रहे हैं, लेकिन दस्तावेज़ीकरण के माध्यम से चमकते हुए एक स्ट्रिंग से DOM ऑब्जेक्ट को पॉप्युलेट करने के लिए एक फ़ंक्शन है, जो आप curl से वापस प्राप्त करेंगे। कृपया ऊपर मेरा संशोधित उत्तर देखें। –

+0

str_get_html ($ सामग्री) की कोशिश करने के बाद, मुझे एक घातक त्रुटि मिलती है: घातक त्रुटि: किसी सदस्य फ़ंक्शन को कॉल करें() /home/content/html/website.in/test/test.php में एक गैर-ऑब्जेक्ट पर खोजें लाइन 21 पर इसका क्या कारण हो सकता है? –

0

मैं वास्तव में क्यों आप नए सिरे से परिभाषित यकीन नहीं है HTML प्राप्त करने से स्ट्रिंग के साथ $ html ऑब्जेक्ट, ऑब्जेक्ट स्ट्रिंग को खोजने के लिए उपयोग किया जाना है। यदि आप किसी स्ट्रिंग के साथ ऑब्जेक्ट को ओवरराइट करते हैं, तो ऑब्जेक्ट अब मौजूद नहीं है और इसका उपयोग नहीं किया जा सकता है।

किसी भी मामले में, कर्ल से लौटाई गई स्ट्रिंग को खोजने के लिए।

<?php 
$url = 'http://www.example.com/Results.aspx?isa=1&name=A&csz=AL'; 

include('simple_html_dom.php'); 

# create object 
$html = new simple_html_dom(); 

#### CURL BLOCK #### 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
# you may set this options if you need to follow redirects. 
# Though I didn't get any in your case 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 

$content = curl_exec($curl); 
curl_close($curl); 

# note the variable change. 
$string = str_get_html($content); 

# load the curl string into the object. 
$html->load($string); 

#### END CURL BLOCK #### 

# without the curl block above you would just use this. 
$html->load_file($url); 

# choose the tag to find, you're not looking for attributes here. 
$html->find('a'); 

# this is looking for anchor tags in the given string. 
# you output the attributes contents using the name of the attribute. 
echo $html->href; 
?> 

आप एक अलग टैग खोज कर सकता, विधि एक ही

# just outputting a different tag attribute 
echo $html->class; 

echo $html->id; 
4

आज एक ऐसी ही समस्या थी। मैं curl का उपयोग कर रहा था और यह मेरी कोई त्रुटि वापस नहीं कर रहा था। file_get_contents() के साथ परीक्षण किया गया और मुझे मिल गया ...

स्ट्रीम को खोलने में विफल:

में निरस्त किया जा रहा कुछ खोजों बनाया और I'v इस समारोह है कि मेरे मामले पर काम करता है के साथ समाप्त हो गया, पर पहुंच गया पुनर्निर्देशन सीमा। ..

function getPage ($url) { 


$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36'; 
$timeout= 120; 
$dir   = dirname(__FILE__); 
$cookie_file = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt'; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_ENCODING, ""); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/'); 
$content = curl_exec($ch); 
if(curl_errno($ch)) 
{ 
    echo 'error:' . curl_error($ch); 
} 
else 
{ 
    return $content;   
} 
    curl_close($ch); 

} 

वेबसाइट मान्य उपयोगकर्ता एजेंट के लिए और कुकीज़ के लिए जाँच की गई थी।

कुकी समस्या इसे उत्पन्न कर रही थी! :) शांति!

+0

अच्छा है, मेरे मामले में भी काम करता है। आपने मुझे बहुत समय बचाया, धन्यवाद! – Cheslab

2

साथ समाधान किया गया:

<?php 
$context = stream_context_create(
    array(
     'http' => array(
      'max_redirects' => 101 
     ) 
    ) 
); 
$content = file_get_contents('http://example.org/', false, $context); 
?> 

अगर आपको बीच में एक प्रॉक्सी है सूचित कर सकते हैं:

$aContext = array('http'=>array('proxy'=>$proxy,'request_fulluri'=>true)); 
$cxContext = stream_context_create($aContext);