Server auf Vorhandensein prüfen

Thema wurde von Manni_HB, 7. Januar 2016 erstellt.

  1. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Um zu prüfen, ob ein Server erreichbar ist habe ich Folgendes gestrickt:
    PHP:
    $source "http://www.gambio.de";

    $ch curl_init();
    curl_setopt($chCURLOPT_URL$source);    
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
    $dataSource curl_exec($ch);                
    $infoSource curl_getinfo($ch);
    curl_close($ch);

    if (
    $infoSource['http_code'] == 200) {
        echo 
    'FEIN!';
    } else {
        echo 
    'Schitt - Server put!';
    }
    Es tut was es soll.
    Frage: Ist das so universell einsetzbar - oder fangen da evtl. Server, auf denen dies Script läuft, an zu hüsteln?
     
  2. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    Wir verwenden (Link nur für registrierte Nutzer sichtbar.) und sind sehr zufrieden damit.

    Pingdom pingt den Server in definierten Intervallen. Bei 404 gibt es eine schnelle Benachrichtigung per Mail und mehr.
     
  3. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Ja - schon richtig. Nur brauche ich in einem Projekt nur "true/false" um ggf. weitere Aktion zu steuern.
     
  4. Torben Wark
    Torben Wark Gambio GmbH
    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399
    Kommt drauf an auf welchen Servern du das nutzen willst. Wenn das alles Server sind, auf denen auch der Shop läuft, sollte es da denke ich nicht großartig Probleme geben, da wir ja auch cURL verwenden. Ein Problem kann das nur werden, wenn du das auf einem Server verwenden willst, auf dem kein cURL verfügbar ist.
     
  5. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Es sind nur "Shop-Server".

    Wobei dieser 2-Zeiler zu gleichen Ergebnissen führt..
    PHP:
    $requestUrl 'dingsbumm.eu';            
    $fp = @fsockopen($requestUrl80$errno$errstr10);

    if (
    $fp) { echo 'Fein - erreichbar'; } 
    :confused:
     
  6. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    … die sowieso cURL können müssen. :)

    3-Zeiler, da fehlt ein fclose($fp). ;)

    PHP:
    $requestUrl 'dingsbumm.eu';            
    $fp = @fsockopen($requestUrl80$errno$errstr10);

    if (
    $fp) { echo 'Fein - erreichbar'; } 
    $requestUrl müsste $requestHost heißen, denn „dingsbumm.eu“ ist kein URL; „http://dingsbumm.eu/“ wäre ein URL.

    Ansonsten tut das nicht ganz das gleiche wie die cURL-Variante. Mit cURL prüfst du, ob eine Ressource per HTTP abrufbar ist. Mit dieser fsockopen()-Variante prüfst du nur, ob auf TCP-Port 80 eine Verbindung zustande kommt.

    Im Shopsystem kannst du übrigens auch einfach den ConnectChecker verwenden:

    PHP:
    function checkURL($url)
    {
        
    $timeout 10;
        
    $cc MainFactory::create('ConnectChecker');
        
    $reachable false;
        try {
            
    $connectinfo $cc->check_connect($url$timeout);
            
    $reachable true;
        }
        catch(
    Exception $e)
        {
            
    $reachable false;
            
    $error_message $e->getMessage();
        }
        return 
    $reachable;
    }
     
  7. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Ja wie geil ist das denn? :eek:;):rolleyes:

    Habt Ihr womöglich für diesen ganzen Kram...
    PHP:
    $curl curl_init();
    curl_setopt($curlCURLOPT_URL$UrlFirstCheck);
    curl_setopt($curlCURLOPT_RETURNTRANSFER1);
    curl_setopt($curlCURLOPT_HEADER0);
    curl_setopt($curlCURLOPT_TIMEOUT30);
    curl_setopt($curlCURLOPT_SSL_VERIFYPEER0);
    $FirstResultCheck curl_exec($curl);
    curl_close($curl);          
    ... was Hübsches in der Schublade, dass einfach nur "$FirstResultCheck" zurückgibt :confused:
     
  8. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Da muss aber noch ein Timeout hineie, für den Fall, dass der Server nicht erreichbar ist.

    Sonst bleibt das Script einfach hängen...
     
  9. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    #9 Manni_HB, 9. Januar 2016
    Zuletzt bearbeitet: 9. Januar 2016
    Ich zieh die Frage zurück!
    PHP:
    ..
    ..
    try {
        
    $connectinfo $cc->check_connect($url$timeout);
        
    $reachable 'true';
        
    $connectinfo['response']; <<<<<<<!!!!!!!! :o:D
    }
    ...
    Bleibt die Frage: Ab wann gibbte datt "ConnectChecker" ?
     
  10. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    #10 Anonymous, 11. Januar 2016
    Zuletzt bearbeitet: 11. Januar 2016
    Der müsste mit Gambio GX2 v2.1.0.0 in den Core gewandert sein. War aber vorher schon Teil des PayPalNG-Paketes.

    Für das Abrufen von Ressourcen kannst du z.B. die REST-Klassen verwenden:

    PHP:
    <?php
    require 'includes/application_top.php';

    try
    {
        
    $request MainFactory::create('RestRequest''GET''http://www.gambio.de/');
        
    $restservice MainFactory::create('RestService');
        
    $restservice->setTimeout(10);
        
    $response $restservice->performRequest($request);
    }
    catch(
    Exception $e)
    {
        
    $errorMessage $e->getMessage();
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <title>REST-Beispiel</title>
    </head>
    <body>
    <?php if(!empty($errorMessage)): ?>
        <h2>ERROR</h2>
        <p><?= $errorMessage ?></p>
    <?php else: ?>
        <h2>Response</h2>
        <pre><?php echo htmlspecialchars((string)$response); ?></pre>
    <?php endif ?>

    </body>
    </html>
    Die REST-Klassen sind ab v2.4 im Core (kamen mit PayPal3).

    Den reinen Response-Body bekommt man übrigens mit $response->getResponseBody().