Frage

Die Website ist http://www.ipalaces.org/support/

Der Code, den ich für die Statusanzeigen verwenden ist

<img src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&off_url=http://www.ipalaces.org/support/widget/status_offline.gif">

, die eine nette Sache ist, die big.oscar.aol.com können Sie tun, es leitet es automatisch zu, was Bild, das Sie für die on_url gesetzt haben, wenn sie online sind, und gleich für off_url für offline. Allerdings möchte ich diese in einem verwenden, wenn Anweisung in PHP oder JavaScript, um verschiedene Dinge anzuzeigen. Derzeit wird diese verwende ich:

function getaim($screenname) {
        $ch     = curl_init();
        $url    = "http://big.oscar.aol.com/$screenname?on_url=true&off_url=false";
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        // added to fix php 5.1.6 issue:
        curl_setopt($ch, CURLOPT_HEADER, 1);
        $result = curl_exec($ch);
        curl_close($ch);

        if(eregi("true",$result)) {
            return true;
        } else {
            return false;
        }
}

If (getaim("ImperialPalaces")) { print "Online"; } else { print "Offline"; }

Das Problem mit diesem Code ist, dass aus irgendeinem Grund zu zufälligen Zeiten auf 12 Sekunden dauern kann es tatsächlich um die Ergebnisse abzurufen. Während der Standard img Tricks ist fast sofort.

Gibt es ein bekanntes Problem mit curl? Gibt es einen schnelleren Weg?

Ich habe jemand gesehen versuchen, die .src des img-Tag zu lesen und eine tun, wenn Aussage so, aber ich konnte es an die Arbeit.

War es hilfreich?

Lösung

Um zu vermeiden, für ein Dutzend Sekunden warten, wenn die Dinge nicht in Ordnung zu tun, können Sie ein paar weitere Optionen festlegen, wie (siehe curl_setopt ):

  • CURLOPT_CONNECTTIMEOUT: Die Anzahl der Sekunden zu warten, bei dem Versuch, zu verbinden. Verwenden Sie 0, um auf unbestimmte Zeit zu warten.
    • , um ein paar Sekunden einstellen würde ausreichen, um
  • CURLOPT_TIMEOUT: Die maximale Anzahl von Sekunden cURL Funktionen ermöglichen auszuführen.
    • same für diesen einen
  • CURLOPT_DNS_CACHE_TIMEOUT: Die Anzahl der Sekunden DNS-Einträge im Speicher zu halten. Diese Option wird auf 120 (2 Minuten) standardmäßig eingestellt.
    • Sie könnten dies wahrscheinlich auf einen höheren Wert

Wenn die Benutzer Ihrer Website im Allgemeinen auf sie bleiben länger als nur ein oder zwei Seiten, könnte es interessant sein, dass die Informationen in $_SESSION zu speichern und sie nur einmal holt in einer Weile.

Zum Beispiel könnte man es holt nur, wenn das in der Sitzung gespeicherten Wert vor mehr als 5 Minuten geholt wurde. )

-: Es wäre wahrscheinlich ein paar Anrufe Speichern

Eine andere Möglichkeit könnte sein, dass zu tun, auf der Client-Seite:

  • holt das Bild mit dem <img> Tag
  • bei „online“, verwenden Sie ein Bild, das Lasten OK
    • Schließen Sie einen Handler auf dem „load“ auch das Bildes, es mit etwas Text zu ersetzen
  • bei "offline", ein Bild verwenden, die 404 ist in
    • Schließen Sie einen Handler auf dem „error“ auch das Bildes, es mit etwas Text zu ersetzen

Das ist nicht sehr schön (es ist eine Art von „Hacky“, in der falschen Art und Weise), aber es sollte funktionieren; -)

Ihr Bild so sein würde:

<div id="arround-1">
    <img id="img-1" src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&amp;off_url=http://this.is-a-404-error.com"
        onload="replace_img_status(1, 1);"
        onerror="replace_img_status(1, 0);"
    />
</div>

Sie sehen, dass, wenn der Benutzer verbunden ist, schließlich die <img> zu einem Bild führen, das existiert; so die "load" wird selbst gebrannt werden.

Und im Fall der Benutzer nicht angeschlossen ist, wird der <img> schließlich zu einem Bild führen, das nicht existiert (es ist ein 404-Fehler geben) ; so wird das "error" Ereignis ausgelöst werden.

Sie jetzt Pflege dieser beiden Fälle nehmen, mit so etwas wie folgt aus:

<script type="text/javascript">
    var replace_img_status = function (num, status) {
        var div = document.getElementById('arround-' + num);
        if (div) {
            if (status == 1) {
                div.innerHTML = 'Online';
            } else {
                div.innerHTML = 'Offline';
            }
        }
    };
</script>

Wenn status ist 1, wir "Online" angezeigt werden, und in dem anderen Fall ( "Fehler"), die wir anzeigen, "Offline": -)

Aber selbst ist es zu funktionieren scheint, ich weiß nicht wirklich, wie die Lösung ^^

Andere Tipps

1 Pascal für das, aber für jeden, der dies in PHP will, und ist immer noch interessiert, ich habe ein kleines Skript gemacht, die die Headerort Griffe (die gibt offline / online oder was auch immer Sie am Ende setzt von die URL (zum Beispiel on_url = 1, in der Kopfzeile würde Standort zurück: 1)

<?php
Define('Username', $_GET['sn']);
Define('URL', 'http://big.oscar.aol.com/' . Username . '?on_url=online&off_url=offline');
Define('Online', 'Location: online'); // Change online to whatever you have for on_url
Define('Offline', 'Location: offline'); // Change offline to whatever you have for off_url

$Response = Get_Headers(URL);

If(In_Array(Online, $Response)){
    Echo UCWords(StrToLower(Username)) . ' is currently online.';
}
ElseIf(In_Array(Offline, $Response)){
    Echo UCWords(StrToLower(Username)) . ' is currently offline, or has set their privacy settings.';
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top