Incluyendo archivos en PHP
Reutilizar código fue una de las primeras ventajas de PHP que le permitió ganar en popularidad.
include
y require
son una de las herramientas más poderosas en PHP, ya que te permiten insertar y evaluar archivos externos, como scripts PHP, HTML, o plantillas. Un uso típico es incluir cabeceras y pies de página en un sistema de plantillas, pero las posibilidades son infinitas.
Include
La sentencia include
inserta y evalúa un archivo
especificado. Puedes incluir archivos locales o, en algunos casos,
remotos (aunque esto es desaconsejado por seguridad). Ejemplo:
<?php
include 'header.php';
?>
Esto inserta el contenido de header.php
en el punto
donde se llama. Si el archivo contiene código PHP, debe estar dentro de
etiquetas <?php ?>
, ya que PHP pasa a modo
HTML fuera de estas etiquetas.
Ejemplo de archivo incluido
(header.php
):
<?php
declare(strict_types=1);
$titulo = "Mi Sitio Web";
?>
<header>
<h1><?php echo htmlspecialchars($titulo); ?></h1>
</header>
Notas: Por seguridad usa (string)
para forzar tipos
en variables incluidas:
<?php
$titulo = 123; // De una fuente externa
echo (string)$titulo;
?>
- Si el archivo no existe,
include
emite una advertencia (E_WARNING
) y continúa la ejecución. - Puedes incluir archivos remotos (por ejemplo,
include 'http://example.com/script.php';
), pero evítalo por riesgos de seguridad (inyección de código remoto). Configuraallow_url_include = Off
enphp.ini
para mayor seguridad.
Require
require
es similar a include
, pero si el
archivo no existe, produce un error fatal (E_COMPILE_ERROR
)
y detiene la ejecución:
<?php
require 'config.php';
?>
Ejemplo de archivo incluido
(config.php
):
<?php
declare(strict_types=1);
const DB_HOST = 'localhost';
?>
Diferencia clave: - include
continúa
si el archivo falta (advertencia) mientras require
detiene el
script si el archivo falta (error fatal).
Ambas sentencias pueden usarse condicionalmente:
<?php
if (true) {
include 'header.php'; // O require
}
?>
Include_once y Require_once
include_once
y require_once
garantizan que
un archivo se incluya solo una vez, evitando redefiniciones de
funciones, clases, o variables:
<?php
const ARCHIVO_CONFIG = 'config.php';
include_once ARCHIVO_CONFIG;
require_once ARCHIVO_CONFIG;
?>
Nota: Usa constantes para nombres de archivos, mejorando la mantenibilidad:
<?php
const HEADER = 'header.php';
include_once HEADER;
?>
Ejemplo práctico:
<?php
// archivo funciones.php
function saludar(): string {
return "Hola, mundo!";
}
// archivo principal
include_once 'funciones.php';
include_once 'funciones.php'; // Ignorado
echo saludar(); // Imprime: Hola, mundo!
?>
Alcance de variables y paths
El código incluido hereda el alcance de variables del archivo que lo llama. Por ejemplo:
<?php
$color = "azul";
include 'colores.php';
?>
colores.php:
<?php
echo "El color es $color\n"; // Imprime: El color es azul
?>
Para los paths, el directorio de trabajo es el del script principal, no el del archivo incluido:
<?php
// index.php
include 'anexos/footer.php';
?>
footer.php:
<?php
// Correcto: usa el path relativo al script principal
include 'anexos/notes.php';
?>
Usa __DIR__
para paths robustos:
<?php
include __DIR__ . '/anexos/footer.php';
?>
Valor de retorno
include
y require
devuelven 1
si el archivo se incluye con éxito, o el valor de return
si
el archivo lo especifica:
<?php
// config.php
return ['host' => 'localhost'];
// index.php
$config = include 'config.php';
print_r($config); // Imprime: Array ( [host] => localhost )
?>
Seguridad y buenas prácticas
- Verifica existencia: Usa
file_exists()
antes de incluir:
<?php
if (file_exists('header.php')) {
include 'header.php';
} else {
echo "Archivo no encontrado\n";
}
?>
- Evita archivos remotos: Desactiva
allow_url_include
enphp.ini
. - Usa rutas absolutas:
__DIR__
o constantes para evitar errores en paths. - Protege variables: Sanitiza datos incluidos con
htmlspecialchars()
o casting. - Evita inclusiones dinámicas inseguras:
<?php
// Inseguro: permite inyección
include $_GET['archivo'];
// Seguro: valida opciones
$archivo = $_GET['archivo'] ?? '';
if (in_array($archivo, ['header.php', 'footer.php'])) {
include $archivo;
}
?>
Ejemplo completo: Sistema de plantillas
index.php:
<?php
declare(strict_types=1);
$titulo = "Bienvenidos";
$contenido = "Este es el contenido principal.";
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo htmlspecialchars($titulo); ?></title>
</head>
<body>
<?php include 'header.php'; ?>
<main>
<?php echo htmlspecialchars($contenido); ?>
</main>
<?php include 'footer.php'; ?>
</body>
</html>
header.php:
<?php
declare(strict_types=1);
?>
<header>
<h1><?php echo htmlspecialchars($titulo); ?></h1>
<nav>
<a href="/">Inicio</a> | <a href="/about">Acerca</a>
</nav>
</header>
footer.php:
<?php
declare(strict_types=1);
include __DIR__ . '/notes.php';
?>
<footer>
<p>© 2025 Mi Sitio Web</p>
</footer>
notes.php:
<?php
declare(strict_types=1);
echo "<p>Nota: Este sitio usa plantillas.</p>\n";
?>
Salida:
<!DOCTYPE html>
<html>
<head>
<title>Bienvenidos</title>
</head>
<body>
<header>
<h1>Bienvenidos</h1>
<nav>
<a href="/">Inicio</a> | <a href="/about">Acerca</a>
</nav>
</header>
<main>
Este es el contenido principal.
</main>
<p>Nota: Este sitio usa plantillas.</p>
<footer>
<p>© 2025 Mi Sitio Web</p>
</footer>
</body>
</html>