Repositorio funciones útiles/reutilizables PHP

Llevo desde el 2005 trabajando para una pequeña empresa de informática como programador LAMP. En estos años he acumulado muchas funciones potencialmente reutilizables e interesantes para cualquiera, aqui muestro una pequeña selección.

Os pido e invito a que añadáis vuestras propias funciones útiles o reutilizables en los comentarios.

Define una tabla sql con parejas campo-valor como constantes de php. Una entrada de ejemplo válida podría ser : “select campo,valor from constantes”

function definir_constante_sql($sql)
{
	$resultado=mysql_query($sql);
	if($resultado)
	{
		while($array=mysql_fetch_row($resultado))
		{
			define($array[0],$array[1]);
		}
	}
	else
	{
		echo "ERROR Grave , no se pudieron cargar las constantes";
		exit;
	}
}

Nos devuelve un número de filas al azar de la tabla indicada.

function dame_unas_filas_al_azar($tabla,$numero_de_filas)
{
$sql="SELECT * FROM ".$tabla." ORDER BY RAND(NOW()) LIMIT ".$numero_de_filas;
$resultado = mysql_query($sql);
	if($resultado)
	{
		return $resultado;
	}
	else
	{
		return false;
	}
}

Devuelve el último ID de una tabla, usaba esto hasta que conocí mysql_last_id() -_-

function ultimo_id($tabla,$campo)
{
$sql="SELECT max(".$campo.") AS maximo FROM `".$tabla."`";
$resultado=mysql_query($sql);
	if($resultado)
	{
		$array=mysql_fetch_array($resultado);
		$id_auto_asignado=$array['maximo'];
		return $id_auto_asignado;
	}
	else
	{
		return 0;
	}
}

Nos dice si un valor existe.

function si_existe_en_la_tabla($tabla,$campo,$valor)
{
	$tabla=mysql_escape_string($tabla);
	$campo=mysql_escape_string($campo);
	$valor=mysql_escape_string($valor);
	$sql="select ".$campo." from ".$tabla." where ".$campo."=".$valor;
	return (mysql_query($sql) && (mysql_num_rows($resultado)>0));
}

Comprueba si vienes de la página pasada por parametro. OJO! No todos los navegadores definen HTTP_REFERER (ni tienen obligación de hacerlo), con todas las consecuencias que ello supone.

function vienesDe($pagina)
{
	return strrchr($_SERVER['HTTP_REFERER'],"/") == "/".$pagina;
}

Coge el valor del campo de una sql que devuelve al menos una fila.

function coger_valor($sql,$campo)
{
	$resultado=mysql_query($sql);
	if($resultado)
	{
		$array=mysql_fetch_array($resultado);
		$valor=$array[$campo];
		return $valor;
	}
	else
	{
		return false;
	}
}

Metido al principio, evita que el navegador use cache

function no_coge_de_cache()
{
	header("Expires: Mon, 1 Jul 1900 00:00:00 GMT");
	header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
	header("Cache-Control: no-cache, must-revalidate");
	header("Pragma: no-cache");
}

Genera un color aleatorio hexadecimal

function generar_color()
{
	$r=rand(0,255);
	$g=rand(0,255);
	$b=rand(0,255);
	$color="#".dechex($r).dechex($g).dechex($b);
	return $color;
}

Vacia una tabla !! para mysql 3.x o 4.x, en mysql 5.x esto es equivalente a TRUNCATE ‘tabla’

function vaciar_tabla($tabla)
{
	$sql="DELETE FROM `".$tabla."`";mysql_query($sql);
	$sql="ALTER TABLE `".$tabla."` PACK_KEYS =0 CHECKSUM =0 DELAY_KEY_WRITE =0 AUTO_INCREMENT =1";mysql_query($sql);
}

Redirecciona por javascript, en lugar de por header(Location : pagina.php).

function redireccionarPorJavascript($nuevaURL)
{
	echo '<script type="text/javascript">';
	echo 'location.href="'.$nuevaURL.'"';
	echo '</script>';
}

Capitaliza una palabra

function capitalizar($palabra)
{
	return ucfirst(strtolower($palabra));
}

Si tenemos tablas definidas con enumerado podemos obtener un array de ese enumerado con esta función, la sintaxis es tabla.columna

/*
$array = enum("tabla.columna");
*/
function enum($objeto)
{
	list($tabla, $columna) = explode(".", $objeto);
	$fila=@mysql_fetch_assoc(mysql_query("SHOW COLUMNS FROM ".$tabla." LIKE
	'".$columna."'"));
	return ($fila ? explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$fila['Type'])) : array(0=>'None'));
}

Nos dice si una definición esta definida.

function estaDefinido($var)
{
	return (isset($var) || $var != "" || $var != null || strlen($var)>0);
}

Borra un registro

function borrarRegistro($tabla , $nombreCampoClave , $valorCampoClave)
{
	$sql="DELETE FROM `".$tabla."` WHERE `".$nombreCampoClave."` = '".$valorCampoClave."' LIMIT 1;";
	return mysql_query($sql);
}

Actualiza un campo

function actualizar_campo($tabla , $nombreCampoUnico , $valorCampoUnico , $nombreColumna , $nuevoValorColumna)
{
	$sql="UPDATE `".$tabla."` SET `".$nombreColumna."` = '".$nuevoValorColumna."' WHERE `".$nombreCampoUnico."` = '".$valorCampoUnico."' LIMIT 1 ;";
	return mysql_query($sql);
}

Ver las “superglobales” definidas.

function versupervariables()
{
	echo "_COOKIE";
	foreach($_COOKIE as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
	echo "_ENV";
	foreach($_ENV as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
	echo "_FILES";
	foreach($_FILES as $clave=>$valor)
	{
		echo $clave." = ".print_r($valor)."";
	}
	echo "_GET";
	foreach($_GET as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
	echo "_POST";
	foreach($_POST as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
	echo "_REQUEST";
	foreach($_REQUEST as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
	echo "_SESSION";
	foreach($_SESSION as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
	echo "_SERVER";
	foreach($_SERVER as $clave=>$valor)
	{
		echo $clave." = ".$valor."";
	}
}

Acota una palabra con puntos suspensivos.

function acotar($palabra , $cantidadDeseada , $porDelante = false)
{
	$sufijo = "...";
	if(strlen($palabra)>$cantidadDeseada)
	{
		if($porDelante)
		{
			return $sufijo.substr($palabra,strlen($palabra)-$cantidadDeseada,strlen($palabra)-1);
		}
		else
		{
			return substr($palabra,0,$cantidadDeseada-strlen($sufijo)).$sufijo;
		}
	}
	else
	{
		return $palabra;
	}
}

Si el valor de un GET es numero —> bool

function porElGETvieneUnNumero($nombre)
{
	return (isset($_GET[$nombre]) && $_GET[$nombre]!="" && is_numeric($_GET[$nombre]));
}

Esta función recibe un timestamp he imprime hace cuando fue esa fecha adaptandose al mejor periodo de tiempo posible. Por ejemplo “Por ejemplo: Hace 3 dias”

function hace($timestamp)
{
	$diferencia = time() - $timestamp;
	if($diferencia > 0)
	{
		$periodo = array("seg", "min", "hora", "dia", "semana", "mes" , "año", "decada");
		$longitud = array(    "60" ,"60"  , "24" ,  "7"  , "4.35",   "12" , "10" );

		for($j = 0; $diferencia >= $longitud[$j]; $j++)
			$diferencia /= $longitud[$j];

		$diferencia = round($diferencia);

		if($diferencia != 1)
		{
			if($periodo[$j] == "mes")
				$periodo[$j].= "es";
			else
				$periodo[$j].= "s";
		}

		return "Hace ".$diferencia." ".$periodo[$j];
	}
	else
	{
		return "Ahora mismo";
	}
}

Nos dice si un año es bisiesto

function esBisiesto($ano)
{
	// El dia y el mes me lo invento por que no interesa
	return (date("L",strtotime($ano."-2-28")) == 1);
}

Nos dice el limite de un mes, teniendo en cuanta bisiestos con la función anterior

function getLimiteMes($mes,$ano)
{
	switch($mes)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		break;

		case 2:
			if(esBisiesto($ano))
			{return 29;}
			else
			{return 28;}
		break;

		case 4:
		case 6:
		case 9:
		case 11:
		default:
			return 30;
		break;
	}
}

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: