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

    Um zu prüfen, ob ein Server erreichbar ist habe ich Folgendes gestrickt:
    PHP:
    $source = "http://www.gambio.de";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $source);    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $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

    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

    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

    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

    Es sind nur "Shop-Server".

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

    if (
    $fp) { echo 'Fein - erreichbar'; } 
    :confused:
     
  6. Anonymous

    Anonymous Erfahrener Benutzer Mitarbeiter

    … die sowieso cURL können müssen. :)

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

    PHP:
    $requestUrl = 'dingsbumm.eu';            
    $fp = @fsockopen($requestUrl, 80, $errno, $errstr, 10);

    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

    Ja wie geil ist das denn? :eek:;):rolleyes:

    Habt Ihr womöglich für diesen ganzen Kram...
    PHP:
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $UrlFirstCheck);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    $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

    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

    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" ?
     
    Zuletzt bearbeitet: 9. Januar 2016
  10. Anonymous

    Anonymous Erfahrener Benutzer Mitarbeiter

    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().
     
    Zuletzt bearbeitet: 11. Januar 2016