Necesito una!DOCTYPE declaración en un archivo php con html?


Tengo un archivo php con el contenido de mi sitio web. El archivo tiene que ser .php porque primero obtengo algunas variables y luego las uso más tarde en el contenido del sitio web. Como este ejemplo:

<?php
$user_name = $_REQUEST['username'];
?>

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" href="css/style.css" />
</head>
<body>
Welcome <?php echo $username;?>
</body>
</html>

¿Necesito el <!DOCTYPE HTML>, ya que la extensión de archivo es php? Además, ¿se coloca correctamente? ¿Debe venir antes de la etiqueta o en la primera línea de mi archivo?

También noté que si elimino el <!DOCTYPE HTML>, parte de mi código css deja de funcionar...

Muchas Gracias.

Author: Jules, 2013-01-31

10 answers

Sí, necesita un DOCTYPE ya que su navegador solo ve la siguiente parte del código anterior

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Page Title</title>
    <link rel="stylesheet" href="css/style.css" />
</head>
<body>
Welcome THE USER NAME
</body>
</html>

Normalmente coloco la etiqueta PHP cercana y el DOCTYPE juntos como así ?><!DOCTYPE HTML>

 21
Author: Graham Walters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-23 16:07:26

Como otros han dicho, !DOCTYPE es necesario en scripts php que están produciendo HTML. Si estuviera creando una imagen o ejecutando un archivo bash o algo así, la historia sería diferente.

En cuanto a dónde pertenece, es una buena idea ponerlo al principio solo para que no genere accidentalmente algo antes de él, pero si está utilizando variables de sesión o enviando encabezados, querrá asegurarse de hacer esas cosas ANTES de declarar un doctype. Recuerde, no puede haber salida del navegador (incluso espacios en blanco) antes de que se envíen encabezados a través de php o se inicien sesiones.

 6
Author: Derrick Tucker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:32:08

Lamento resucitar a los muertos, pero nadie parece explicar por qué necesita un doctype en HTML (sí, un script PHP que produce HTML es un archivo HTML al final).

Declarar un doctype afecta la forma en que el navegador interpreta su HTML (esto es probablemente por qué su código css puede dejar de funcionar sin un doctype). Básicamente hay 2 maneras: modo peculiares y modo estricto. Este último se adhiere a los estándares, por lo que siempre debe decirle al navegador qué estándar HTML es su código siguiente (hoy en día es probable que desee HTML5 que tiene el tipo de documento más simple: <!DOCTYPE html>).

Ver aquí para una explicación más detallada.

 6
Author: mTorres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-15 05:50:33

Siempre debe poner un Doctype en su html, sin importar cómo se construya el html.

W3 doctype list

 2
Author: wajiw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:28:27

Las mismas reglas para HTML se aplican igualmente, ya sean archivos HTML simples o archivos HTML con PHP incrustado. Necesitas un doctype en cada circunstancia que necesitarías uno en HTML simple.

Por cierto, hay espacios en blanco entre el final del primer bloque oh código PHP y el doctype. Me parece recordar que los espacios en blanco antes del doctype pueden ser problemáticos (aunque eso solo podría aplicarse a XHTML)

 2
Author: GordonM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:28:52

Su salida final es HTML que es lo que usa el doctype. Así que, sí, necesitas uno. Si está rompiendo su CSS entonces su HTML y/o CSS está mal y necesita ser arreglado.

 1
Author: John Conde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:27:39

Sí, deberías tener la declaración DOCTYPE, ya que lo que envías al navegador es HTML, no PHP.

La declaración le dice al navegador que está utilizando HTML 5 y le dice cómo renderizarlo.

 1
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:27:43

PHP realmente no tiene nada que ver con HTML - es solo el código del lado del servidor escupiendo un montón de texto que el navegador interpreta.

Un doctype es una parte crítica de cómo el navegador interpreta el HTML que sigue.

 1
Author: Diodeus - James MacFarlane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 20:29:15

Cuando contienen HTML incrustado, es mejor pensar en los archivos .php como archivos HTML regulares que el servidor ha recibido instrucciones de buscar código dinámico (PHP).

Una declaración válida !DOCTYPE sigue siendo necesaria para que el documento sea semántico.

 1
Author: Jules,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-17 06:00:50
<!DOCTYPE HTML>
<table  style="position:absolute; bottom:20%; right:40%;" width="150">

Si pones <!DOCTYPE HTML> en el archivo php algunos estilos no funcionarán correctamente, algunos problemas de alineación.

 0
Author: Thoppil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-16 12:41:14