Comment afficher une page HTML

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment afficher une page HTML

par Sékiltoyai » 01 juil. 2007, 15:40

Ok, c'est bon à savoir ca. Par contre, je vais encore jouer sur les mots, mais on peut aussi faire un affichage de texte, même avec un header. Ce ne sera pas pris en compte par l'immense majorité des navigateurs, mais on peut le faire.

par sadeq » 01 juil. 2007, 15:30

Regarde mon exemple dans les posts précédents, le programme qui fait le header() continue après avoir appelé la fonction header("Location: ....") donc on peut trés bien placer des instructions après un header() si ces instructions sont autres que le echo (affichage) par exemple, écrire dans fichier, dans une base de données ou autres opérations batch.
La redirection par header("Location: ...") ne se fait réellement qu'après la fin du programme appelant.

Mais revenons sur l'echo, le programme appelant un header() ne doit pas en théorie et en pratique afficher ni avant ni après un header() car s'il affiche du texte avant d'envoyer un entête HTPP par header("Location: ...") ça risque de bloquer ce header() et s'il réussi à envoyer un entête HTTP par header("Location: ...") tout affichage est vain car l'entête "Location:" désigne une source d'affichage externe.

Ne confondez pas header("Location: ...") avec tout autre header() possible avec cette fonction.

par Sékiltoyai » 01 juil. 2007, 15:24

Oui, en pratique, je suis d'accord. Mais ce que je voulais dire, c'est que, même si c'est inutile, on peut très bien envoyer du contenu en même temps que ce header avec du buffering, après ca dépend de la manière dont le navigateur traite le header, c'est à dire s'il coupe la connexion dès qu'il reçoit ce header, ou bien s'il finit de télécharger l'ensemble des données.

par sadeq » 01 juil. 2007, 14:56

J'ai dit "des echos de contenu" c'est à dire un affichage de texte car quand un programme est voué à faire un header("Location: ...") c'est qu'il est sensé rediriger la réponse au client vers un autre serveur donc ce n'est pas à lui de répondre.

Exemple:
<?php
 echo "texte 1"; //est une erreur car le programme va faire une redirection plus tard
 header("Location: destination..."); //ici le header() ne peut pas fonctionner car un echo était déjà envoyé
 echo "texte 2"; //est une erreur car un header() était déjà envoyé
?>

par Sékiltoyai » 30 juin 2007, 14:02

il ne doit pas faire des echos de contenu.
Pourquoi donc ?
On peut très bien écrire du contenu tout en envoyant un header('Location: ...'). Ce n'est pas super utile, mais il n'y a aucune raison que l'on n'ai pas le droit...

par sadeq » 29 juin 2007, 22:03

Effectivement la redirection est effectuée au niveau du navigateur initiateur de la communication qui en recevant le header("Location:...") bascule vers le serveur appelé.

Donc il y'a:
navigateur ---> serveur1 ---(header("location: serveur2"))---> navigateur ---> serveur2 ---(réponse)---> navigateur

Remarques:
  • * serveur1 et serveur2 peuvent être les mêmes
    * En effectuant le header("Location: ...") le serveur1 réécrit l'entête HTTP et la renvoit, il ne doit pas faire des echos de contenu.

par Sékiltoyai » 29 juin 2007, 14:38

Ca ne semble pas clair dans ton explication, mais lors de l'utilisation de header(), la réponse est envoyée au client, et les headers ne sont pas traités par le serveur mais par le client, c'est à dire que si dans ta page tu utilises header('Location: ...'); , le serveur envoie une réponse au client avec un entête Location: ... , et le client appelle ensuite la page ... indiquée par le header.

par sadeq » 29 juin 2007, 09:04

Exactement,
Les diférences sont nombeuses entre header(), include() et readfile() notamment en terme d'espace de travail (programme) et de portée de variables.

Header
Après l'appel de header("Location: ..") le programme appelant continue à s'exécuter et s'arrête après un exit (implicite ou explicite).

Après l'exit de l'appelant, header("Location: ..") engage le serveur appelé à charger une page/programme, l'exécuter (s'il y'a code) et renvoyer au client la réponse définitive.

Pour le programme appelant, seules les instructions sans echo sont exécutées après un header()
Ceci dit, le code éventuel de la page appelée par header() n'a pas accès aux variables du programme appelant les espaces de travail sont distincts.

Y-a-t-il alors une possibilité de partager des données entre l'appelant et l'appelé dans le cadre d'une liaison avec header()? La réponse est oui, bien sûr, on peut passer les données partagées sous forme de paramètres par la méthode GET (non cryptée) dans l'URL du header() ainsi la page/programme appelée aura accès aux données dans son espace de travail via la variable super-globale $_GET. Si l'on préfére une méthode de transmission protégée, en lecture/écriture et durable des données on peut utiliser des variables de session via la variable super-globale $_SESSION.

Côté affichage, quand l'appelant se termine après un header() c'est le résultat de l'appelé par le header() qui sera affiché au client car le processus de l'appelant accupe à lui seul le buffer de sortie (Mais attention la sortie standard doit être libre auparavant, le programme appelant ne doit avoir rien affiché avant un header())

Exemple:
La page principale "header.php"
<?php 
session_start();
$variable1 = "toto1";
$_SESSION["variable2"] = "toto2";

//header
header ("Location: page_header.php?variable1=$variable1");

//Tentative vaine d'affichage après un header
echo "Je suis le programme appelant";

//Routine traitée même si un header est lancé
file_put_contents("message_apres_header.txt", "Le programme appelant a fait un header le ".date("d/m/Y H:i:s"));

//arrêt explicie de la procédure en cours
exit;
?>
la page appelée "page_header.php"
<?php 
session_start();
?>
<h1>Page Header</h1>
<?php 
echo "j'ai reçu le(s) paramètre(s) GET suivant(s):<pre>"; print_r($_GET); echo "</pre>";
echo "j'ai reçu le(s) paramètre(s) SESSION suivant(s):<pre>"; print_r($_SESSION); echo "</pre>";
?>
Schéma de fonctionnement

Programme principal ---> appel header() et continue ---> puis fin du principal appelant (aucun echo)
---> redirection = Chargement et exécution de la page/programme appelée ---> fin de l'appelé = réponse au client

par fab » 29 juin 2007, 01:01

Dans ce cas c'est une redirection et non un affichage d'un fichier annexe sur la page courante.

par sadeq » 29 juin 2007, 00:11

oui

par Sékiltoyai » 28 juin 2007, 22:01

Tu veux dire
header('Location: fichier.html');
Non ?

par sadeq » 28 juin 2007, 17:23

moi je préconise la fonction header()
Et l'algorithme serait:
Suivant les options postées, afficher une page html.
C'est à dire:

Code : Tout sélectionner

si (règle 1) { header("Location: page1.htm"); } si (règle 2) { header("Location: page2.htm"); } ... etc.
Car contrairement à ce qu'on peut penser, include() n'est pas faite pour la redirection automatisée mais pour inclure des modules externes supplémentaires à la procdure de travail.
Et readfile() pour la lecture de fichiers.

C'est header() qui contrôle la réponse HTTP et peut même fixer des options de l'entête HTTP telque par exemple le format du flux, le langage etc...

par Calimero » 28 juin 2007, 17:11

include "tonfichier.html";
Ou encore plus adapté, s'il ne s'agit que de contenu html : readfile() .

par fab » 28 juin 2007, 16:59

include "tonfichier.html";

Comment afficher une page HTML

par damain » 28 juin 2007, 16:57

Bonjour à tous et à toutes
je suis nouveau en ce qui concerne le langage PHP. Mais je voudrais parvenir à afficher une autre page HTML. Voici ce qui en est:
1 Mon site est fini mais pas encore mis sur la toile (à cause du problème)
2 il y a un repertoire (ou dossier) bulletin dans lequel il y a plusieurs pages HTML (Exple: Bulletin_Janvier; Bulletin_Fevrier; Bulletin_Mars etc)
3j'ai créé une page web avec un formulaire dans lequel l'internot devra remplir des champs puis cliquer sur un Bouton OK
---> Se que je voudrais c'est parvenir à afficher l'unique page suivant les options de l'internot. J'ai tout essayé mais en vain alors je cris aux secours, que ceux qui y sont deja parvenu ou qui ont une idée de vouloir bien m'aider car je ne parviens pas à finaliser et à mettre sur la toile mon site.