Diferencia entre revisiones de «PHP Reutilización de código: Include / Require»
Ir a la navegación
Ir a la búsqueda
Línea 90: | Línea 90: | ||
* Pode darse o caso cando facemos include´s de forma condicional (dentro dun if) no que poida que xa foran cargados os arquivos anteriormente. | * Pode darse o caso cando facemos include´s de forma condicional (dentro dun if) no que poida que xa foran cargados os arquivos anteriormente. | ||
+ | |||
+ | |||
+ | |||
+ | * Os include, a maiores de utilizarse para gardar funcións, constantes ou variables, poden usarse para ter aqueles elementos comúns a todas as páxinas webs do sitio web e non ter que estar a repetir o mesmo código en todas elas. | ||
+ | : Por exemplo, todos os sitios contan cun menú e unha cabeceira que soe ser a mesma. | ||
+ | : O lóxico será ter definido en arquivos include o código dese menú e esa cabeceira e facer un include en todas as páxinas do sitios. | ||
+ | : Desta forma, se necesitamos cambiar algo soamente teríamos que facelo nun arquivo. | ||
+ | |||
+ | |||
+ | * En PHP existe outra forma de facer un 'modelo' cos elementos comúns e que despois todas as páxinas teñan o contido dese modelo máis o seu propio. | ||
+ | : Podedes consultalo [http://wiki.cifprodolfoucha.es/index.php?title=PHP_Conceptos_b%C3%A1sicos_Modelo-Vista-Controlador#Opci.C3.B3n_2 neste enlace da WIKI]. | ||
Línea 129: | Línea 140: | ||
Isto aparece... | Isto aparece... | ||
− | </syntaxhighlight> | + | </syntaxhighlight> |
− | |||
== require_once == | == require_once == |
Revisión del 18:54 22 mar 2017
Sumario
Introdución
- Cando programamos pode darse o caso de que teñamos un código (ven en forma de funcións, variables, constantes ou bloque de código) que teñamos que utilizar en moitas páxinas distintas.
- Nestes casos é conveniente ter o código 'gardado' non arquivo separado e que poidamos utilizalo cando o necesitemos.
- Isto o conseguimos coas ordes: include, include_once, require e require_once.
Include
- Sintaxe: include('[path/]arquivo.inc.php');
- A sentenza 'include' inclúe e avalía o arquivo especificado.
- A sintaxe é:
include "[path/]nomearquivo.inc.php";
- O [path] pode ser relativo ou absoluto. Se se fai relativo será con respecto ao cartafol onde se está a cargar o arquivo php que fai uso do include.
- Podedes atopar arquivos include coa extensión .inc, .php, pero para diferencialos dos arquivos php e para non dar pistas sobre o tipo de arquivo que estamos a utilizar usaremos a extensión .inc.php
- O arquivo .inc.php sempre deberá comezar e rematar coas etiquetas de php: <?php ?> xa que sempre cando facemos uso dun destes arquivos, abandona o modo php e ingresa no modo HTML.
- Vexamos un exemplo:
- Arquivo: FuncionsExternas.inc.php
1 <?php 2 3 /* 4 * Función que crea un array cun número de elementos indicado no parámetro 5 * Os inicializa ao valor null 6 * Parámetros: 7 * $numElementos:número de elementos do array 8 */ 9 function crearArray($numElementos){ 10 $array = array(); 11 for($cont=0;$cont<$numElementos;$cont++){ 12 $array[$cont]=null; 13 } 14 return $array; 15 } 16 ?>
- Arquivo: ReutilzandoCodigo.php
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6 <title>Exemplos de códigos php</title> 7 </head> 8 <?php 9 include ("./FuncionsExternas.inc.php"); 10 ?> 11 <body> 12 <?php 13 $datos = crearArray(10); 14 15 foreach ($datos as $clave => $dato){ 16 printf("Clave:%d - Valor:%s<br />",$clave,$valor==null ? 'Sen dato':$valor); 17 } 18 19 ?> 20 </body> 21 </html>
- Todas as funcións e clases definidas nun arquivo include teñen un ámbito global.
- Fixarse que cando fagamos unha aplicación con acceso a base de datos teremos que facer uso dun usuario/password para facer a conexión e tamén faremos uso de sentenzas SQL ou procedementos almacenados.
- Será unha boa idea gardar ditos datos nun arquivo fora da ruta onde apunte o servidor web.
- Imaxinemos que o noso servidor web apunta por defecto a este cartafol: /var/www/html
- Se as nosas páxinas php se atopan nese cartafol, podemos poñer nun arquivo (a información de login/password e consultas SQL) fora de dito cartafol, por exemplo en /var/www/informacion
- Desta forma ninguén vai poder acceder a dita información a través do servidor web xa que se atopa fora do seu alcance.
include_once
- Sintaxe: include_once('[path/]arquivo.inc.php');
- É unha variante da anterior orde. Fai o mesmo pero coa diferenza de que se incluímos dúas veces o mesmo arquivo, a sentenza anterior da un erro e esta non, xa que 'sabe' que dito arquivo foi cargado previamente o non o volve cargar (teríamos erros de funcións duplicadas,...)
- Computacionalmente custa bastante polo que debemos limitar o seu uso.
- Pode darse o caso cando facemos include´s de forma condicional (dentro dun if) no que poida que xa foran cargados os arquivos anteriormente.
- Os include, a maiores de utilizarse para gardar funcións, constantes ou variables, poden usarse para ter aqueles elementos comúns a todas as páxinas webs do sitio web e non ter que estar a repetir o mesmo código en todas elas.
- Por exemplo, todos os sitios contan cun menú e unha cabeceira que soe ser a mesma.
- O lóxico será ter definido en arquivos include o código dese menú e esa cabeceira e facer un include en todas as páxinas do sitios.
- Desta forma, se necesitamos cambiar algo soamente teríamos que facelo nun arquivo.
- En PHP existe outra forma de facer un 'modelo' cos elementos comúns e que despois todas as páxinas teñan o contido dese modelo máis o seu propio.
- Podedes consultalo neste enlace da WIKI.
require
- Sintaxe: require '[path/]arquivo.inc.php';
- Fai o mesmo que no caso de include coa diferenza que se dito arquivo non existe, dará un erro de tipo fatal error e se parará a execución do script.
- Isto non pasa con 'include'. Daría un warning pero seguiría executando o script e cargando a páxina.
- Vexamos un exemplo:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6 <title>Exemplos de códigos php</title> 7 </head> 8 <?php 9 include ("./FuncionsExternasNonExiste.inc.php"); 10 ?> 11 <body> 12 <?php 13 14 echo "Isto aparece..."; 15 ?> 16 </body> 17 </html>
- Dará como resultado:
1 Warning: include(./FuncionsExternasNonExiste.inc.php): failed to open stream: No such file or directory in C:\xampp\htdocs\phpArrays\ReutilizarCodigo.php on line 9 2 3 Warning: include(): Failed opening './FuncionsExternasNonExiste.inc.php' for inclusion (include_path='.;C:\php\pear') in C:\xampp\htdocs\phpArrays\ReutilizarCodigo.php on line 9 4 5 Isto aparece...
require_once
- Sintaxe: require_once '[path/]arquivo.inc.php';
- Ten o mesmo efecto que require pero coa diferenza de que en caso de estar xa incluído o arquivo non vai volvelo a incluír.
Eliminando os warnings / erros que xera o PHP
- Nos exemplos anteriores puidemos comprobar como cando se xera un warning este aparece por pantalla ao usuario.
- Podemos modificar este comportamento de varias formas:
A través das páxinas PHP
- Coa función error_reporting facendo uso das constantes predefinidas.
- Por exemplo, podemos facer que que so aparezan os erros e non os warning´s no exercicio anterior desta forma:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6 <title>Exemplos de códigos php</title> 7 </head> 8 <?php 9 error_reporting(E_ERROR); 10 include('./FuncionsExternasNonExiste.inc.php'); 11 ?> 12 <body> 13 <?php 14 15 echo "Isto aparece..."; 16 /* 17 $datos = crearArray(10); 18 19 foreach ($datos as $clave => $dato){ 20 printf("Clave:%d - Valor:%s<br />",$clave,$valor==null ? 'Sen dato':$valor); 21 } 22 */ 23 ?> 24 </body> 25 </html>
- Outros exemplos:
1 // Notificar erros, warnings e erros de análises. 2 error_reporting(E_ERROR | E_WARNING | E_PARSE); 3 4 // Notificar E_NOTICE implica informar de variables non inicializadas o capturar erros en nome de variables ...) 5 error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 6 7 8 // Notificar todolos erros excepto E_NOTICE 9 error_reporting(E_ALL ^ E_NOTICE);
A través do arquivo .htaccess
- Normalmente, cando estamos non aloxamento compartido non imos poder ter acceso á configuración do apache e modificalo para que non apareza os erros.
- Para facelo, podemos modificar ou crear un arquivo de nome .htaccess no cartafol onde estea 'apuntando' o servidor web.
- O contido será:
1 php_value error_reporting valor_numérico 2 php_flag display_errors On
- Sendo 'valor_numérico' un número integer que se corresponde a un valor da seguinte táboa: Táboa de constentes.
-- Ángel D. Fernández González -- (2016).