PHP Status auf webseite auslesen und anzeigen...

mydoys.de

Well-known member
ID: 84968
L
20 April 2006
2.757
125
Hey Leute.
Ich Progammiere eben ein Kleines Script welches mit einem Anderen zusammen arbeitet und mein Script erhählt ne Status Meldung zurück:

So:
100
Status:114699340

HTML:
HTML:
100<br>Status:114699340

Ich möchte mir die Status ID anzeigen lassen wie kann ich das machen?


Edit:
ich versuche es so:

<?php
$str = 'https://www.xxxxxxxx.com/gateway/xxxxx.php?id=mydoys&pw=xxxxxxxxxxxxxxx';
$statusid =(explode('<br>Status:', $str, 2));
echo"$statusid[1]";
?>

Bleibt aber leer
 
Zuletzt bearbeitet:
PHP:
$str = 'https://...';
$statusid =(explode('<br>Status:', $str, 2));
echo"$statusid[1]";

Wenn das dein Code ist, fehlt dir zwischen Zeile 1 und 2 noch das auslesen der Webseite. Im Beispielcode hast du in $str die Adresse stehen, die du dann weiterverarbeitest. Ich nehm aber an, du willst irgend eine Seite weiterverarbeiten.
 
ich versuche es so:

<?php
$str = 'https://www.xxxxxxxx.com/gateway/xxxxx.php?id=mydoys&pw=xxxxxxxxxxxxxxx';
$statusid =(explode('<br>Status:', $str, 2));
echo"$statusid[1]";
?>

Bleibt aber leer

Für mich wird auch gar nicht ersichtlich, wo der Status abgefragt wird, oder ist das tatsächlich nur ein Code-Schnipsel?

Da fehlen noch Abfragen über file(), file_get_contents() oder die curl-Funktionen...

Gruß

Edit:
Grrr @wahnsinn :D
 
PHP:
$str = 'https://...';
$statusid =(explode('<br>Status:', $str, 2));
echo"$statusid[1]";

Wenn das dein Code ist, fehlt dir zwischen Zeile 1 und 2 noch das auslesen der Webseite. Im Beispielcode hast du in $str die Adresse stehen, die du dann weiterverarbeitest. Ich nehm aber an, du willst irgend eine Seite weiterverarbeiten.

Ja ich will das was die Webseite anzeigt weiterverarbeiten
 
Ne mach das auf keinen Fall über file() oder so. Und zwar weil wenn mal die Seite nicht erreichbar ist dein Script ist in (Timeout) Nirvana gebremst wird.

PHP:
//wichtig Host ohne https://  eintragen!
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET /www.example.com?id=mydoys&pw=xxxxxxxxxxxxxxx HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
$file = '';
    fwrite($fp, $out);
    while (!feof($fp)) {
        $file .= fgets($fp, 128);
    }
    fclose($fp);
}

if(!empty($file))
{
$statusid =(explode('<br>Status:', $str, 2));
echo $statusid[1];  
}
else
{
echo 'Verbindung gescheitert!';
}

Der Vorteil ist, dass hier der Timeoutwert eingetragen werden kann. Sprich wenn der Host mal ausgefallen ist, wird sich dein Script nicht verzögern. Ansonsten willst du mal ne SMS versenden und wenn die API nicht on ist wirst du bis ins Timeout Nirvana warten, statt dir zeigen zu lassen, dass die API zur Zeit nicht verfügbar ist.

Es gibt hunderte die das immer wieder mit file() falsch machen. So lange der Host verfügbar ist, wir ihnen das auch nicht auffallen. Aber sonsten kann das sogar einen Server lahm legen.

file() oder der gleichen wirst du nur dann gebrauchen können, wenn du zu 100% sicher bist dass der Host auch erreichbar ist. Ansonsten wirst du ne Ewigkeit warten, bist du die Meldung bekommst, dass die Datei nicht abgerufen werden kann. Das kann man sich gut sparen.

Überhaupt ist deshalb file() oder file_get_contents() für URL Arbrufe im eigentlichen Sinne unpraktisch!

Ich habe früher auch immer mit file() und Co gearbeitet, bis ich mal gemerkt hab, welchen Nachteil das hat, wenn mal die Gegenstelle nicht antwortet. Seitdem verwende ich die Funktionen nur noch auf der interen HDD.

Mal angenommen du machst dir ein Script wo ein User eine SMS versendet und wartes mit file() auf Antwort. Wenn die API nicht verfügbar ist steht der User 120 oder gar 180 Sekunden (je nach Einstellung der PHP.ini) vor einer weißen nicht aufbauenden Seite, nur um dann festzustellen, dass das Script mit einer Fehlermeldung abgebrochen ist.

Mit dem fsockopen kannst du den Timeout in Millisekunden im letzten Parameter übergeben. In dem Fall wäre nach 30 Millisekunden schluß! Das reicht vollkommen aus.
 
Zuletzt bearbeitet:
Wenn die API nicht verfügbar ist steht der User 120 oder gar 180 Sekunden (je nach Einstellung der PHP.ini) vor einer weißen nicht aufbauenden Seite, nur um dann festzustellen, dass das Script mit einer Fehlermeldung abgebrochen ist.
Der Benutzer wird im Normalfall die Minute(n) gar nicht warten, sondern vorher mit F5 und einem Klick auf "OK" den Request nochmals senden und regt sich hinterher - zu recht! - drüber auf, dass ihm die SMS x-mal berechnet wurde, aber niemals gesendet wurde.
Mit dem fsockopen kannst du den Timeout in Millisekunden im letzten Parameter übergeben. In dem Fall wäre nach 30 Millisekunden schluß!
Sekunden, keine Millisekunden ;)
 
das geht aber auch deutlich einfacher:
PHP:
$conf = array('timeout' => 1); // 1sec timeout
$context = stream_context_create($conf);

$data = file_get_contents('https://www.google.de', false, $context);

Ansonsten willst du mal ne SMS versenden und wenn die API nicht on ist wirst du bis ins Timeout Nirvana warten, statt dir zeigen zu lassen, dass die API zur Zeit nicht verfügbar ist.
so ist es richtig, ich zeige meinem Nutzer eine Fehlermeldung an, dass das SMS-Gateway nicht erreichbar ist, damit kann er ja auch viel anfangen :ugly:

Korrekt wird dies mit Asynchronität implementiert: die SMS wird in eine Warteschlange gesteckt, und so schnell wie möglich gesendet, wenn der Gateway mal nicht erreichbar ist, passiert in diesem Durchlauf eben nix.
 
Zuletzt bearbeitet:
Okay jetzt dachte ich ich wäre schlauer. Aber wie es den Anschein macht geht es mit file_get_contents doch auch! Das habe ich wiederum nicht gewusst. Naja auf jeden Fall sollte man es benutzen.

Sekunden, keine Millisekunden ;)

Recht haste! ;)