Cabecera Grupo ISfe

Microfunciones útiles para tu código php

A la hora de desarrollar nuestros scripts o páginas en PHP, solemos utilizar una serie de pequeñas porciones de código reutilizables en distintas partes del script e incluso en otros scripts.

En esta sección mostraremos una serie de funciones de poco código a las que llamamos ‘microfunciones’ que nos puedan servir a modo de utilidades a la hora de desarrollar nuestras páginas en PHP y que iremos ampliando poco a poco.

Para conseguir una mayor reutilización del código, estas microfunciones las agruparemos en una clase que insertaremos en nuestra página PHP cuando nos hagan falta.

Primero mostraremos por separado cada microfunción con una pequeña descripción y un ejemplo de cómo utilizarla y al final como crear la clase, que englobe todas nuestras utilidades y como utilizarla en nuestras páginas.

Utiles PHP

Contenidos

Variadas

Formato Millares en PHP

Función para mostrar los números en formato de millares estilo Excel con 2 decimales en PHP.

// FUNCION
 
function FormatoMillares($numero) {
  return number_format(round(($numero),2),2,',','.');
}

// EJEMPLO

 $numero=1000256.698;
 echo $numero.' en formato de millares: '.FormatoMillares($numero);
 
// RESULTADO

// 1000256.698 en formato de millares: 1.000.256,70 

Mostrar contenido de un array en PHP con saltos de línea

Función que aumenta las posibilidades de la famosa función print_r de php para mostrar el contenido de los arrays.
La particularidad es que se muestra como contenido preformateado, es decir, con sus saltos de líneas entre los valores del array.

// FUNCION

function PrintArray($array) {
  echo '<pre>';
  print_r($array);
  echo '<pre>';
}

// EJEMPLO

$tabla=array(
	"dia" => "lunes",
	"mes" => "septiembre",
	"cita" => "10:00",
	"contacto" => "Luis Roca"
	);

PrintArray($tabla);

// RESULTADO

//Array
//(
//    [dia] => lunes
//    [mes] => septiembre
//    [cita] => 10:00
//    [contacto] => Luis Roca
//)

Obtener la dirección IP del cliente

Esta microfunción nos devuelve la dirección IP del cliente que visita nuestra página. Resulta útil para poder realizar posteriormente estadísticas de geolocalización o de control de acceso.

// FUNCION

function IPCliente() {
  if (isset($_SERVER)) {  
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {  
      $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];  
    } elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {  
      $ip = $_SERVER["HTTP_CLIENT_IP"];  
    } else {  
      $ip = $_SERVER["REMOTE_ADDR"];  
    }
  } else {  
    if (getenv('HTTP_X_FORWARDED_FOR')) {  
      $ip = getenv('HTTP_X_FORWARDED_FOR');  
    } elseif (getenv('HTTP_CLIENT_IP')) {  
      $ip = getenv('HTTP_CLIENT_IP');  
    } else {  
     $ip = getenv('REMOTE_ADDR');  
    }
  }

  if($ip=='::1') $ip='127.0.0.1';
  return $ip;
}

// EJEMPLO
 
echo IPCliente();

// RESULTADO

// 127.0.0.1 -> ya que las pruebas las estoy realizando en local
// 83.52.231.145 -> Si lo ejecuto desde Internet

Obtener el valor de una variable pasada mediante los métodos GET o POST

Busca una variable por su nombre como parte de un POST, GET o como variable simple y devuelve su contenido. Si no se han definido los arrays POST o GET o no existe como tal la variable, devuelve un valor por omisión.

// FUNCION

function ValGetPost($variable,$ValOmision=false) {
  if (isset($_POST[$variable])) {
    return $_POST[$variable];
  } elseif (isset($_GET[$variable])) {
    return $_GET[$variable];
  } else {
    global $$variable;
    if (isset($$variable)) {
      return $$variable;
    } else {
      return $ValOmision;
    }
  }
}

// EJEMPLO

$numero=123456.55;
echo 'Valor de la variable "numero": '.ValGetPost("numero");
echo '<br/>Valor de la variable "puntero": '.ValGetPost("puntero","vacio");

// RESULTADO

//Valor de la variable "numero": 123456.55
//Valor de la variable "puntero": vacio  

Cadenas

Cadenas Aleatorias en PHP

Nos permitirá crear cadenas aleatorias del tamaño que le indiquemos formadas por letras en mayúsculas, minúsculas y números. Si no le especificamos un tamaño devuelve una cadena de 18 caracteres.

// FUNCION

function CadenaAleatoria($tam=18) {
  $patron="1AB1ab2CD2cd3EFG3efg4HIJ4hij5KLMN5klmn6OPQR6opqrs6STU7tuv7VWX8wxy8YZ9z";
  $cadena="";
  $max=strlen($patron)-1;
  for($i=0; $i < $tam; $i++) {
    $cadena.=$patron[rand(0,$max)];
  }
  return $cadena;
}

// EJEMPLO

echo 'Cadena de 5 caracteres: '.CadenaAleatoria(5).'<br/>';
echo 'Cadena de 10 caracteres: '.CadenaAleatoria(10).'<br/>';
echo 'Cadena de 20 caracteres: '.CadenaAleatoria(20).'<br/>';

// RESULTADO

//Cadena de 5 caracteres: NeQCS
//Cadena de 10 caracteres: i75Mn2t5r4
//Cadena de 20 caracteres: YdHI2J4V1JHxy1ccN6Ip

Eliminar acentos en cadenas de texto

Eliminar las vocales acentuadas de una cadena.

// FUNCION

function NoAcentos($cadena) {
  $acentos=array("á","é","í","ó","ú","Á","É","Í","Ó","Ú");
  $vocales=array("a","e","i","o","u","A","E","I","O","U");
  return str_replace($acentos,$vocales,$cadena);
}

// EJEMPLO

$Frase1="El árbol de la estación está en plena floración";
$Frase2="PROGRAMACIÓN: Acción de programar";
echo $Frase1.' -> '.NoAcentos($Frase1).'<br/>';
echo $Frase2.' -> '.NoAcentos($Frase2).'<br/>';

// RESULTADO

//El árbol de la estación está en plena floración -> El arbol de la estacion esta en plena floracion
//PROGRAMACIÓN: Acción de programar -> PROGRAMACION: Accion de programar

Poner mayúscula inicial de cada palabra

Pone en mayúsculas la primera letra de cada una de las palabras de una cadena, dejando el resto de las letras en minúsculas

// FUNCION

function Capitaliza($Cadena) {
  return mb_convert_case($Cadena,MB_CASE_TITLE,'utf8');
}
 
// EJEMPLO
 
$Frase1="El árbol de la estación está en plena floración";
$Frase2="PROGRAMACIÓN: Acción de programar";
echo $Frase1.' -> '.Capitaliza($Frase1).'<br/>';
echo $Frase2.' -> '.Capitaliza($Frase2).'<br/>';

// RESULTADO

//El árbol de la estación está en plena floración -> El Árbol De La Estación Está En Plena Floración
//PROGRAMACIÓN: Acción de programar -> Programación: Acción De Programar

Ficheros

Extensión de un archivo

A partir del nombre completo de un archivo, obtenemos su extensión.

// FUNCION

function ObtenerExtension($fichero) {
  $tmp=explode(".",$fichero);
  return(end($tmp));
}

// EJEMPLO
 
echo "Fichero: ".__FILE__."<br/>Extensión: ".ObtenerExtension(__FILE__);

// RESULTADO

//Fichero: C:\wamp\www\utiles.php
//Extensión: php

Nombre de un archivo sin la extensión

A partir del nombre completo de un archivo, obtenemos su nombre sin extensión.

// FUNCION

function ObtenerNombre($fichero) {
  if(strrpos($fichero,"\\")) $separador="\\"; // Ruta de Windows
  else $separador="/"; // Ruta de LINUX (WEB)
  $tmp=explode($separador,$fichero);
  $archivo=end($tmp);
  $tmp=explode('.',$archivo);
  return(current($tmp));
}

// EJEMPLO

$Fichero="codigo.php";
echo "Fichero: $Fichero<br/>Nombre: ".ObtenerNombre($Fichero);
$Fichero=__FILE__;
echo "<br/>Fichero: $Fichero<br/>Nombre: ".ObtenerNombre($Fichero);
$Fichero="http://www.peam.es/docs/informacion.pdf";
echo "<br/>Fichero: $Fichero<br/>Nombre: ".ObtenerNombre($Fichero);

// RESULTADO

//Fichero: codigo.php
//Nombre: codigo
//Fichero: C:\wamp\www\utiles.php
//Nombre: utiles
//Fichero: http://www.peam.es/docs/informacion.pdf
//Nombre: informacion

Listar los archivos de un directorio

Obtener un array con los nombres de todos los archivos de un directorio que se pasa como parámetro.

// FUNCION

function ListarFicheros($carpeta) {
  $ficheros=array();
  // Comprobamos si existe la carpeta
  if(is_dir ($carpeta)) {
    // Abrimos el directorio para ir leyendo su contenido
    $handle = opendir($carpeta);
    // Generamos bucle mientras hayan datos que leer
    while (false !== ($fichero = readdir($handle))) {
      // Si no es el directorio padre o hijo
      if($fichero!='.' && $fichero!='..')	{
        // Si es de tipo fichero el recurso leido lo añadimos al array
        if(is_file($carpeta."/".$fichero))	$ficheros[] = $fichero;
      }
    }
    // Cerramos el directorio
    closedir($handle);
  }
  // Devolvemos el array
  return $ficheros;
}

// EJEMPLO

$Directorio=dirname(__FILE__);
echo "Directorio: $Directorio";
$Ficheros=ListarFicheros($Directorio);
PrintArray($Ficheros); // Aprovechamos la microfunción PrintArray para mostrar la lista de ficheros

// RESULTADO

//Directorio: C:\wamp\www
//
//Array
//(
//    [0] => conocenos.php
//    [1] => curriculums.php
//    [2] => email-informacion.php
//    [3] => enviar-info.php
//    [4] => favicon.ico
//    [5] => fecha.php
//    [6] => index.php
//    [7] => localizanos.php
//    [8] => logout.php
//    [9] => noticias.php
//    [10] => noticias_ver.php
//    [11] => paths.php
//    [12] => pathss.php
//    [13] => PeAM.ste
//    [14] => piensos.html
//    [15] => rss.php
//    [16] => server.php
//    [17] => sitemap.xml
//    [18] => soluciones_servicios.php
//    [19] => testmysql.php
//    [20] => utiles.php
//)

Listar todos los archivos de un tipo determinado de un directorio

Aprovenchando las microfunciones ‘ObtenerExtension’ y ‘ListarFicheros’ obtener un array con los nombres de todos los archivos de un directorio que sean de alguno tipo determinado o que coincidan con un patrón. Se le puede indicar más de un tipo de archivo. Útil para filtrar los archivos de un directorio por tipo.
Tiene tres argumentos:

  • carpeta (obligatorio): parámetro obligatorio que indica el directorio que deseamos listar.
  • tipos (opcional): array con todas las extensiones de los ficheros que deseamos listar. Si no se especifica se asumen todos los tipos de archivo.
  • patron (opcional): patrón utilizado para filtrar los archivos listados. Si no se especifica se asume ‘*’ como patrón de filtrado.

Si indicamos ‘patron’ pero no pasamos el array de tipos, en la llamada a la función tendremos que establecer el valor ‘null’ como argumento ‘tipos’ (ver ejemplo).

//FUNCION 

function ListarFicherosTipo($carpeta, $tipos=array(), $patron="*") {
  $Archivos= ListarFicheros($carpeta);
  $total_archivos=count($Archivos);
  // Recorremos el array de nombres que hemos obtenido
  for ($i = $total_archivos-1; $i >= 0; $i--){
  // Si la extensión  del archivo no es alguna de las que buscamos, eliminamos el elemento del array
    if(!empty($tipos)) {
      if (!in_array (ObtenerExtension($Archivos[$i]), $tipos)){
        unset($Archivos[$i]);
      // Si no cumple con el patrón de filtrado lo eliminamos del array
      } elseif (!fnmatch($patron, $Archivos[$i])){
        unset($Archivos[$i]);
	  }
    // Si no se especifican tipos de archivo se utiliza sólo el patrón de filtrado
    } elseif (!fnmatch($patron, $Archivos[$i])){
        unset($Archivos[$i]);
    }
  }
  // Devolvemos el array de los ficheros del tipo solicitado
  return array_values($Archivos);
} 

// EJEMPLO

$Directorio=dirname(__FILE__);
echo "Contenido del directorio: $Directorio";
$Ficheros=ListarFicherosTipo($Directorio);
PrintArray($Ficheros); 
echo "Seleccionar los ficheros de tipo php.";
$tipos=array("php");
$Ficheros=ListarFicherosTipo($Directorio,$tipos);
PrintArray($Ficheros);
echo "Seleccionar los ficheros de tipo ico, html y xml.";
$tipos=array("ico","xml","html");
$Ficheros=ListarFicherosTipo($Directorio,$tipos);
PrintArray($Ficheros);
$tipos=array("php");
echo "Seleccionar los ficheros de tipo php que comiencen por la letra s.";
$Ficheros=ListarFicherosTipo($Directorio,$tipos,"s*");
PrintArray($Ficheros);
echo "Seleccionar los ficheros que comiencen por la letra s.";
$Ficheros=ListarFicherosTipo($Directorio,null,"s*");
PrintArray($Ficheros);

// RESULTADO

//Contenido del directorio: C:\wamp\www
//
//Array
//(
//    [0] => conocenos.php
//    [1] => curriculums.php
//    [2] => email-informacion.php
//    [3] => enviar-info.php
//    [4] => favicon.ico
//    [5] => fecha.php
//    [6] => index.php
//    [7] => localizanos.php
//    [8] => logout.php
//    [9] => noticias.php
//    [10] => noticias_ver.php
//    [11] => paths.php
//    [12] => pathss.php
//    [13] => PeAM.ste
//    [14] => piensos.html
//    [15] => rss.php
//    [16] => server.php
//    [17] => sitemap.xml
//    [18] => soluciones_servicios.php
//    [19] => testmysql.php
//    [20] => utiles.php
//)
//
//Seleccionar los ficheros de tipo php.
//
//Array
//(
//    [0] => conocenos.php
//    [1] => curriculums.php
//    [2] => email-informacion.php
//    [3] => enviar-info.php
//    [4] => fecha.php
//    [5] => index.php
//    [6] => localizanos.php
//    [7] => logout.php
//    [8] => noticias.php
//    [9] => noticias_ver.php
//    [10] => paths.php
//    [11] => pathss.php
//    [12] => rss.php
//    [13] => server.php
//    [14] => soluciones_servicios.php
//    [15] => testmysql.php
//    [16] => utiles.php
//)
//
//Seleccionar los ficheros de tipo ico, html y xml.
//
//Array
//(
//    [0] => favicon.ico
//    [1] => piensos.html
//    [2] => sitemap.xml
//)
//
//Seleccionar los ficheros de tipo php que comiencen por la letra s.
//
//Array
//(
//    [0] => server.php
//    [1] => soluciones_servicios.php
//)
//
//Seleccionar los ficheros que comiencen por la letra s.
//
//Array
//(
//    [0] => server.php
//    [1] => sitemap.xml
//    [2] => soluciones_servicios.php
//)

Elimina todos los archivos de un tipo determinado de un directorio

Aprovechando la microfunción ‘ListarFicherosTipo’, eliminar todos los ficheros de un directorio de un tipo determinado o que coincidan con un patrón.
Utiliza los mismos argumentos que la función ‘ListarFicherosTipo’.

// FUNCION 

function EliminarFicherosTipo($carpeta , $tipos=array(), $patron="*") {
	$Archivos=ListarFicherosTipo($carpeta,$tipos,$patron);
 	$total_eliminados=0;
	// Recorremos el array de nombres que hemos obtenido
	foreach($Archivos as $archivo) {
		$ruta=$carpeta."/".$archivo;  // Creamos ruta completa del fichero
	 	@unlink($ruta);  // Eliminar el fichero
	 	// Si no existe contabilizamos como eliminado
	 	if(!file_exists($ruta)) $total_eliminados++;
	}
	 // Devolvemos el total de ficheros eliminados
	return $total_eliminados;
}

// EJEMPLO

$Directorio=dirname(__FILE__)."\archivos";
echo "Contenido del directorio: $Directorio";
$Ficheros=ListarFicherosTipo($Directorio);
PrintArray($Ficheros); 
echo "Eliminar los ficheros de tipo zip.<br/>";
$tipos=array("zip");
$Total=EliminarFicherosTipo($Directorio,$tipos);
echo "Se han eliminado $Total ficheros.<br/>";
echo "Contenido del directorio: $Directorio";
$Ficheros=ListarFicherosTipo($Directorio);
PrintArray($Ficheros); 

// RESULTADO

//Contenido del directorio: C:\wamp\www\archivos
//
//Array
//(
//    [0] => codnota.zip
//    [1] => del.gif
//    [2] => ex_mysql2.zip
//    [3] => favicon.ico
//    [4] => geoplugin-2008-12-18.zip
//    [5] => HTML5_Logo_256.png
//    [6] => manual.html
//    [7] => MemTest.zip
//    [8] => paginas.zip
//    [9] => tb_docs.sql
//)
//
//Eliminar los ficheros de tipo zip.
//Se han eliminado 5 ficheros.
//Contenido del directorio: C:\wamp\www\archivos
//
//Array
//(
//    [0] => del.gif
//    [1] => favicon.ico
//    [2] => HTML5_Logo_256.png
//    [3] => manual.html
//    [4] => tb_docs.sql
//)

Fechas

Cambiar formato de fecha de ‘dd/mm/aaaa’  a  ‘aaaa/mm/dd’ y viceversa

Esta microfunción nos permite cambiar el formato de una fecha de ‘dd/mm/aaaa’  a ‘aaaa/mm/dd’ y viceversa. Si no se especifica el separador de fechas, utilizará el carácter ‘/’.

// FUNCION
function amd_dma($fecha, $separador="/") {
  $valores=explode($separador,$fecha);
  if(count($valores)==3)
    return $valores[2].$separador.$valores[1].$separador.$valores[0];
  else
    return $fecha;
}
    
// EJEMPLO
$Fecha=date('d/m/Y');
echo "Fecha $Fecha -> ".amd_dma($Fecha);
$Fecha=amd_dma($Fecha);
echo "<br/>Fecha $Fecha -> ".amd_dma($Fecha);

// RESULTADO
//Fecha 04/09/2015 -> 2015/09/04
//Fecha 2015/09/04 -> 04/09/2015

La clase class.utiles.php

Crearemos una clase de nombre class.utiles.php donde agrupamos todas las microfunciones que se han ido comentando. Al agruparlas dentro de una clase, conseguimos la reutilización del código en cualquier parte de nuestra aplicación php.

Para utilizarla tendremos que incluirla en nuestra página, utilizando la sentencia require_once(‘class.utiles.php’) y posteriormente para realizar llamadas a sus funciones utilizaremos el formato utiles::NombreFuncion, por ejemplo: ‘utiles::IPCliente()’ para llamar a la función IPCliente.

En el siguiente enlace podreís descargar el código y un ejemplo de su utilización.

 Descarga Descargar en RAR.

 documentación Descargar en PDF.