Vérifier si un doctype existe déjà sur la page

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

sur ma page, quand j'ai une erreur, j'inclue une page d'erreur. Mais certaine page possède déjà le "Doctype html", alors que d'autre non. Je voulais savoir si ça posais problème qu'il se mette à double ou non. Le cas échéant, le supprimer ou le détecter si possible.

En vous remerciant, WinXaito.

Édité par firm1

+0 -0
Staff

N'ayant pas bien compris ton besoin, je vais tenter de répondre à la question "brute" :

gageons que le contenu de ta page est contenu dans la variable $contenu_page

1
2
3
4
5
6
7
<?php
if($contenu_page == '' || str_pos('DOCTYPE html', $contenu_page) === false){
    $contenu_page = "<! DOCTYPE html >". (empty($contenu_page)?'':$contenu_page);
}
/* et à la fin */

echo $contenu_page;//affiche la page entière

Édité par artragis

+0 -0
Auteur du sujet

Bonjour, je ne sais pas si c'est bien ce que j'attend. Je vais essayer de détailler un peu plus:

index.php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width; initial-scale=1.0;">
    </head>
    <body>
        <?php 
            require_once("error.php");
        ?>
    </body>
</html>

Un autre fichier php:

1
<?php require_once("error.php");?>

Et enfin le fichier error.php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width; initial-scale=1.0;">
    </head>
    <body>
        <p>ERROR</p>
    </body>
</html>

Comme on peu le voir, avec index.php, le toute l'en-tête et le body sont ajouté à nouveau.

+0 -0

Pour répondre à ta question normalement le navigateur s'arrête au premier Doctype, et si c'est le même qui est en double tu ne risques rien. Il s'agit donc juste d'une question de goût du développeur pour qualifier ceci de "propre" ou "pas propre".

Pour la solution d'artragis, c'est assez contraignent d'utiliser une variable. Il faudrait plutôt voir avec la temporisation de sortie, regarde ob_start().

EDIT : Tu as posté ta réponse pendant que j'écrivais la mienne. Ce n'est pas très stable de déclarer deux fois les éléments (html, body, head…).

Édité par anonyme

+0 -0

Il s'agit donc d'un problème de structuration. Il faut peut-être remettre en question ta façon de faire. Ou réfléchir un peu plus à la structure du code avant de foncer tête baissée. ;)

Ou utiliser la temporisation de sortie. :D

Édité par anonyme

+2 -0

J'ai mis un lien vers la doc de la temporisation de sortie.

La réponse est envoyé uniquement quand ob_end_flush() est appelé après ob_start(). Tu peux même appeler plusieurs fois la fonction pour hiérarchisé le traitement.

Il y a aussi la possibilité de "streaming" de ta réponse, c'est-à-dire envoyer une petite partie de ton code avec ob_flush(), sans attendre d'envoyer toute la page (tu peux tester avec sleep).

La doc explique très bien la temporisation.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte