online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Mich vom 25.05.2019, 12:56 Options

"or die" fehlt - aber wo ?

Hallo!

Ich lese (mit Genehmigung) aus einer anderen Seite Informationen aus und veröffentliche sie auf meiner Seite.

Nun habe ich das Problem, daß die Quellseite manchmal nicht erreichbar ist und dann auch meine Seite nicht lädt und erst nach Minuten eine Fehlermeldung anzeigt.

Vermutlich fehlt irgendwo ein "or die" oder so was ähnliches (bin php-Laie!)

Könnte mir jemand einen Tipp geben, was man machen könnte (und wo!) ?

So lese ich die Infos aus:


<?php
                $quelle = file('http://quellseite.de');
                $file = array_merge($quelle);
                $length = count($file);
                $html = "";
                for($i=0; $i<$length; $i++)
                {
                 $html .= trim($file[$i]);
                }
                $pattern = "'<h4>(.*?)</h4>'i";
                $match_count = preg_match_all($pattern, $html, $matches);
                if($match_count>0)
                {
                  $n = 10;
                  for($i=0; $i<$n && $i<$match_count; $i++)
                  {

                  echo iconv("UTF-8", "ISO-8859-1", $matches[1][$i]);
                }
                }
                else
                {
                  echo "Derzeit keine Infos";
                }
                ?>


Ich würde wollen, daß meine Seite hier entweder überhaupt nichts anzeigt (aber den Rest lädt!), wenn die Quellseite nicht zu erreichen ist, oder das "else": "Derzeit keine Info"

Als Fehlermeldung kommt derzeit:

Warning: file() [function.file]: HTTP request failed! HTTP/1.1 500 Internal Server Error in /www/htdocs/meinehomepage/meineseite.php on line 2

Warning: file(http://quellseite.de) [function.file]: failed to open stream: Success in  /www/htdocs/meinehomepage/meineseite.php on line 2


Für Hilfe vielen Dank!

Mich


Antwort schreiben

Antwort 1 von Hobst_Eppers vom 25.05.2019, 13:11 Options

mach folgendes draus:

<?php
if ($quelle = file('http://quellseite.de') === false) {

echo "Derzeit keine Infos";

} else {

$file = array_merge($quelle);
$length = count($file);
$html = "";
for($i=0; $i<$length; $i++)
{
$html .= trim($file[$i]);
}
$pattern = "'<h4>(.*?)</h4>'i";
$match_count = preg_match_all($pattern, $html, $matches);
if($match_count>0)
{
$n = 10;
for($i=0; $i<$n && $i<$match_count; $i++)
{

echo iconv("UTF-8", "ISO-8859-1", $matches[1][$i]);
}
}

}
?>


mit "or die()" beendet man das komplette Skript an Ort und Stelle. Bei weiteren Fragen siehe www.php.net und deren Online-Doku mit unglaublich vielen Beispielen

Antwort 2 von Supermax vom 25.05.2019, 13:33 Options

Verwende falls möglich statt file() die Funktionen der cURL-Bibliothek; da hast du bessere Kontrolle darüber, wie die Abfrage an den entfernten Server abläuft, und kannst z.B. auch ein Timeout setzen.

Antwort 3 von Mich vom 25.05.2019, 13:55 Options

Ich probiers mal aus.

Vielen Dank !

Mich

Antwort 4 von Mich vom 25.05.2019, 14:16 Options

@Hobst_Eppers:

Mit Deinem Skript bekomme ich diese Fehlermeldung:

Warning: file(http://quellseite.de) [function.file]: failed to open stream: HTTP request failed! HTTP/1.1 502 Proxy Error in /www/htdocs/meinehomepage/meineseite.php on line 2
Derzeit keine Infos


@Supermax :
könntest Du das einem php-Laien (mit einem Beispiel ?) etwas genauer erklären ?

Danke und Gruß

Mich

Antwort 5 von naja vom 25.05.2019, 16:09 Options

hi,

klingt zwar jetzt etwas hart, aber du bist ja auch bis hier bekommen, also lesen muss schon sein....
Klick mich für Informationen über cURL


mfg naja

Antwort 6 von Mich vom 25.05.2019, 16:44 Options

@ naja

stimmt, klingt etwas hart.
Wenn ich den Dollar-Kurs wissen will fang ich ja auch ein BWL-Studium an.

Und da wird sich gewundert, wenn die besten Leute bei Supportnet verschwinden.

Vielen Dank für die Hilfen in den letzten Jahren !

Und servus

Mich

Antwort 7 von Hobst_Eppers vom 29.05.2019, 13:10 Options

Mögliche Fehlermeldungen für Teile des Codes kann man wie folgt abschalten:

<?php
$alter_wert= error_reporting(0);
if ($quelle = file('http://quellseite.de') === false) {

echo "Derzeit keine Infos";

} else {

error_reporting($alter_wert);

$file = array_merge($quelle);
$length = count($file);
$html = "";
for($i=0; $i<$length; $i++)
{
$html .= trim($file[$i]);
}
$pattern = "'<h4>(.*?)</h4>'i";
$match_count = preg_match_all($pattern, $html, $matches);
if($match_count>0)
{
$n = 10;
for($i=0; $i<$n && $i<$match_count; $i++)
{

echo iconv("UTF-8", "ISO-8859-1", $matches[1][$i]);
}
}

}
?>

Antwort 8 von Supermax vom 29.05.2019, 13:30 Options

Du kannst die Fehlerausgabe von file() (ebenso jeder anderen PHP-Funktion) auch einfach durch Voranstellen von @ vor den Funktionsnamen unterdrücken. Gerade bei Dateisystemoperationen ist das im Echtbetrieb nützlich, da ein potentieller Angreifer ansonsten über die Fehlermeldung Hinweise auf das Dateisystem des Hostrechners bekommen kann, die er unter Umständen mittels "directory transversal" (URLs mit "../" darin) ausnutzen kann.

Dein Beispiel würde mit CURL z.B. so aussehen:

$curl = curl_init('http://quellseite.de');
// Seite per GET holen
curl_setopt($curl,CURLOPT_HTTPGET,1);
// Seiteninhalt als Ergebnis von curl_exec() zurückgeben
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
// HTTP-Header nicht in den Ergebnisstring übernehmen  
curl_setopt($curl,CURLOPT_HEADER,0);
// Maximal 30 Sekunden warten
curl_setopt($curl,CURLOPT_TIMEOUT,30);
// Abfrage abschicken.
$daten = curl_exec($curl);
// HTTP Code abfragen
$fehlercode = curl_getinto($curl,CURLINFO_HTTP_CODE);
// curl-resource schließen
curl_close($curl);
if ($fehlercode == 200) { 
   // OK
} else {
   // Fehlerbehandlung
}

Ähnliche Themen

icmp.dll fehlt
host  15.01.2007 - 164 Hits - 2 Antworten

Registerkarte "Verknüpfung" fehlt
ASSault  18.10.2007 - 83 Hits -

Gerätedatei Z: vvinesd.386 fehlt
joba  27.03.2008 - 67 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026