Índice de contenidos
Instalación en Windows
Instalación en Ubuntu
Servidores seguros
Páginas dinámicas
Sintaxis básica
Operaciones
Arrays
Formatos de presentación
Operadores
Bucles
Extraer y ord. información
Funciones
Ficheros externos
Imágenes dinámicas
Gestión de directorios
Cookies y sesiones
Clases y objetos
Ficheros en formato PDF
Bases de datos MySQL
PHP y XML
PDO - Bases SQLite / MySQL
MySQL a traves de misqli
Algo de JavaScript y AJAXUtilización de ficheros externos
PHP dispone de funciones que permiten insertar en un documento una parte o la totalidad de los contenidos de otro. Esta opción resulta muy interesante, tanto desde el punto de vista operativo como en lo relativo a la seguridad.
Estos son algunos de los recursos que permiten ese tipo de inclusiones:
include("nombre del fichero")El parámetro nombre del fichero es una cadena que contiene el path y el nombre del fichero cuyos contenidos pretendemos incluir. Pueden incluirse ficheros con cualquier extensión aunque es muy habitual utilizar archivos con extensión .inc.php.
La primera parte (inc) nos permitirá identificar este tipo de ficheros mientras que la extensión php obligaría a que (si un usuario malicioso pretende visualizar el contenido del fichero) fuera interpretado por PHP y, como consecuencia de ello, solo devolvería el resultado sin permitir la visualización de informaciones privadas (contraseñas por ejemplo) que pudiera contener.
Este primer ejemplo de fichero a incluir contiene únicamente texto y etiquetas HTML pero no contiene ninguna llamada a ninguna función PHP, ni tampoco ningún script de este lenguaje. Lo hemos guardado con dos extensiones: ejemplo1.inc.php y ejemplo1.inc.
Si pulsas sobre las opciones Ver ejemplo podrás comprobar que los resultados de visualización son distintos dependiendo de la extensión de cada fichero.
<h3><font color="#ff0000">Este sería un texto
que se incluiría dentro de la página
mediante las funciones
include o require</font></h3><br>
Este tipo de ficheros pueden contener: texto, etiquetas HTML y funciones. Si no contiene funciones se podrá insertar tantas veces como se invoque y se insertará, además, todo su contenido tal como puedes ver en el ejemplo.
Si el fichero contiene funciones solo podrá ser invocado una vez ya que si se hiciera una segunda llamada se produciría un error por duplicidad en los nombres de las funciones. Como verás en el ejemplo, es posible incluir cualquier tipo de funciones tanto las de la forma:
<?php function nombre { ?>con las que se pueden incluir porciones de código HTML en cualquier script, como las del tipo:
function nombre {que permiten invocar funciones repetitivas a partir de cualquier documento PHP.
<?php
function Encabezado() { ?>
<html>
<head>
<title>
Pruebas con la función include
</title>
</head>
<BODY>
<center><img src="./images/cabina.jpg"><br>
<font size=6 face="Times" color="#0000ff">Pruebas PHP</font><br>
<hr width=75%>
<?php } ?>
<?php function Pie() { ?>
<center><hr width=50%>
<font size=2 face="Arial" color="#ff0000">Luchando con PHP</font>
<hr width=50%></center>
</body>
</html>
<?php } ?>
<?php function Calcula($a,$b) {
return $a*$b;
} ?>
Definidas las funciones en el fichero a incluir y colocado al comienzo de la página un script que contenga el include y la ruta de ese fichero, bastará con invocar cualquiera de las funciones, en cualquier punto del documento, para que esa llamada sea sustituida por el resultado de la ejecución de la función.
Como es lógico, solo serán visualizados en el navegador del cliente los resultados de la ejecución de las funciones que hayan sido invocadas.
<!-- empezaríamos incluyendo el fichero que contiene las funciones. No escribiría nada hasta que las funciones que contiene no fueran invocadas //--> <?php include("ejemplo2.inc.php") ?> <!-- Insertaremos un script PHP que invoque la función encabezado. Debe llevar las etiquetas de apertura y cierre <?php y ?> de PHP //--> <?php Encabezado() ?> <!-- Insertaremos código HTML según nuestra conveniencia //--> Aquí iría el contenido de la página<br> .... esto es texto HTML................<br> ...........................<br><br><br> <!-- Incluimos el fichero ejemplo1.inc.php y dado que no contiene ninguna función, insertará aquí todo su contenidos //--> <?php include("ejemplo1.inc.php") ?> <!-- Insertaremos más código HTML --> ....................<br> ...........................<br><br><br> <!-- Incluimos nuevamente el fichero ejemplo1.inc.php Puede repetirse la inclusión porque no contiene funciones, si las contuviera habría un conflicto de duplicidad porque una funcion no puede estar definida dos veces con el mismo nombre. La instrucción include como en todos los casos deberá ir dentro de un script PHP y por tanto entre <?php y ?> //--> <?php include("ejemplo1.inc.php") ?> <!-- Ahora ejecutaremos la funcion PHP Calcula() pasando como parámetros 7 y 9. El return de la función nos devolverá el resultado que imprimiremos aquí //--> <?php print "Aquí va el resultado de la multiplicación: ".Calcula(7,9); ?> <!-- Por último invocaremos la función Pie() --> <?php Pie() ?>
La función require()
Tiene la misma sintaxis que include y una funcionalidad similar, aunque con algunas diferencias. Igual que ocurría con aquél, cuando un fichero es invocado por require esa llamada lo que hace es sustituirse a sí misma por el contenido del fichero especificado.
A diferencia de include, la etiqueta require lee y escribe –en el documento a partir del que es invocada– el archivo referenciado completo y no acepta condicionales que sí son aceptados por include.
Evitar errores por duplicidad de llamadas
Tanto en el caso de usar la instrucción include como con require, si se intenta incluir dos o más veces un fichero que contenga funciones, se producirá un error (PHP no permite que dos funciones tengan el mismo nombre) y se interrumpirá la ejecución del script.
Los errores de ese tipo pueden evitarse usando las funciones:
include_once("fichero")que a diferencia de include y requiere van a impedir que un mismo fichero pueda incluirse dos veces.
En los ejemplos vas a poder comprobar que no aparece el mensaje de error cuando se utiliza esta función y que el texto que –anteriormente– era incluido dos veces ahora solo aparece una vez.
<!-- Repetimos la inclusión de ambos ficheros pero veremos que no aparece mensaje de error por duplicidad de funciones y además pese a hacer una doble inserción de ejemplo1 solo se visualiza una vez por efecto del filtro establecido por include_onde //--> <?php include_once("ejemplo2.inc.php") ?> <?php Encabezado() ?> Aquí iría el contenido de la página<br> ....................<br> ...........................<br><br><br> <?php include_once("ejemplo1.inc.php") ?> ....................<br> no aparecerá nada aquí debajo<br><br><br> <?php include_once("ejemplo1.inc.php") ?> <?php include_once("ejemplo2.inc.php") ?>
El resultado de este otro ejemplo es idéntico al anterior. Sólo hemos sustituido include_once por require_once, que tiene una funcionalidad similar a la anterior.
<?php require_once("ejemplo2.inc.php") ?> <?php Encabezado() ?> Aquí iría el contenido de la página<br> ....................<br> ...........................<br><br><br> <?php require_once("ejemplo1.inc.php") ?> ....................<br> ....nada de aquí en adelante ...<br><br><br> <?php require_once("ejemplo2.inc.php") ?> <?php require_once("ejemplo1.inc.php") ?>
Comprobando los ficheros incluidos
PHP dispone de dos funciones que permiten recoger en un array la lista de ficheros que se han insertado en el documento por medio de alguna de las instrucciones: require_once, require, include_once e include. Tales funciones son estas:
$v=get_included_files()Recoge en un array escalar (contenido en la variable $v) los nombres de los ficheros incluidos en el archivo en uso por include_once.
$v=get_required_files()Igual que la función anterior recoge en un array escalar (contenido en la variable $v) los nombres de los ficheros incluidos en el archivo en uso mediante require_once.
<?php include_once("ejemplo2.inc.php") ?> <?php Encabezado() ?> <?php include_once("ejemplo1.inc.php") ?> <?php Pie() ?> Lista de fichero utilizados por include
<?php $z= get_included_files(); foreach($z as $clave=>$valor) { echo "Clave: ",$clave," Valor: ",$valor,"<br>"; }; ?>
Mejorando la seguridad
Hemos hablado de la función show_source, que permitía visualizar el código fuente de los scripts –no solo locales sino de cualquier URL- si esta función no estaba desactivada en el php.ini.
Esa posibilidad de ver no sólo permite el espionaje industrial (ver la técnica de construcción de los scripts, etcétera) sino que permite ver también las claves y contraseñas de acceso a las bases de datos que pudieran contener los scripts.
Aparte de simplificar el trabajo la opción de incluir ficheros externos permite guardar la información confidencial fuera del root del servidor y usarla mediante estas llamadas. De ese modo –show_source– permitiría visualizar el nombre de ese fichero externo pero no su contenido.
Si creáramos un directorio –por ejemplo como subdirectorio de c:\Apache (fuera del root del servidor)– y le ponemos como nombre sg, podríamos guardar allí los ficheros ejemplo2 y ejemplo1, con lo cual sus contenidos no serían visibles con show_source.
En este caso la instrucción include ha de contener el path y sería la siguiente:
include("C:\Apache\sg\fichero").Utilizando include para gestión de fechas
Las funciones que incluye PHP para el manejo de fechas solo contemplan periodos posteriores a 1970. Para el caso de fechas anteriores a esta, existen funciones que pueden descargarse desde: http://phplens.com/lens/dl/adodb-time.zip.
El archivo comprimido contiene un fichero -adodb-time.inc.php- con funciones PHP que se comportan de forma idéntica a las nativas de PHP y que, además, permiten utilizar fechas anteriores a 1970 y valores negativos del tiempo Unix.
Para utilizar estas funciones bastaría con poner en el script include("adodb_time.inc.php"); y sustituir las funciones de fecha de acuerdo con lo que se indica en esta tabla:
| Función PHP | Función Adodb-time |
| getdate() | adodb_getdate() |
| date() | adodb_date() |
| gmdate() | adodb_gmdate() |
| mktime() | adodb_mktime() |