Marzo 6th, 2008

Crear un captcha

Es habitual que se nos cuele mucho spam por formularios, y es que los spamers, suelen crear aplicaciones para enviar miles y miles de correos por formularios vulnerables, que envían copia del e-mail al autor, por ejemplo. Voy a iniciar un pequeño tutorial para crear un captcha, para “obligar a los usuarios a demostrar que son humanos”.

Primera Parte
<?php
session_start();

//Creamos una cadena aleatoria de caracteres
$md5 = md5(microtime() * mktime());

//Reducimos a 5 los caracteres
$string = substr($md5,0,5);
?>

Crear una imagen de fondo

<?php

//creamos un fondo de imagen y lo subimos, luego con la funcion imagecreatefrompng, la pasamos al captcha
$captcha = imagecreatefrompng("./imagencaptcha.png");

//podemos configurar los colores para las lineas
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);


//y para evitar las arañas le añadimos las lineas
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);
?>

Insertamos el texto en la imagen

<?php
//insertamos la cadena creada aleatoriamente en la imagen
imagestring($captcha, 5, 20, 10, $string, $black);

//como no, encriptamos y almacenamos el valor de la cadena en una variabe sesion
$_SESSION['key'] = md5($string);


//devolvemos la imagen para crearla
header("Content-type: image/png");
imagepng($captcha);
?>

Comprobamos el valor que ingresa el usuario

<?php
session_start();

if(md5($_POST['code']) != $_SESSION['key']){
//lo enviamos a la página de error
echo "header('Location: error.php');";
}else{
//lo enviamos a donde queríamos ha puesto bien el captcha
echo "header('Location: buena.php');";
}


?>

La parte de la creación del formulario en este caso, es la más básica.

Diciembre 28th, 2007

Asignar a multiples zips, nombre que contiene dentro del .zip

Hace poco, por una razón X, he tenido que renombrar todos unos zips del tipo 92832.zip al contenido que tenían dentro. Con esté script que pongo a disposición de todos, se puede lograr en un rato, está en php.

define('ZIP_DIR','zips/');
define('ZIP_DIR_NUEVO','zipsNuevos/');


if(!dl('php_zip.dll')) die('Necesita la extension ZIP');
$zipDir = dir(ZIP_DIR);
while(false !==($zipArchivo = $zipDir->read()))
{
$zipDirArchivo = ZIP_DIR.$zipArchivo;
if('.zip'==substr($zipArchivo, -4) && is_file($zipDirArchivo))
{
$zip = zip_open($zipDirArchivo);
if($zip)
{
$zipEntradaNombre = basename(zip_entry_name(zip_read($zip)));
$zipEntradaExt = strrpos($zipEntradaNombre, '.');
$zipNuevoNombre = substr($zipEntradaNombre, 0, ($zipEntradaExt?$zipEntradaExt:strlen($zipEntradaNombre)));
$zipNuevoNombre = ucwords(str_replace('.', ' ', $zipNuevoNombre));
$zipNuevoNombreDir = ZIP_DIR_NUEVO.$zipNuevoNombre.'.zip';
zip_close($zip);


if(file_exists($zipNuevoNombreDir))
{
$i=0;
while(file_exists($zipNuevoNombreDir = ZIP_DIR_NUEVO.$zipNuevoNombre.'_'.$i.'.zip')) $i++;
}


echo (rename($zipDirArchivo, $zipNuevoNombreDir) ? 'Renombrado':'Error al renombrar').": $zipDirArchivo => $zipNuevoNombreDir\r\n";
}
}
}
$zipDir->close();

Noviembre 14th, 2007

Una imagen para cada navegador

Si necesitamos que una imagen de nuestra web, varíe, dependiendo del navegador lo podremos realizar sin necesidad de usar javascript ni ningún hack css, simplemente html de la siguiente manera:

< img
/srcx00="ie.gif"
/''srcx00="firefox1_5.gif"
/''src="firefox2_0.gif"
/""src="gecko_others.gif"
"sx00rc="safari2.gif"
"src="safari3.gif"
""src="konqueror.gif"
srcx00="w3m.gif"
srcx0c="opera.gif"
src="others.gif"
src="lynx.gif" />

Reconoce Firefox2.0, Firefox1.5, otro motor Gecko, Safari2, Safari3, Opera, IE, w3m, Lynx, y otros navegadores.

Noviembre 12th, 2007

Fuentes para ubuntu

Si te encuentras falto de fuentes en tu equipo y deseas ampliar la lista de de fuentes disponibles, traigo una lista de 465 fuentes libres disponibles para hacer lo que nos de la gana con ellas. Para agregarlas, solo tendremos que llevar a cabo los siguientes pasos:

  1. Añadimos a los repositorios:
  2. sudo gedit /etc/apt/sources.list
    Y añadimos las siguientes lineas al final:
    deb http://ppa.launchpad.net/corenominal/ubuntu gutsy main
    deb-src http://ppa.launchpad.net/corenominal/ubuntu gutsy main

  3. Actualizamos:
  4. sudo apt-get update

  5. Instalamos:
  6. sudo apt-get install ttf-aefonts

Así, dispondremos de fuentes suficientes para diseñar tranquilamente.

Noviembre 7th, 2007

Abrir terminal desde carpeta

Este truco nos instala una opción muy útil en Nautilus (el gestor de las ventanas). Ubuntu no trae por defecto la posibilidad de abrir un Terminal desde una carpeta con la ruta ya seleccionada, y hay que hacerlo manualmente navegando por las carpetas desde la linea de comandos lo que es un poco engorroso dado los nombres largos de los archivos y carpetas. Para instalar ésta opción simplemente hay que teclear en una consola:

  • sudo apt-get install nautilus-open-terminal

Nos queda de la siguiente forma:

Abrir desde carpeta

Parece una tontería, pero ayua bastante. Esto característica, viene por defecto en linux mint.

Vía | Miguiaubuntu

Noviembre 5th, 2007

Sonido en Amilo con ubuntu

Un problema que surge a la hora de instalar la famosa distro en portátiles, es el sonido. No queda del todo bien configurado, si has tenido este problema, después de comprobar que estaba todo correcto en el alsamixer y que el alsaconf no nos soluciona nada. Un método para solucionarlo es el siguiente:

Primero ver si la tarjeta está siendo vista por el sistema
lspci
Después instalamos alsa:
sudo apt-get install alsa-base alsa-oss alsa-utils amixer
Yo aconsejo reconfigurar alsa en este punto:
sudo dpkg-reconfigure alsa-base
luego configurar la tarjeta a través del alsaconf:
sudo alsaconf
Ponemos el volumen:
amixer
Y por último los permisos al usuario:
sudo useradd usuario sound

Espero que le sirva a alguien de ayuda, conmigo consiguió que volviera a tener el bendito sonido. Uso Linux Mint, pero es válido para ambos.