Expresiones regulares con filtros en PHP

Buena alternativa para validar variables usando expresiones regulares usando filtros:

  • Validar números reales
$values= array(10.75, '10.75', -1234.5678, 'This is a string', array());
$filteredValues = filter_var($values, FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY);
  • Validar expresiones regulares
if(filter_var($value, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => "/^G(.+)/")))) {
// Lo que sea
}
  • Validar URLs
$url = 'http://www.devshed.com';
if(filter_var($url, FILTER_VALIDATE_URL)) {
// Lo que sea
}

Working with Regular Expressions with Filters in PHP 5

jCryption: encriptación mediante javascript

jCryption es una librería javascript que utiliza jQuery y que nos permite encriptar los datos de un formulario sin necesidad de utilizar SSL. Para ello utiliza la encriptación del algoritmo de clave pública de RSA.
Muy útil para aquellos que no puedan disponer de conexión SSL.
jCryption
Vía / DZone

Cherokee: servidor web rápido y potente

Cherokee es un servidor web muy rápido y con muchas funcionalidades. Según los benchmarks es el más rápido que existe, lo cual es bastante interesante.
Permite FastCGI, SCGI, PHP, CGI, SSI, TLS y conexiones encriptadas SSL, Virtual hosts, Authentication, codificación “on the fly”, Load Balancing, logs compatibles con Apache, balanceo de bases de datos, Reverse HTTP Proxy, Traffic Shaper, Video Streaming y mucho más.
Lo mejor del todo es que el proyecto lo lleva un madrileño, lo peor de todo es que desconocía totalmente el proyecto 🙁
Cherokee
Vía / HowtoForge

Interfaces predefinidas en PHP5

Interesante resumen de interfaces predefinidas en PHP5 que permiten darle a nuestros objetos unas características muy útiles:

  • Traversable: permite usar el objeto en un foreach.
  • Iterator: extiende de Traversable y permite realizar iteraciones sobre el objeto.
  • IteratorAggregate: extiende de Traversable y permite añadir objetos iterators externos.
  • ArrayAccess: permite comportarse al objeto como un array, usando por ejemplo el operador [].
  • Serializable: permite realizar serialización en el objeto.

PHP5: Predefined Interfaces

Vía / DZone

phpMyBackupPro: realiza backups de MySQL

phpMyBackupPro es un sistema que nos permite controlar las backups de nuestra BD MySQL de forma sencilla.

Entre las características que ofrece nos encontramos con:

  • Backups de una o varias BD con datos, sin datos, estrutura de las tablas, …
  • Tres tipos de comprensión: sin comprensión, gzip o zip
  • Backups programables
  • Administración de backups que permite verlas, recuperarlas, descargarlas o borrarlas
  • Backup en servidor FTP o envío por email
  • Modo shell

phpMyBackupPro

Vía / Weblenium

jQuery Silver: buscador de enlaces con jQuery

jQuery Silver es un buscador de enlaces en el contenido de la página. Su uso es muy sencillo, se abre una ventana mediante shortcuts, y en ella se pueden realizar búsquedas de enlaces. Permite buscar en etiquetas A e INPUT.
Quizás a simple vista no sea muy útil, pero puede venir bien para aplicaciones más elaboradas.
jQuery Silver
Vía / DZone

Detecta peticiones Ajax en PHP

Algo muy importante a la hora de desarrollar aplicaciones en Ajax es ofrecer la opción no-Ajax, y para ello es necesario detectar cuando la petición se realiza mediante Ajax, algo muy sencillo gracias a una cabecera que mandan los navegadores modernos:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo "Es una petición AJAX"
}

Detect an AJAX Request in PHP

Laboratorio: índice lateral con jQuery

Algo que me gusta bastante de algunos editores tipo Netbeans es que cuando hay algún error en una línea aparece un enlace en el lateral en la posición relativa de la línea respecto al alto del editor.

Algo parecido se me ha ocurrido hacer con jQuery, obtener los elementos cabecera (H1..H6) y crear un índice, y mediante estilos y jQuery repartirlos por el lateral de la ventana.

indice_lateral.png

El código es sencillito, recupero los elementos h1..h6, calculo su posición X y luego ordeno el array por esta posición, creo una lista ordenada y anidada con OLs y LIs y con CSS y Javascript coloco los elementos donde corresponde.

		  $(document).ready(function() {
var ids = 0;
var haches = new Array();
for (var i=1; i<7; i++) {
$('#content h'+i).each(function () {
if (!this.id) this.id = 'haches_'+ids++;
if ($(this).css('display') != 'none') {
haches.push(new Array($(this).offset().top, $(this).text(), this.id, i));
}
});
}
haches.sort(function(a,b){return a[0]>b[0];});
var ant = 1;
var html = '<ol class="indice">\n'
for(var i=0; i<haches.length; i++) {
if (haches[i][3] > ant) {
html += '\n<ol>';
} else if (haches[i][3] < ant) {
html += '\n</ol>';
}
html += '<li id="haches'+i+'" class="indice'+haches[i][3]+'"><span><a href="#'+haches[i][2]+'">'+haches[i][1]+'</a></span></li>\n';
ant = haches[i][3];
}
html += '</ol>\n';
$(document.body).prepend(html);
$('#indice').css('position: absolute; top: 0px');
var alto = $(window).height();
var max = $(document).height();
for(var i=0; i<haches.length; i++) {
console.log(parseInt(alto*haches[i][0]/max));
$('#haches'+i).css('top', parseInt(alto*haches[i][0]/max)+"px");
$('#haches'+i).css('left', ($(window).width()-50)+"px");
}
});

Ni que decir tiene que le faltan cosas por hacer, como por ejemplo moverlo según se mueve el scroll, pero para hacerlo en un rato no está tampoco muy mal. Los distintos tipos de enlaces a cabecera tienen sus estilos propios (feos pero propios) y cuando te pones sobre uno de ellos aparece el título enlazando al elemento en cuestión (esto también habría que refinarlo).

Ejemplo