Yo en lo particular tiendo a usar una función condicional en el header para definir cosas como el doctype, datos de cabecera y similares en base al soporte que ofrece el user agent, pero si hay algo por lo que deberías empezar es tener en cuenta lo que te dice pateketrueke con respecto al html.
Cuando pretendo utilizar php para generar el contenido, por separado, de cosas como el header, body y footer, lo que hago es primero diseñar la página en html normal, sencillo y estático
Valido esa página y luego comienzo a separar lo que iré para cada sitio, lo cual en la mayoría de los casos terminan siendo algo similar a:
Código PHP:
<?php
require_once 'header.php';
?>
<body>
....
</body>
<?php
require_once 'footer.php';
?>
Pero depende mucho también del dinamismo del sitio, el body podría estar compuesto de un conjunto de archivos php interactuando entre sí para generar lo que llegará al user agent lo cual es lo que termina definiendo la estructura que se deba implementar.