Logotipo de PHPIgual el título de esta entrada no es el más adecuado, pero, es el que se me ha ocurrido. Ya veremos. Lo que quiero plantear es lo importante de utilizar ciertas constantes "bandera" para impedir el proceso por separado de determinados "scripts", bien porque este no tenga sentido alguno, en principio, bien por evitar posibles problemas de seguridad, y también para evitar los reportes de errores de PHP, que no siempre pueden estar configurados en un determinado servidor tal y como quisiéramos.

Seguramente no descubriré nada nuevo a nadie. Imagina que un determinado "script" de PHP es el encargado a su vez de requerir otros "scripts" necesarios. Es una de las características que hacen poderoso a PHP a la hora de "modularizar" ciertas páginas web, la posibilidad de utilizar archivos a modo de "plantilla", por ejemplo, es muy común contar con "scripts" tales como "index.php", "header.php" y "footer.php". A "header.php" y a "footer.php" no tiene sentido "llamarles" por separado, puesto que será "index.php" quien los requiera.

Ahora bien, ¿qué ocurre si se llama a "footer.php" por separado? Alguien con mejores o peores intenciones puede tratar de hacerlo, ¿y entonces qué ocurre? Pueden ocurrir varias cosas, evidentemente, depende de qué sea lo que haga exactamente el "footer.php", pero, en todo caso lo que tenemos que mirar es que es un "script" que no debe ser procesado por separado, que no tiene sentido, así que tenemos que evitarlo, y esto es muy sencillo de llevar a cabo utilizando alguna constante que nos sirva de "bandera".

Así, en "index.php" podemos definir cierta constante:

define('APP_INDEX_OK', true);
 
require('header.php');
 
// Código del script
 
require('footer.php');

Y, tanto en "header.php" como en "footer.php" averiguar si nuestra constante está definida, para, si no lo está, no continuar adelante:

if(!defined('APP_INDEX_OK')){
  exit;
}

Terminar o no la ejecución del "script" es ya algo más o menos opcional, quiere decirse, si se trata de algo más o menos sencillo, podríamos redirigir a quien fuera que pidiera los "scripts" "header.php" o "footer.php", de este modo:

if(!defined('APP_INDEX_OK')){
  header('Location: ./index.php');
  exit;
}

Pero, en todo caso, evitamos el proceso de dichos "scripts" de forma separada. Ya dije arriba que lo hacemos por varios motivos. No tiene sentido que esos "scripts" se procesen por solitario, pero, es que, de permitirlo, podemos encontrarnos con consecuencias inesperadas. Por ejemplo, es probable que "footer.php" utilice ciertos recursos, ciertas variables, que dependen de que la aplicación se iniciara por el punto de entrada predeterminado: "index.php".

En este caso, el servidor podría arrojar una serie de errores PHP, que, como sabes, conviene ocultar en todo caso, puesto que proporcionan información que puede ser utilizada por según qué personas para fines nada sanos, por decirlo así. Comprobando que nuestra constante está definidida, y no permitiendo la ejecución de este tipo de "scripts", nos quitamos del medio posibles problemas desagradables. Estarás de acuerdo conmigo.