2015-12-06 3 views
16

I simple_html_dom.php Bibliothek aus diesem Beispieleinfacher HTML-DOM-Parser return error 500

http://nimishprabhu.com/top-10-best-usage-examples-php-simple-html-dom-parser.html

Aber ich habe Fehler 500 innerhalb der Klasse verwenden, wenn ich URL in Browser eingeben funktioniert es ok?

Ich habe einige Werte annehmen in Array wie diese

$result= Array ( 
[Avenya Group AG] => 
Array ( 
[link] => CHE-218.938.800 
[href] => http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0)) 

Wenn ich etwas versuchen, wie dieser

foreach($result as $key => $value) { 
     $xmlFind = file_get_html($value['href']); 
     foreach($xmlFind->find('a') as $a) { 
     echo '<p>'.$a->href.'</p>'; 
     } 
} 

bekam ich Fehler

Ein PHP-Fehler aufgetreten Schweregrad: Warnung Nachricht: file_get_contents (http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0): Fehler beim Öffnen des Streams: HTTP-Anforderungsfaile d! HTTP/1.1 500 Internal Server Error Dateiname: Bibliotheken/Simple_html_dom.php Zeilennummer: 76

Aber wenn ich manuell wie dieses dort

$xmlFind = file_get_html('http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0'); 

Ergebnis versuchen ist, wenn ich schreibe auch, dass url i Browser alles ist in Ordnung, nur Problem, das ich habe, wenn ich versuche, ein Array zu loopen?

+0

Wie meinen Sie nicht finden können, wenn ich es manuell eingeben funktioniert es? –

Antwort

6

Überprüfen Sie http://php.net/manual/en/function.file-get-contents.php Notizen Abschnitt.

Bitte überprüfen Sie Ihre Server-Einstellungen für "fopen-Wrapper"

Ich habe versucht, die folgende

<?php 
include('simple_html_dom.php'); 

$result= Array ( 
'Avenya Group AG' => 
Array ( 
'link' => 'CHE-218.938.800', 
'href' => 'http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0')); 
foreach($result as $key => $value) { 
    $xmlFind = file_get_html($value['href']); 
    foreach($xmlFind->find('a') as $a) { 
    echo '<p>'.$a->href.'</p>'; 
    } 
} 

Und bekam diese

# 

http://www.shab.ch/shabforms/servlet/Search?EID=7&DOCID=6890948 

http://www.shab.ch/shabforms/servlet/Search?EID=7&DOCID=981331 

http://zh.powernet.ch/webservices/inet/hrg/hrg.asmx/getExcerpt?Chnr=CH-020.3.038.402-5&Amt=20&Lang=1 

mailto:[email protected] 
+0

Whn ich versuche dieses, ich bekomme 500 Fehler ?? –

3

die Sie interessieren,

<?php 

$result= Array ( 
    'Avenya Group AG' => 
      Array ( 
       'link' => 'CHE-218.938.800', 
       'href' => 'http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0' 
      ) 
); 


foreach($result as $arr_item){ 

    if(is_array($arr_item)) { 

     if(isset($arr_item['href'])) { 

      echo file_get_contents($arr_item['href']); 

     } 

    } 

} 


?> 

Nach Ex Nach dem obigen Code habe ich diese Antwort erhalten, wie im angehängten Bild gezeigt.

Wenn Sie weiterhin einen Warnfehler erhalten, können Sie curl verwenden, um eine Anfrage zu senden. statt echo file_get_contents($arr_item['href']); über

ersetzen Sie es mit dem folgenden Code.

$ch = curl_init($arr_item['href']); 

curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 

$result = curl_exec($ch); 

echo $result; 

curl_close($ch); 

enter image description here

+0

Fehlender Parameter: amt. –

+0

Sie können amt Parameter in href überprüfen, es ist da. –

4

Proxy könnte ein Problem sein. Verwenden Sie einen geeigneten Proxy.

// Create a stream 
$opts = array(
    'http'=>array(
     'method'=>"GET", 
     'header'=>"Accept-language: en\r\n" . 
     "Cookie: foo=bar\r\n", 
     'proxy' => 'tcp://221.176.14.72:80', 
    ) 
); 

$context = stream_context_create($opts); 

// Open the file using the HTTP headers set above 
$file = file_get_contents('http://ifconfig.me/ip', false, $context); 
var_dump($file); 
+0

stream_context_create(): Optionen sollten die Form haben ["Wrappername"] ["Optionsname"] = $ Wert –

3

Diese Meldung wird von dem Remote-Server zurückgegeben. Es zeigt, dass der Server zu diesem Zeitpunkt möglicherweise nicht verfügbar ist.

Ich denke, dass dies durch eine zu große Menge an Ressourcen verursacht werden kann, die benötigt wird, um die verschiedenen Anforderungen auszuführen, die Sie innerhalb Ihrer Schleife gemacht haben.Es kann auch mit einem Denial-of-Service-Schutz verknüpft werden.

Nach Erreichen der maximalen Anzahl autorisierter Verbindungen wird "HTTP 500 Server Too Busy" zurückgegeben.

Siehe: https://www.iis.net/configreference/system.webserver/asp/limits

requestQueueMax Das Attribut gibt die maximale Anzahl gleichzeitiger ASP-Anforderungen, die in die Warteschlange zugelassen sind. Jeder Client-Browser, der versucht, ASP-Dateien anzufordern, wenn die Warteschlange voll ist, wird ein HTTP 500 Server Too Busy-Fehler gesendet.

Sie können versuchen, jede Ihrer Anrufe an die URL mit einer sleep() zu verzögern, wenn Sie nicht zeitlich befristet sind.

Am besten wenden Sie sich an den Besitzer/sys Admin des Remote-Webdienstes, um ihn über das Problem zu informieren, damit er untersuchen kann.

Abhängig von dem, was Sie in Ihrem Skript tun können Sie auch die Fehlermeldung ignorieren und mit dem nächsten Aufruf weiter:

foreach($result as $key => $value) { 
    // added @ to ignore the error 
    $xmlFind = @file_get_html($value['href']); 

    // continue to the next result 
    if (!$xmlFind) continue; 
    foreach($xmlFind->find('a') as $a) { 
     echo '<p>'.$a->href.'</p>'; 
    } 
} 
+0

500 Fehler könnte auch interner Fehler sein, vor allem mit Simple html Dom [Speicherleck] (http: //simplethmdom.sourceforge. net/manual_faq.htm # memory_leak), oder nur ein Fehlkonfigurationsserver, oder könnte irgendetwas sein ... – cwps

+1

@cwps Da der Fehler vom ** Remote-Server ** kommt, können Sie ein Speicherleck in diesem lokal ziemlich ausschließen gebrauchte Bibliothek. Der lokal ausgelöste Fehler wird perfekt durch die Fehlermeldung "Fehler beim Öffnen des Streams: HTTP-Anfrage fehlgeschlagen!" Erklärt. Das Thema dieser Frage ist mehr, um diesen Fehler zu erklären und warum hat der Remote-Server diesen Fehler ausgelöst, wenn wir diesen Code innerhalb einer Schleife aufrufen, während sich die Remote-Konfiguration nicht ändert. – Adam