Realizar backups desde cURL

Interesante script que mediante cURL realiza un backup de nuestra web y lo inserta en un servidor FTP. No es el método más eficiente ni el más recomendable, pero si nos puede servir como ejemplo para realizar procesos similares o, por ejemplo, para crear sites de administración que necesiten realizar copias de seguridad.
El ejemplo es útil.
Create custom backups from your website using cURL

Swift Mailer: librería PHP para envío de emails

Swift Mailer es una potente librería que permite el envío de emails y que entre las características que ofrece, nos encontramos con: cabecera de control RFC 2822, internacionalización, balance de carga, soporte para SSL y TLS (para servidores GMail), imágenes embebidas, MIME 1.0 (adjuntos, …), y mucho más.
Swift Mailer
Gracias Óscar por el aviso.

Conexiones en paralelo con cURL

Para aquellos que necesiten conexiones múltiples con cURL para acceder a varias web, este ejemplo es un buen comienzo:

<?php
// Create two cURL handlers
$ch1 = curl_init(); $ch2 = curl_init();
// Set options on both
curl_setopt($ch1, CURLOPT_URL, "http://example.com/");
curl_setopt($ch2, CURLOPT_URL, "http://example2.com/");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
$running=null;
do {
curl_multi_exec($mh,$running);
} while ($running > 0);
$data1 = curl_multi_getcontent($ch1);
$data2 = curl_multi_getcontent($ch2);
curl_multi_remove_handle($ch1);
curl_multi_remove_handle($ch2);
curl_multi_close($mh);
?>

Se trata de usar en vez de curl_init usar curl_multi_init y sus funciones asociadas.

Parallel web scraping in PHP: cURL multi functions

Vía / dzone

SplObjectStorage: almacenar objetos únicos en PHP6

La librería SPL trae muchas cosas interesantes y que son un poco desconocidas. Pero en PHP6 traerá más novedades que pueden facilitarnos mucha la programación. En este caso se trata de SplObjectStorage, una clase que nos permitirá crear colecciones de datos únicos de forma muy sencilla, ya que si insertamos dos veces el mismo elemento, la segunda vez lo ignorará. A parte trabaja con los elementos como referencia, por lo que si modificamos el objeto una vez insertado, este será también modificado en la clase que guarda la colección de objetos.

Un ejemplo del mismo es el siguiente:

<?php
/**
*  Test class that we will store in the
*  SplObjectStorage object.
*/
class StorageTest {
private $title;
public function __construct( $title ) {
$this->title = $title;
}
public function __toString() {
return $this->title;
}
}
$storage = new SplObjectStorage();
$obj = new StorageTest( "www.eide.org" );
$storage->attach( $obj );
$storage->attach( $obj );
foreach( $storage as $o ) {
echo $o;
echo "\n";
}
?>

El resultado de esta ejecución solo nos devolverá un resultado.

SplObjectStorage

Detectar caras en imágenes mediante PHP

Excelente extensión para PHP que permite usar OpenCV (Open Source Computer Vision Library) para poder detectar caras en imágenes.
Por ahora dispone de dos funciones: face_count y face_detect, que proporcionan el número de caras encontradas y un array con las coordenadas de la cara. La verdad es que puede ser muy útil para todas las aplicaciones sociales que hay ahora.
Para instalarlo es necesario tener instalado: pkgconfig, libpng, zlib, libjpeg, libtiff y python.
PHP Facedetect Extension
Vía / PHPDeveloper.org

Drizzle: MySQL para la web

Drizzle es de lo que más se está hablando últimamente dentro de los blogs sobre MySQL. Se trata de un motor de base de datos pensado para la web. Basado en MySQL 6, pretende llegar a ser más rápido que MySQL y admitir mucha concurrencia.

En base inicial, creado por una comunidad de desarrolladores liderado por uno de los fundadores y desarrolladores iniciales de MySQL, elimina de MySQL6 los triggers, procedimientos almacenados, las vistas, control de acceso, caché de queries y prepared statements, tan solo MyISAM con índices FULLTEXT.

Tiene muy buena pinta, ahora a ver a qué llega el desarrollo.

Más información

Drizzle

Se regalan 20 invitaciones para YouAre

youare_logo.pngSi el otro día hablaba del lanzamiento de YouAre, que aún está en beta privada, hoy dispongo de 20 invitaciones para usar YouAre.
Aquellos que quieran una de esas 20 invitaciones solo tienen que mandar un email a use[arroba]youare[punto]com con el título Invitaciones Sentido Web para que conseguirla.
Actualización: ya se han repartido todas las invitaciones.

DocumentFragments en Javascript

Nunca se para de aprender, y de John Resig menos. DocumentFragments son contenedores ligeros que pueden almacenar objetos DOM de Javascript. Yo ni había oído hablar de ellos y la verdad es que su uso es sencillo y mucho más potente que trabajar con el DOM normalmente (de 2 a 3 veces más rápido).

El ejemplo que muestra John lo dice todo y muy fácil. Primero creamos unos elementos para luego insertarlos (de forma normal y con DocumentFragments):

var elems = [
document.createElement("hr"),
text( document.createElement("b"), "Links:" ),
document.createTextNode(" "),
text( document.createElement("a"), "Link A" ),
document.createTextNode(" | "),
text( document.createElement("a"), "Link B" ),
document.createTextNode(" | "),
text( document.createElement("a"), "Link C" )
];
function text(node, txt){
node.appendChild( document.createTextNode(txt) );
return node;
}

Y luego la inserción normal:

var div = document.getElementsByTagName("div");
for ( var i = 0; i < div.length; i++ ) { for ( var e = 0; e < elems.length; e++ ) { div[i].appendChild( elems[e].cloneNode(true) ); } }

Y por último el nuevo método:

var div = document.getElementsByTagName("div");
var fragment = document.createDocumentFragment();
for ( var e = 0; e < elems.length; e++ ) { fragment.appendChild( elems[e] ); } for ( var i = 0; i < div.length; i++ ) { div[i].appendChild( fragment.cloneNode(true) ); }

Resumiendo, mucho más eficiente y sencillo de usar. Seguro que para la próxima versión de jQuery nos ofrece esta implementación.

Manual y ejemplos de mod_security

mod_security es un módulo de Apache que nos permitirá añadir seguridad a nuestro servidor web, detectando y previendo ataques. Para los que necesitemos usarlo, nos vendrá muy bien esta serie de tutoriales:

  • mod_security + mod_rewrite
  • Evitar spam en los campos POST de los formularios
  • Activar mod_security en DreamHost
  • Descativar mod_security para una determinada IP
  • Descativar mod_security con autorización en htaccess
  • Ejemplo de configuración para DreamHost
  • Bloquear spam
  • Forzar espera de ms en conexiones
  • Permitir ciertos REQUEST_METHODS
  • y más

mod_security Guide and Examples of use in .htaccess