Closures son bloques de código que pueden ser pasados a una función y que pueden manejar variables que están definidas en el mismo ámbito. Algo que puede ser bastante útil cuando queremos repetir un código que solo se ejecutará en un lugar determinado y no queremos definir una función a nivel de clase para poder usarla.
Un vistazo a un ejemplo nos podrá ayudar de mejor manera:
function replace_in_array ($search, $replacement, $array) {
$map = function ($text) use ($search, $replacement) {
if (strpos ($text, $search) > 50) {
return str_replace ($search, $replacement, $text);
} else {
return $text;
}
};
return array_map ($map, $array);
}
Como se puede ver se trata de definir una función con una serie de parámetros, indicar qué variables del mismo ámbito puede usar y una vez definida, realizar la llamada a la función.
Porque no todo el NOSQL es Cassandra, es importante tener a mano cualquier librería que podamos usar en el caso de trabajar con NOSQL. Rediska es una librería que permite trabajar con Redis, la cual tiene las siguientes características:
Soporte para múltiples servidores
Hashing consistente, crc32 o algoritmo propio para distribución de claves
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.
PHPIDS (PHP-Intrusion Detection System) es una librerÃa que podemos añadir a nuestras aplicaciones realizadas en PHP, que nos ofrece capa de seguridad de forma sencilla. No evita ni filtra ataques contra nuestra aplicación, tan solo detecta cuando se produce un ataque y actúa como nosotros queremos que lo haga.
Basado en un conjunto de filtros aprobados y testeados, cada ataque tiene asignado un número que valora su impacto en nuestra aplicación, lo cual hace sencillo decidir que acción tomar contra el intento de ataque, lo cual puede ser un mensaje de aviso por correo a los desarrolladores, mostrar un aviso al atacante o finalizar la aplicación.
La integración con nuestra aplicación es sencilla. PHPIDS
VÃa / PHPDeveloper.org
Ahora veo un ejemplo en el que un ataque puede evitar estas funciones cuando se crea la página con HTML no estándar. Tenemos el tÃpico ejemplo de un texto que se introduce por un formulario y se presenta como un enlace.
HTML Purifier es un filtro en PHP que elimina código XSS de HTML y hace que sea estándar. Acaba de sacar la versión 3.0 y entre las novedades nos encontramos con:
Requiere PHP5.
Las propiedades CSS no son sensibles a mayúsculas o minúsculas.
Ahora que está tan de moda el software social y las posibilidades de compartir nuestras experiencias, sobre todo en imágenes. Es posible que no queramos que los usuarios suban imágenes con desnudos. Para ello esta clase que analiza los colores que existen en la imagen y devuelve una posibilidad de que la imágen contenga “demasiada carne”.
Claro, que este script nos puede ayudar, aunque tampoco hay que tratarlo como perfecto, porque está claro que no distinguirÃa de una foto de una cara o un grupo de caras, de una foto de una modelo posando desnuda, y muchos otros ejemplos que seguro que se pueden decir que pasarÃan este filtro.
Pero al menos si se trata de una ayuda, para localizar imágenes y luego revisarlas manualmente, a parte de incluir la posibilidad de que los usuarios avisen que determinada fotografÃa no cumple con los requisitos deseados. Class: Image Nudity Filter
VÃa / dzone