Dans la programmation PHP, la fonction d'en-tête () est un outil très courant utilisé pour envoyer des informations d'en-tête HTTP brutes au client, telles que le réglage de la redirection, la spécification du type de contenu, le contrôle du cache, etc. Cet article vous donnera une réponse détaillée.
Premièrement, nous devons comprendre ce qu'est le modèle CLI PHP. CLI (interface de ligne de commande) consiste à exécuter directement les scripts PHP via la ligne de commande, plutôt que de les analyser via un serveur Web (comme Apache et Nginx). Habituellement, nous entrons:
php script.php
Dans ce cas, PHP n'agit plus comme un outil pour générer des pages Web, mais n'est qu'un exécuteur de script normal.
La fonction principale de la fonction d'en-tête () est d'envoyer des informations d'en-tête HTTP au client (navigateur), telles que:
header('Location: https://m66.net/welcome');
exit;
Ce code indiquera au navigateur de rediriger vers l'URL spécifiée.
Mais Remarque: En-tête () ne publie pas le contenu réel, il modifie simplement l'en-tête de réponse . En d'autres termes, son rôle dépend entièrement du protocole HTTP entre PHP et le serveur Web.
Réponse directe: il ne peut pas être utilisé, ou il n'a pas de sens si vous l'utilisez .
Les raisons sont les suivantes:
En mode CLI, PHP écrit directement la sortie vers la sortie standard (STDOUT), sans protocole HTTP, sans en-tête de demande et sans en-tête de réponse.
La fonction Header () vérifie en interne si elle s'exécute dans un environnement avec CLI SAPI (API Server). Si c'est le cas, il ne générera pas de véritable en-tête HTTP lors de l'appel, et ne rapportera pas d'erreur, mais le résultat est simplement qu'il n'a aucun effet sur STDOUT.
Par exemple, exécutez le code suivant:
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok']);
Dans un environnement Web, le navigateur reçoit l'en-tête de type contenu et le reconnaît comme JSON. Mais courez sous la CLI:
php script.php
Vous ne verrez que la sortie:
{"status":"ok"}
Parce que le terminal ne comprend pas ou ne gère pas du tout les en-têtes HTTP.
Pour résumer:
? L'appel à en-tête () sous CLI ne rapportera pas d'erreur, mais il équivaut à une opération non valide.
? Aucun en-têtes de réponse HTTP n'est envoyé car la CLI n'a pas de couche HTTP.
? Vous pouvez continuer à utiliser Echo , print_r et d'autres fonctions pour sortir du texte sur le terminal.
Si vous appelez également en-tête () lors de la rédaction de scripts CLI, il est recommandé:
Confirmez si le code sert à la fois le Web et la CLI. Si c'est le cas, il est préférable d'ajouter la détection de SAPI: