Password random en php

Hace un par de años tuve que comenzar a generar claves aleatorias para algunos sistemas de registro de usuarios seguros y captchas en los que he trabajado. He utilizado varias fórmulas, pero hasta ahora la que considero más acabada y elegante es esta:

$claves = array_flip(array_merge(range(’a’,’z’),range(’A’,’Z’),range(0,9)));
$password = implode(“”,array_rand($claves, 6));

No necesita mucha explicación, pero lo que hace es generar tres arrays, uno de la “a” a la “z” en minúscula, otro en mayúscula y el tercero, del “0” al “9”.  Luego unimos los arrays en uno gracias a array_merge, y con array_flip intercambiamos “keys” por “values“. En la segunda línea generamos un nuevo array compuesto por 6 “keys” aleatorias y, finalmente, obtenemos nuestra password random con el implode que nos devuelve un string de 6 dígitos.

Referencia
Generador de Password Aleatorios

Problemas comunes I: Max File Uploads en PHP

Como programador y administrador de servidores muchas veces me encuentro con problemas simples que, por diversas razones, se repiten cada cierto tiempo. Algunas veces son tareas que fueron realizadas en  proyectos antiguos que nadie recuerda o conoce; otras, en cambio, se pierden en la trivialidad de lo cotidiano y, por lo tanto, no están debidamente documentadas para que el resto de las personas con las que trabajo puedan resolverlas por su cuenta.

La idea entonces es crear y compartir algo así como un repositorio de soluciones rápidas a estos problemas comunes. Por tanto, si se animan, espero que en los comentarios pregunten lo que sea pertinente al tema expuesto o propongan nuevos problemas.

Problema: aumentar tamaño máximo para subir archivos con PHP

Estamos trabajando con un gestor de contenidos como Wordpres o Drupal y necesitamos subir mediante un formulario archivos PDF, PNG o DOC que pesan sobre 2 MB, pero resulta que no se puede y nos sale un mensaje de error.

El problema no es del gestor de contenidos. La configuración por defecto de PHP en un servidor Linux permite copiar o subir archivos desde la máquina local al servidor que tengan un tamaño máximo de 2MB. Aunque no es recomendable aumentar esta cuota en entornos poco protegidos o públicos es posible hacerlo de la siguiente forma:

serumax@bunbury:~$  sudo nano /etc/php5/apache2/php.ini
[sudo] password for serumax:

Ingresamos la clave sudo de nuestra máquina y con CTRL+W procedemos a buscar “upload_max_filesize“:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

Nos fijamos que el parámetro file_uploads esté en On y donde dice upload_max_filesize = 2M reemplazamos por el tamaño que necesitamos, pero ojo con el tiempo de ejecución de los script en PHP, que por defecto es de 30 segundos (se archiva un nuevo draft) y si subimos un archivo muy grande esto puede verse afectado.

Por ejemplo, podemos aumentarlo a 5 Megas:

; Maximum allowed size for uploaded files.
upload_max_filesize = 5M

Guardamos con CTRL+O y salimos con CTRL+X.  Con esto ya hemos hecho lo más díficil. Ahora sólo nos resta volver a iniciar Apache, sí Apache, para  que los cambios tengan efecto. Esto porque PHP generalmente corre como módulo de Apache

serumax@bunbury:~$sudo /etc/init.d/apache2 restart
[sudo] password for serumax:

o mejor solo recargamos la nueva configuración

serumax@bunbury:~$sudo /etc/init.d/apache2 reload
[sudo] password for serumax:

Como comentario final, este ejemplo lo hice pensando en un servidor Linux  Ubuntu 8.04, con Apache2 y PHP5. Espero que sea de utilidad 🙂

Debug PHP en Firebug

Desde que entendí cómo funcionaba firebug se ha vuelto una de mis extensiones favoritas de firefox para desarrollar aplicaciones Jacascript y, también, para solucionar problemas de CSS y HTML, incluso por sobre web developer.

Pero como la mayor parte del tiempo estoy trabajando con formularios y validaciones que corren sobre PHP necesitaba tener una funcionalidad similar para este lenguaje. Sin embargo, pese a haber probado algunas herramientas que me prometían el cielo de la depuración no encontré nada que funcionase fácilmente y bien. En otras palabra, ni Pear ni FirePHP fueron opción. PHP_debug, por otra parte, se me hizo muy atractivo de usar en algún momento, pero como también corre sobre Pear, me terminó desencantando.

Determinado a conseguir un depurador que pudiese usar con Firebug, me propuse crear uno, pero en eso encontré un pequeño script que hizo la magia.

PHPform, una herramienta para crear formularios online

pform

Una de las tareas rutinarias más tediosas al hacer un sitio es crear los formularios y validar sus datos (distinto de validar el html), es decir, comprobar que el mail sea un mail, que un campo para el teléfono sea numérico, etc.

Pero con phpform ahora podrás armar tus formualrios de manera más simple y rápida que nunca. Sólo necesitaras seleccionar el tipo de campo que necesitarás, darle un nombre y ver que tipo de validación usará.

La validación -al ser Ajax- podría eventualmente se saltada por navegadores con javascript desactivado, por lo que recomiendo validar también los datos en PHP o el lenguaje en que estés trabajando.

Enlace: phpform

MAMP: Apache, PHP y MySQL en Mac

mamp

MAMP permite instalar Apache, PHP y MySQL rápidamente en MacOSX que ya tiene instalado Apache, pero gracias a MAMP se creará una nueva instancia para testear aplicaciones web en desarrollo.

La descarga consiste en fichero dmg de 106 MB que trae la versión estándar y la versión profesional. La principal diferencia es que la instalación profesional permite instanciar más de una aplicación web simultáneamente.

La instalación incluye phpMyAdmin y SQLiteManager para gestionar MySQL. Incluso incorporá un widget para arrancar los servidores desde el Dashboard, sin necesidad de ejecutar el programa.

Enlace: MAMP

Web on Stick o un servidor web en tu pendrive

Web on Stick es un servidor web que podrás llevar en un pendrive USB y ejecutar en cualquier equipo Windows (desde el 98 al Vista) al que conectes el pendrive y sin necesidad de instalar nada más.

WOS trae Apache, MySQL, PHP 4 y 5 e ImageMagik y, opcionalmente, tambiém puedes instalar CMS como Typo 3, WordPress, Joomla y Mediawiki
Es ideal para cuando un cliente nos pide “Una copia de la web en CD” o para proyectos web del tipo “Demos”

Enlace: WOS

5 buenos recursos para comenzar con php

Constantemente navego internet buscando tutoriales y recursos para php, si no estás muy familiarizado con este lenguaje y deseas saber por dónde empezar, aquí va una lista que de los sitios que más frecuento en busca de ayuda.

1-. Manual oficial de PHP
Es muy obvio recomendar este manual, pero la documentación oficial de PHP es la mejor organizada y ejemplificada que existe en Internet sobre algún lenguaje. Está en español y hay versiones descargables que son de mucha ayuda cuando trabajas offline.

2-. PHP Classes
Ya ni recuerdo los años que estoy susctrito a este sitio, su gráfica siempre me ha parecido mala, pero la gran cantidad de classes que tiene disponible es impresionante. Puedes encontrar todo tipo de script… clases para conexiones a bb.dd, carros de compra, sistemas de mailing, gestión de usuarios, etc. La red de colaboradres es enorme, por lo que hay bastante código comentado en español  y pudes, si llegas a necesitarlo, contactarse con su programador.

3-. Hotscripts
Hotscripts se ha tranformado en un verdadero portal de todo tipo de lenguajes, pero su sección de Scripts and Programs de php es una de las más completas y ordenadas que he visto. Tal vez lo malo que tiene sus sistema de recomendación pagada de script con licencias comerciales, pero con un poco de paciencia es posible encontrar lo que se necesita.

4-. PHP Freaks
Otro buen sitio para iniciarse. Hartos tutoriales, ejemplos, tips y artículos.

5-. Good php tutorials
Otra fuente inagotable de ejemplos y tutoriales. Algunos bastante comlejos como crear documentos zip al vuelo.

Una de yapa, los chicos de Zend tienen excelentes tutoriales también, y de paso aprendes Zend Framework.Te quitarás un montón de pega de encima…