10
votes

Obtenir le code de réponse en-tête

Cela fait partie d'un script PHP que je mets ensemble. Fondamentalement, un domaine ($ Domain1) est défini sous une forme et un message différent est affiché, en fonction du code de réponse du serveur. Cependant, j'ai des problèmes pour que cela fonctionne. Le code de réponse à 3 chiffres est tout ce que je suis intéressé.

Voici ce que j'ai jusqu'à présent: xxx


2 commentaires

On dirait que vous avez une indentation / des accolades drôles là-bas.


Quels problèmes as-tu? Veuillez coller les erreurs pertinentes que vous obtenez. En outre, en supposant que le code que vous avez collé reflète avec précision votre script, aucun du code ci-dessous Votre instruction de retour sera exécutée.


4 Réponses :


25
votes
$domain1 = 'http://google.com';

function get_http_response_code($domain1) {
  $headers = get_headers($domain1);
  return substr($headers[0], 9, 3);
}

$get_http_response_code = get_http_response_code($domain1);

if ( $get_http_response_code == 200 ) {
  echo "OKAY!";
} else {
  echo "Nokay!";
}

1 commentaires

Travailler pour la plupart des choses, cependant si le site envoie une redirection, ce code redirect est en premier, c'est-à-dire $ en-têtes [0] = 301; $ en-tête [5] = 404 qui pourrait signifier que son fonctionnement ou non travail.



7
votes

Si vous avez PHP 5.4.0+, vous pouvez utiliser le http_reesponse_code () fonction. Exemple: xxx


5 commentaires

Je ne sais pas pourquoi vous répondez à une question de 2 ans (qui a été répondu il y a 2 ans) mais, merci pour l'info :)


Oh, je recherchais une solution liée au code de réponse HTTP et a ouvert ce fil. J'ai posté ceci au cas où quelqu'un arrive ici d'une manière ou d'une autre. meilleures salutations!


http_reesponse_code () est destiné à définir le code sortant (par exemple sur le navigateur), ce qui ne vérifie pas le code entrant (à partir d'un serveur), ce qui est ce que l'OP voulait faire.


@Cjdennis Yep, @xmedeko a raison, selon la documentation int http_response_code ([Int $ réponse_code]) Le paramètre $ interven_code est facultatif. Si défini, vous modifiez le code sortant, si vide, vous récupérez le code actuel reçu par le navigateur.


@andufo Cela ne fonctionne pas pour ce que l'OP a demandé. Cela n'affectera que le code de réponse du code qui va revenir au navigateur. L'OP a voulu obtenir les en-têtes d'un autre site Web entièrement que votre réponse est tout à fait fausse.



0
votes

Voici ma solution pour les personnes qui ont besoin d'envoyer un email lorsque le serveur Down:

$url = 'http://www.example.com';

while(true) {

    $strHeader = get_headers($url)[0];

    $statusCode = substr($strHeader, 9, 3 );

    if($statusCode != 200 ) {
        echo 'Server down.';
        // Send email 
    }
    else {
        echo 'oK';
    }

    sleep(30);
}


0 commentaires

0
votes

Vous êtes directement retourné afin que la fonction ne soit pas exécutée d'autre condition que vous avez écrite. Il est toujours préférable de maintenir deux fonctions.

function get_http_response_code($domain1) {
    $headers = get_headers($domain1);
    return substr($headers[0], 9, 3); //**Here you should not return**
    foreach ($get_http_response_code as $gethead) { 
        if ($gethead == 200) {
            echo "OKAY!";
        } else {
            echo "Nokay!";
        }
    }
}


0 commentaires