Mostrando entradas con la etiqueta Function PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta Function PHP. Mostrar todas las entradas

2013-11-12

Como agrega Funciones existente de PHP o Filtros de manera simple dentro de Twig, en una sola linea de codigo

Como agregar Funciones o Filtros de manera simple a Twig sin tenes que andar creando class que extiende de la interfaz Twig_Extension

class Project_Twig_Extension extends Twig_Extension {...}

Este es un código simple y limpio, se ve como podemos agrega un función de PHP como base64_encode() y base64_decode() que no esta en Twig.

2012-07-13

PHPExcel y CodeIgniter para generara una exportacion a excel

Esto es un ejemplo de como implementar PHPExcel desde CodeIgniter.
Para que funciona sin problema las clases de PHPExcel las tener que poner dentro del 
path: "/application/libraries" donde esta instalado tu framework y de tu desarrollo, no en la carpeta 
"/system/libraries" ya que acá solo van las librerias del propio framework.



Prerequisitos para PHPExcel:
  1. PHP version 5.2.0 o superior
  2. PHP extension php_zip enabled
  3. PHP extension php_xml enabled
  4. PHP extension php_gd2 enabled

Link: CodeIgniter
Link: PHPExcel
Link: phpexcel.codeplex.com
Link con mas informacion de referencia: phpexcel-cheatsheet

2011-01-15

Class generador de Tree con patron MPTT + PHP + Tutoriales al estilo CakePHP

Clase para crear tree recuperandolo de la base de datos. Al mismo estilo que lo hace CakePHP

Link a la class:
mptt + bd class.zip 

childcount()
getpath()
tree()
generatetreelist()
extends DB class, for queries and execution of SQL (http://slaout.linux62.org/php/index.html)


Cómo convertir esta matriz MPTT en una estructura de árbol en PHP?
Link:
http://es.w3support.net/index.php?db=so&id=823071

SQL para MySQL donde utiliza el patron MPTT para poder genera el Tree
Link:
http://stackoverflow.com/questions/1638137/mptt-modified-preorder-tree-traversal-issue-in-php

Componet para utilizar con el frameword KOHANA para poder generar menus Tree
Link:
http://code.google.com/p/kohana-mptt/wiki/Documentation

2010-10-04

Validar y sanear datos con la extensión Filter de PHP

Introducción: la importancia de validar y sanear datos

Un punto crítico de cualquier tipo de aplicación es la entrada de datos por parte del usuario, ya que, si no se toman las medidas oportunas, un usuario puede (intencionadamente o no) causar fallos en la aplicación.
En el mundo del desarrollo web, esto cobra mucha más importancia, pues se incrementa mucho el número de usuarios potenciales y por tanto, el número de usuarios malintencionados. Ataques conocidos y fáciles de llevar a cabo son SQL Inyection y XSS (Cross Site Scripting).
En aplicaciones web es importante realizar siempre la validación en el lado del servidor.
Otra vulnerabilidad que tiene que ver con la validación, que es debido muchas veces a la inexperiencia del desarrollador, es confiar la validación de lados al lado de cliente (Javascript). Esto es algo grave, pues existen herramientas para enviar datos a una web sin que intervenga para nada un navegador ni Javascript.

La extensión Filter

Esta extensión de PHP nos expone un conjunto de funciones que nos permitirán la validación y saneamiento de datos de una forma sencilla. La funcion filter_var nos permite filtrar una variable según el filtro especificado. El orden de los parámetros es el siguiente:
  • $var: Variable que se quiere filtrar
  • $filter: Filtro que se desea aplicar. Será una constante numérica
  • $options: Conjunto de opciones que modificarán el funcionamiento del filtro. Será una constante numérica o un array
A continuación un listado de filtros de validación posibles:
FILTER_VALIDATE_BOOLEAN
Valida la variable como un booleano.
FILTER_VALIDATE_EMAIL
Valida la variable como una dirección de correo electrónico correcta.
FILTER_VALIDATE_FLOAT
Valida que la variable sea del tipo float.
FILTER_VALIDATE_INT
Valida la variable como un número entero.
FILTER_VALIDATE_IP
Valida la variable como una dirección IP.
FILTER_VALIDATE_REGEXP
Valida la variable contra una expresión regular enviada en la variable de opciones.
FILTER_VALIDATE_URL
Valida el valor coma una URL de acuerdo con la RFC 2396.
A continuación el listado de filtros para sanear:
FILTER_SANITIZE_EMAIL
Elimina todos los caracteres execpto letras, números y !#$%&’*+-/=?^_`{|}~@.[].
FILTER_SANITIZE_ENCODED
Codifica la cadena como una URL válida.
FILTER_SANITIZE_MAGIC_QUOTES
Aplica la función addslashes.
FILTER_SANITIZE_NUMBER_FLOAT
Elimina todos los caracteres excepto números, +- y opcionalmente ,.eE.
FILTER_SANITIZE_NUMBER_INT
Elimina todos los caracteres excepto números y los signos + -.
FILTER_SANITIZE_SPECIAL_CHARS
Escapa caracteres HTML y caracteres con ASCII menor a 32.
FILTER_SANITIZE_STRING
Elimina etiquetas, opcionalmente elimina o codifica caracteres especiales.
FILTER_SANITIZE_STRIPPED
Alias del filtro anterior.
FILTER_SANITIZE_URL
Elimina todos los caracteres excepto números, letras y $-_.+!*’(),{}|\\^~[]`<>#%”;/?:@&=.

Validar y sanear un número entero

Vamos a ver un sencillo ejemplo de validación de un número entero.
  1. <?php  
  2. $var = 123;  
  3. echo filter_var($var, FILTER_VALIDATE_INT);  
La función nos devolverá el entero en caso de que la validación sea correcta, en caso contrario, nos devolverá FALSE.
  1. <?php  
  2. $var = 'dos';  
  3. if(filter_var($var, FILTER_VALIDATE_INT) === false){  
  4.     echo 'Valor incorrecto';  
  5. }else{  
  6.     echo 'Valor correcto';  
  7. }  
A la hora de validar un entero, podemos jugar con las opciones para hacer ajustar el comportamiento de la función a nuestras necesidades. En el siguiente ejemplo se muestra como validar un entero que esté dentro de un rango específico:
  1. array('min_range'=>10, 'max_range' => 20));  
  2.   
  3. if(filter_var($var, FILTER_VALIDATE_INT, $options) === false){  
  4.     echo 'Valor incorrecto';  
  5. }else{  
  6.     echo 'Valor correcto';  
  7. }  
Ahora vamos a ver como sanear un entero, para los que no entiendan, sanear significa limpiar, es decir, quitamos todo lo que no tiene cabida en nuestro campo.
  1. <?php  
  2. $var = 'uno23';  
  3.   
  4. echo filter_var($var, FILTER_SANITIZE_NUMBER_INT);  
El código anterior nos devuelve ’23′ debido a que elimina todos los caracteres no numéricos de la cadena.

Validar y sanear un número float

La validación simple de un float es practicamente igual que la de un entero:
  1. <php  
  2. $var = 1.3;  
  3.   
  4. echo filter_var($var, FILTER_VALIDATE_FLOAT);  
Sin embargo, con este filtro tenemos una opcion interesante que nos permite especificar cual es el caracter que separa los decimales.
  1. <php  
  2. $var = '1,3';  
  3. $options = array('options'=>array('decimal'=>','));  
  4. echo filter_var($var, FILTER_VALIDATE_FLOAT, $options);  

Saneamiento de textos

La limpieza de los textos es algo muy importante y por ello tenemos varios flags que modifican el comporamiento del filtro FILTER_SANITIZE_STRING:
FILTER_FLAG_NO_ENCODE_QUOTES
No codificará las comillas simples ni dobles.
FILTER_FLAG_STRIP_LOW
Elimina caracteres cuyo varlor ASCII sea menor a 32.
FILTER_FLAG_STRIP_HIGH
Elimina caracteres cuyo valor ASCII sea mayor a 127.
FILTER_FLAG_ENCODE_LOW
Codifica caracteres cuyo valor ASCII sea mennor a 32.
FILTER_FLAG_ENCODE_HIGH
Codifica caracteres cuyo valor ASCII sea mayor a 127.
FILTER_FLAG_ENCODE_AMP
Codifica ampersands (&).
A continuación algunos ejemplos:
  1. <php  
  2. $text = '<p>"Hola mundo!"</p>';  
  3. echo filter_var($text, FILTER_SANITIZE_STRING);  
  4. //Resultado: &#34;Hola mundo!&#34;  
  1. <php  
  2. $text = '<p>"Hola mundo!"</p>';  
  3. echo filter_var($text, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);  
  4. //Resultado: "Hola mundo!"  
  1. <php  
  2. $text = '"Ontuts & Cokidoo"';  
  3.   
  4. echo filter_var($text, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_ENCODE_AMP);  
  5. //Resultado: "Ontuts & Cokidoo"  

Obtener variables externas

Además de la función filter_var, existe una muy interesante llamada filter_input. Esta funcion nos permite obtener una variable externa por su nombre, filtrándola si es necesario.
Es importante que todas las variables externas, es decir, que nos llegan desde el lado del cliente ($_GET, $_POST, $_COOKIE…) las obtengamos a través de esta función para ahorrarnos disgustos. En el siguiente ejemplo vemos como obtener un parámetro GET de la petición con esta función:
  1. <php  
  2. $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);  
  3.   
  4. if($page !== null && $page !== false){  
  5.     //El parametro ha sido enviado y es un entero  
  6. }else{  
  7.     //El parametro no se ha enviado o no es un entero  
  8. }  
Esta función nos devolverá NULL si la variable no ha sido enviada, FALSE si la variable ha sido enviada pero no validada o el valor de la variable si ha sido enviada y validada.
El primer parámetro indica de que ámbito será extraída la variable, y puede ser uno de los siguientes valores:
  • INPUT_GET
  • INPUT_POST
  • INPUT_COOKIE
  • INPUT_SERVER
  • INPUT_ENV
Otra función relacionada y muy interesante es filter_input_array que nos permite definir una serie de validaciones para múltiples campos. Es decir, podemos hacer la validación todos los campos de un formulario en un solo paso. La definición de los campos con sus validaciones se hace mediante un array como se muestra en el siguiente ejemplo:
  1. <?php  
  2. $args = array(  
  3.     'product_id'   => FILTER_SANITIZE_ENCODED,  
  4.     'component'    => array('filter'    => FILTER_VALIDATE_INT,  
  5.                             'flags'     => FILTER_REQUIRE_ARRAY,  
  6.                             'options'   => array('min_range' => 1, 'max_range' => 10)  
  7.                            ),  
  8.     'versions'     => FILTER_SANITIZE_ENCODED  
  9.     );  
  10.   
  11. $myinputs = filter_input_array(INPUT_POST, $args);  
Esta función devuelve un array del tipo clave/valor que contiene los nombres de los campos junto con su filtrado.

Conclusión

Como puedes observar, PHP nos brinda una gran librería con la cual podemos llevar a cabo validaciones y saneamientos en cuestion de segundos, cosa que antes se hacía bastante engorrosa.
Ahora no hay excusa que valga para asegurarnos de que nuestros datos estén bien limpios y seguros :) .
¡Nos vemos en la próxima publicación!

2010-09-23

Mostrar número de seguidores de Twitter con PHP

Mostrar el número de seguidores de Twitter con PHP es una forma de personalizar la presentación de esta estadística, podemos crear una función y que nos devuelva el número de seguidores en texto, esta función que utiliza el API de Twitter nos ayudara mucho, solo debemos pasar como parámetro el username de Twitter.
  1. function getTwFollowers($username){  
  2.   
  3.     $xml=file_get_contents('http://twitter.com/users/show.xml?screen_name='.$username);  
  4.     if (preg_match('/followers_count>(.*)</',$xml,$match)!=0) {  
  5.         $count = $match[1];  
  6.     }  
  7.     return $count;  
  8. }  
Ahora solo tenemos que llamar a la función y pasarle como parámetro el username de Twitter.
  1. echo getTwFollowers('craftyman');  
También podemos mostrar los seguidores de otras Redes Sociales:

2010-09-04

9 funciones y características de PHP que necesitas conocer

Nettuts+ es un recurso imprescindible para aquellos que, de un modo u otro, estamos metidos en este mundillo del desarrollo web. La cantidad de tutoriales y de información que se genera desde esta web es practicamente inabarcable, pero uno siempre acaba aprendiendo cosas nuevas. En "9 Useful PHP Functions and Features You Need to Know" han publicado algunas funciones y características muy útiles de PHP y que no suelen ser muy utilizadas.
Una función que no conocía es func_get_args(), que devuelve una array con la lista de parámetros de una función. Esto nos permite crear funciones con un número arbitrario de parámetros.
  1. function foo() {  
  2.     $args = func_get_args();  
  3.   
  4.     foreach ($args as $k => $v) {  
  5.         echo "arg".($k+1).": $v\n";  
  6.     }  
  7.   
  8. }  
  9.   
  10. foo();  
  11. /* Nada que mostrar */  
  12.   
  13. foo('hello');  
  14. /* Muestra  
  15. arg1: hello  
  16. */  
  17.   
  18. foo('hello', 'world', 'again');  
  19. /* Muestra  
  20. arg1: hello  
  21. arg2: world  
  22. arg3: again  
  23. */  
9 Useful PHP Functions and Features You Need to Know » »

2010-09-03

Usar PHP para comprimir ficheros CSS

Existen varias técnicas que usan PHP para optimizar los ficheros CSS y reducir el número de peticiones HTTP en el caso de que dispongamos de varios. La siguiente técnica es una variación de la de Reinhold Weber. Los CSS son incluidos pero no son eliminados los espacios en blancos, lo que facilita la depuración y el acceso al contenido mediante herramientas como Firebug.

  1. <?php  
  2. if(extension_loaded('zlib')){  
  3.    ob_start('ob_gzhandler');  
  4. }  
  5. header ("content-type: text/css; charset: UTF-8");  
  6. header ("cache-control: must-revalidate");  
  7. $offset = 60 * 60;  
  8. $expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";  
  9. header ($expire);  
  10. ob_start("compress");  
  11. function compress($buffer) {  
  12.    // remove comments   
  13.   $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);  
  14.   return $buffer;  
  15. }  
  16.  // list CSS files to be included  
  17. include('baseline.css');  
  18. include('styles.css');  
  19.   
  20. if(extension_loaded('zlib')){  
  21. ob_end_flush();  
  22. }  
  23. ?>  
Vía ethanandjamie.com » »

PHP Data Objects – PDO

PDO es una interface de acceso a datos que nos permite, mediante varios drivers, conectarnos a diferentes bases de datos. Olvídate de esto, esto, esto e incluso de esto otro, ahora solo debes preocuparte por PDO. Esta librería escrita en C viene activada por defecto desde PHP 5.1 por lo cual la podrás utilizar en la mayoría de los servidores que actualmente soportan PHP5.

La conexión

Para todos los ejemplos utilizaré MySQL, pero también podria utilizar cualquier otra de las bases de datos soportadas adaptando un poco el código que sigue:
1
$db = new PDO('driver:host=servidor;dbname=bd', user, pass);
Y el ejemplo práctico:
1
$db = new PDO('mysql:host=localhost;dbname=pruebas', 'root', '');
Ahora en $db tenemos una instancia de PDO_MySQL

Primera consulta

Para la primer consulta haremos uso de prepare, execute y fetch.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require 'conexion.php';
 
//Nos conectamos
$db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd, $usuario, $contrasenia);
 
//Preparamos la consulta para dejarla lista para su ejecución
$consulta = $db->prepare('SELECT * FROM items');
 
//Ejecutamos la consulta
$consulta->execute();
 
//Recorremos el set de resultados mostrando la información
while($fila = $consulta->fetch())
{
 echo $fila[0] . '  ' . $fila[1] . '<br />';
}
 
//Cerramos la conexión a la vez que destruimos nuestra instancia de PDO
$db = null;

Como verás no es nada complicado y es muy similar a lo que nos acostumbramos a hacer con las clásicas funciones mysql_.
Con las funciones MySQL también debíamos validar estrictamente los parámetros de entrada para evitar inyecciones SQL. En este caso, PDO lo hará por nosotros siempre y cuando utilicemos alguna de las varias formas que nos provee para realizar consultas parametrizadas. Este es un ejemplo:
1
2
3
4
5
//Preparamos la consulta marcando donde irán los parametros con ?
$consulta = $db->prepare('SELECT * FROM items WHERE id_item = ? OR id_item = ?');
 
//Ejecutamos la consulta incluyendo los parámetros en el mismo orden en el que deben incluirse
$consulta->execute(array(2, 4));
El ejemplo anterior generará una consulta de la siguiente manera:
1
SELECT * FROM items WHERE id_item = '2' OR id_item = '4'
Otra manera de hacer lo mismo:
1
2
3
4
5
6
7
8
9
10
$id = 6;
 
//Esta vez utilizamos un nombre-clave para cada parámetro
$consulta = $db->prepare('SELECT * FROM items WHERE id_item = :id');
 
//Con dicho nombre-clave, agregamos el valor del parámetro
$consulta->bindParam(':id', $id);
 
//Y ejecutamos la consulta
$consulta->execute();
1
SELECT * FROM items WHERE id_item = '6'
Ahora bien, si no confían, intenten inyectar SQL concatenando alguna sentencia en la variable $id y verán los resultados ;-)

Altas, Bajas y Modificaciones

El mecanismo sigue siendo el mismo que en las consultas anteriores, preparar la consulta, agregar los parámetros y ejecutar.
alta
1
2
3
4
5
6
$item = $_POST['item'];
 
$inserta = $db->prepare('INSERT INTO items (item) VALUES (:item)');
$inserta->bindParam(':item', $item);
 
$inserta->execute();
baja
1
2
3
4
5
6
$id = $_GET['id'];
 
$borra = $db->prepare('DELETE FROM items WHERE id_item = :id');
$borra->bindParam(':id', $id);
 
$borra->execute();
modificación
1
2
3
4
5
6
7
8
$item = $_POST['item'];
$id = $_POST['id'];
 
$actualiza = $db->prepare('UPDATE items SET item = :item WHERE id_item = :id');
$actualiza->bindParam(':item', $item);
$actualiza->bindParam(':id', $id);
 
$actualiza->execute();
Y esto es todo por el momento, solo un primer acercamiento a PDO. Podés bajarte todos estos ejemplos y varios mas desde aquí. Para que funcionen debes contar con un servidor que soporte PHP5 con las librerías PDO_MySQL instaladas, debes crear una base de datos, ejecutar el fichero items.sql y editar el archivo conexion.php con los datos que correspondan.

2010-09-02

Función que trunca texto con palabras completas

Esta función sólo trunca una cadena cuando encuentra el punto de ruptura que le indiquemos -un espacio, un punto, dos puntos,..- y resulta muy útil, por ejemplo, para mostrar un extracto de un artículo completo sin romper las palabras.
  1. <?php  
  2. // Original PHP code by Chirp Internet: www.chirp.com.au  
  3. // Please acknowledge use of this code by including this header.  
  4. function myTruncate($string, $limit, $break=".", $pad="...") {  
  5.     // return with no change if string is shorter than $limit  
  6.     if(strlen($string) <= $limit)  
  7.         return $string;   
  8.   
  9.     // is $break present between $limit and the end of the string?  
  10.     if(false !== ($breakpoint = strpos($string, $break, $limit))) {  
  11.         if($breakpoint < strlen($string) - 1) {  
  12.             $string = substr($string, 0, $breakpoint) . $pad;  
  13.         }  
  14.     }  
  15.     return $string;  
  16. }  
  17. ?>  
Ejemplo:
  1. $cadena="Ut at risus magna. Aenean in urna urna, bibendum ultricies libero. Quisque accumsan, dolor ut sagittis fermentum, ipsum sapien posuere arcu, eget fermentum lorem leo mattis risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rhoncus tincidunt pulvinar. Aliquam sed odio vitae erat vestibulum eleifend. In hac habitasse platea dictumst. Fusce fringilla aliquet leo a porta. Proin facilisis vehicula nisi, pharetra pellentesque turpis rutrum in. Quisque laoreet nisi augue. Fusce lorem metus, mollis sed aliquam eget, dapibus sit amet dui. Nulla facilisi. Vestibulum laoreet, orci in euismod tristique, est ligula sagittis dolor, a pellentesque odio ligula tempus risus. Aenean elit ligula, facilisis sed tincidunt ac, facilisis eget ipsum. ";  
  2. echo myTruncate($cadena, 200,' ', '...');  
Visto en 21 Really Useful & Handy PHP Code Snippets » »

Encontrar todos los links de una página con PHP

  1. <?php  
  2. $html = file_get_contents('http://www.dominio.com');  
  3.   
  4. $dom = new DOMDocument();  
  5. @$dom->loadHTML($html);  
  6.   
  7. $xpath = new DOMXPath($dom);  
  8. $hrefs = $xpath->evaluate("/html/body//a");  
  9.   
  10. for ($i = 0; $i < $hrefs->length; $i++) {  
  11.        $href = $hrefs->item($i);  
  12.        $url = $href->getAttribute('href');  
  13.        echo $url.'<br />';  
  14. }  
  15. ?>  
Visto en Find All Links on a Page » »

37 expresiones regulares testadas para PHP y Javascript

Una expresión regular, también llamado regex o regexp para abreviar, es simplemente un trozo de código que coincide con un patrón. Dominar las expresiones regulares puede ser una tarea difícil, si no estás obligado a utilizarlas a menudo. Esta compilación de expresiones regulares nos puede ser extremadamente útil para su uso a modo de chuleta. La recopilación muestra expresiones regulares para números de tarjetas de crédito, caracteres alfanuméricos, Emails, direcciones IP, URL's, etc.
37 Tested PHP, Perl, and JavaScript Regular Expressions » »

Función en PHP para generar una nube de etiquetas

  1. function getCloud( $data = array(), $minFontSize = 12, $maxFontSize = 30 ) {  
  2.     $minminimumCount = min($data);  
  3.     $maxmaximumCount = max($data);  
  4.     $spread = $maximumCount - $minimumCount;  
  5.     $cloudHTML = '';  
  6.     $cloudTags = array();  
  7.       
  8.     $spread == 0 && $spread = 1;  
  9.       
  10.     foreach( $data as $tag => $count ) {  
  11.         $size = $minFontSize + ( $count - $minimumCount )* ( $maxFontSize - $minFontSize ) / $spread;  
  12.         $cloudTags[] = '<a style="font-size: ' . floor( $size ) . 'px'. '" class="tag_cloud" href="#" title="\'' . $tag .'\' returned a count of ' . $count . '">'.htmlspecialchars(stripslashes( $tag ) ) . '</a>';  
  13.     }  
  14.     return join( "\n", $cloudTags ) . "\n";  
  15. }  
Esta función y algunas más, todas ellas muy interesantes en Handy PHP Code Snippets.

htmLawed: script PHP para sanear HTML

htmLawed es un script de PHP que:
  • Convierte el formato HTML en texto seguro y de acuerdo a los estándares.
  • Procesa el texto para su uso en documentos HTML, XHTML o XML.
  • Restringe elementos HTML, atributos o protocolos URL utilizando listas blancas o negras.
  • Equilibra etiquetas, verifica la anidación de elementos, transforma atributos y eqtiquetas obsoletas, convierte URLs relativas en absolutas, etc.
  • Es rápido, altamente configurable y bien documentado.
  • Sólo pesa 47 kb.
El uso del filtro, es una manera segura de desinfectar los comentarios HTML en un blog o los mensajes de un foro, convertir el HTML a XHTML, eliminar código XSS, etc. Su uso puede ser tan sencillo como incluir el fichero htmLawed.php y filtrar el contenido recogido en un formulario de comentarios.
  1. $Comentario = $_POST["inputComentario"]  
  2. $TextoProcesado = htmLawed($Comentario);   
htmLawed » »

10 funciones PHP que probablemente nunca hayas utilizado

Cuando programamos en PHP, nos solemos limitar a utilizar unas cuantas funciones, las más comunes, de todas las que tenemos a nuestro alcance. PHP ofrece un montón de posibilidades y funcionalidades útiles que a menudo no se utilizan. En "10 PHP functions you (probably) never use" han seleccionado 10 funciones que probablemente nunca hayamos usado y que sería bueno conocer.
A mí me ha resultado particularmente interesante la función natsort(), una función que va a ordenar los elementos en un array de forma natural (es decir, en un orden que parece lógico para una persona), en lugar de los valores ordinales de los items. Por ejemplo:
  1. $items = array(  
  2.     "100 apples", "5 apples", "110 apples", "55 apples"  
  3.     );  
  4.    
  5. // normal sorting:  
  6. sort($items);  
  7. print_r($items);  
  8. # Outputs:  
  9. # Array  
  10. # (  
  11. #     [0] => 100 apples  
  12. #     [1] => 110 apples  
  13. #     [2] => 5 apples  
  14. #     [3] => 55 apples  
  15. # )  
  16.   
  17. natsort($items);  
  18. print_r($items);  
  19. # Outputs:  
  20. # Array  
  21. # (  
  22. #     [2] => 5 apples  
  23. #     [3] => 55 apples  
  24. #     [0] => 100 apples  
  25. #     [1] => 110 apples  
  26. # )  
10 PHP functions you (probably) never use » »

PHP: Calcular la edad de una persona a partir de su fecha de nacimiento

A esta función PHP se le pasa la edad de nacimiento de una persona y ésta nos devuelve la edad.
  1. <?php  
  2. function edad($fecha){  
  3.     list($anyo,$mes,$dia) = explode("-",$fecha);  
  4.     $anyo_dif  = date("Y") - $anyo;  
  5.     $mes_dif = date("m") - $mes;  
  6.     $dia_dif   = date("d") - $dia;  
  7.     if ($dia_dif < 0 || $mes_dif < 0) $anyo_dif--;  
  8.     return $anyo_dif;  
  9. }  
  10.   
  11. //Ejemplo de uso  
  12. echo edad("1980-09-07"); //(aaaa-mm-dd)  
  13. ?> 

Visto en » »

2010-09-01

Función para determinar el tiempo transcurrido en PHP

Esta función muestra el tiempo transcurrido desde una fecha dada. La idea es mostrar el tiempo en un formato más amigable para el lector. En vez de mostrar una fecha como "09/02/2010", se mostraría un texto indicando "Hace 1 día". Este tipo de visualización se empezó a popularizar gracias a GMail. La función aquí mostrada es una simple adaptación a las peculiaridades del castellano de la función nicetime que se encuentra en los comentarios de php.net.
  1. function tiempo_transcurrido($fecha) {  
  2.     if(empty($fecha)) {  
  3.           return "No hay fecha";  
  4.     }  
  5.      
  6.     $intervalos = array("segundo", "minuto", "hora", "día", "semana", "mes", "año");  
  7.     $duraciones = array("60","60","24","7","4.35","12");  
  8.      
  9.     $ahora = time();  
  10.     $Fecha_Unix = strtotime($fecha);  
  11.       
  12.     if(empty($Fecha_Unix)) {     
  13.           return "Fecha incorracta";  
  14.     }  
  15.     if($ahora > $Fecha_Unix) {     
  16.           $diferencia     =$ahora - $Fecha_Unix;  
  17.           $tiempo         = "Hace";  
  18.     } else {  
  19.           $diferencia     = $Fecha_Unix -$ahora;  
  20.           $tiempo         = "Dentro de";  
  21.     }  
  22.     for($j = 0; $diferencia >= $duraciones[$j] && $j < count($duraciones)-1; $j++) {  
  23.       $diferencia /= $duraciones[$j];  
  24.     }  
  25.      
  26.     $diferencia = round($diferencia);  
  27.       
  28.     if($diferencia != 1) {  
  29.         $intervalos[5].="e"; //MESES  
  30.         $intervalos[$j]."s";  
  31.     }  
  32.      
  33.     return "$tiempo $diferencia $intervalos[$j]";  
  34. }  
  35. // Ejemplos de uso  
  36. // fecha en formato yyyy-mm-dd  
  37. // echo tiempo_transcurrido('2010/02/05');  
  38. // fecha y hora  
  39. // echo tiempo_transcurrido('2010/02/10 08:30:00'); 

Función PHP para generar contraseñas

La siguiente función permite la creación automática de contraseñas con PHP. Permite elegir la longitud deseada y la fortaleza de la misma. La función elimina de las contraseñas caracteres que pueden ser confundidos por otros, por ejemplo la vocal "o" con el número "0", la "i" con el "1", etc.
  1. <?php  
  2. function generar_password($longitud=9, $fortaleza=0) {  
  3.     $vocales = 'aeuy';  
  4.     $consonantes = 'bdghjmnpqrstvz';  
  5.     if ($fortaleza >= 1) {  
  6.         $consonantes .'BDGHJLMNPQRSTVWXZ';  
  7.     }  
  8.     if ($fortaleza >= 2) {  
  9.         $vocales ."AEUY";  
  10.     }  
  11.     if ($fortaleza >= 4) {  
  12.         $consonantes .'23456789';  
  13.     }  
  14.     if ($fortaleza >= 8 ) {  
  15.         $vocales .'@#$%';  
  16.     }  
  17.   
  18.     $password = '';  
  19.     $alt = time() % 2;  
  20.     for ($i = 0; $i < $longitud; $i++) {  
  21.         if ($alt == 1) {  
  22.             $password .= $consonantes[(rand() % strlen($consonantes))];  
  23.             $alt = 0;  
  24.         } else {  
  25.             $password .= $vocales[(rand() % strlen($vocales))];  
  26.             $alt = 1;  
  27.         }  
  28.     }  
  29.     return $password;  
  30. }  
  31. //Ejemplo de uso  
  32. echo generar_password(5,8);  
  33. ?>  
Visto en » »

Tiempo de ejecución de una página web con PHP

Esta función mide el tiempo que tarde en ejecutarse una página web.
  1. <?php  
  2. //Crea una variable con el tiempo inicial  
  3. $tiempo_inicial = microtime(true);  
  4.   .......
  5. // Coloca en este espacio tu  
  6. // PHP  
  7. // HTML  
  8. // JavaScript  
  9. // CSS  
  10. // etc,  
  11.   ........ 
  12. //Crea una variable con el tiempo final  
  13. $tiempo_final = microtime(true);  
  14. //Restamos los dos tiempos  
  15. $tiempo_ejecucion = $tiempo_final - $tiempo_inicial;  
  16.   
  17. echo 'La página tard&oacute; '.round($tiempo_ejecucion,4).' segundos en ejecutarse';  
  18. ?> 

Recorte todos el array y hacer que carda registro pace por una funcion con PHP

Esta función poco de ayuda ofrece un método sencillo para recortar el espacio en blanco desde el principio y el final de todos los elementos de una matriz. Se utiliza la llamada a la matriz de ajuste, que a su vez, llama a la función Trim (). La iteración se maneja internamente, y así lo establece el máximo rendimiento a continuación, abordar el problema en el código de usuario.
Todo construido en función de PHP se puede asignar de esta manera, afectar a todos los miembros de una matriz. 

Function PHP:

<?php
    
/**
    *
    * Trim all values in an array
    *
    * @param$array  array   The original array
    * @return   array   the array of trimmed values
    *
    */
    
function array_trim$array )
    {
        return 
array_map'trim'$array );
    }
?>

Ejemplo de Uso:
<?php


    $array 
= array(' dingo''wombat          ''platypus' );

    
$array array_trim$array );

    foreach( 
$array as $key=>$value )
    {
        echo 
"$key = $value<br />";
    }
?>

Demostración:

0 = dingo
1 = wombat
2 = platypus

Calcular edad con PHP

Comprobación de las fechas en PHP puede ser problemático ya que PHP se ocupa principalmente de la manipulación fecha que gira en torno a las marcas de tiempo Unix. Esta es una buena cosa, en su mayoría. marcas de tiempo Unix sin embargo, no tienen una idea de los años bisiestos, por lo tanto es difícil aunque no imposible, para obtener un cálculo de la fecha exacta de ellos. Cuando las fechas deben ser exactos por razones legales, es vital que los años bisiestos se consideran. Aquí hay varias soluciones propuestas, cada uno mejor que el anterior. 

Esta funcion hace uso de la strtotime() de PHP y los incrementos de un 1 año en cada iteración. 

Function PHP:

<?php
/*** make sure this is set ***/date_default_timezone_set('Europe/London');
/**
 *
 * Get the age of a person in years at a given time
 *
 * @param       int     $dob    Date Of Birth
 * @param       int     $tdate  The Target Date
 * @return      int     The number of years
 *
 */
function getAge$dob$tdate )
{
        
$age 0;
        while( 
$tdate $dob strtotime('+1 year'$dob))
        {
                ++
$age;
        }
        return 
$age;
}
?>

Ejemplo de Uso:

 <?php
/*** Fecha de nacimineto ***/
$dob 
strtotime("april 20 1961");
/*** Fecha Actual ***/
$tdate 
strtotime("june 16 2009");
/*** Salida de la edad ***/
echo 
getAge$dob$tdate );
?>

Salida: 48