Avatar ·

¿Cuál es la diferencia entre include, require, include_once y require_once en PHP?

¡Hola a todos! Acabo de empezar a aprender PHP y no logro entender la diferencia entre estas cuatro construcciones para incluir archivos. Parece que todas hacen lo mismo: insertar código de otro archivo.

Tengo un archivo config.php con la configuración de la base de datos:

<?php
$host = 'localhost';
$db = 'mydb';
$user = 'root';
$pass = '';
?>

Y lo incluyo en index.php de diferentes maneras:

<?php
include 'config.php';
// o
require 'config.php';
// o
include_once 'config.php';
// o
require_once 'config.php';
?>

Las cuatro opciones funcionan y veo las variables de config.php. ¿Cuál es entonces la diferencia? ¿Cuándo usar cada una?

También noté algo extraño: si escribo include 'config.php' dos veces, obtengo un error de que las variables se redefinen. Pero con include_once no tengo ese problema. ¿Por qué sucede esto?

Y lo principal: ¿qué pasará...