Tag Archives: php

Presentación de f-engine

La presentación de hoy me hace especial ilusión, ni se las horas/días/meses que le habré dedicado a esto.

Hoy ve la luz la versión 0.1 de F-engine, un framework php de código abierto (licencia estilo BSD) basado en codeginiter.

Vídeo de presentación: Creando un blog sencillo con F-engine


Los rótulos del vídeo están en ingles pero son bastante sencillos (Si alguien encuentra fallos gramaticales se agradecería el aviso para poder corregirlos).

Diferencias con codeigniter

  • Nuevas funciones para base de datos que he llamado “quick queries”
  • Mejoras en la organización de controladores: Los controladores aceptan n sub-directorios
  • Por defecto los controladores de f-engine aceptan una sola función pública asociada a la URL (Modificable mediante la función _remap).
  • Funciones alternativas para la carga de vistas: Permite la inclusión de variables predefinidas y/o repetitivas desde ficheros externos (Especialmente útil para hojas de estilos, ficheros javascript, cabeceras o pies de página)
  • El nombre de fichero de una vista debe terminar en “_view.php” como convenio
  • F-engine no incluye ninguna biblioteca de scaffolding
  • Viene de “fabrica” con un proyecto denominado admin que incluye un puñado de aplicaciones web. Estas aplicaciones genéricas tienen como objetivo facilitar la gestión y desarrollo de los proyectos, minimizando el tiempo de programación. Destacan su gestor de bases de datos incorporado,database administrator , y new controller wizard: Aplicación para la creación de formularios basados en estructuras de bases de datos a base de clicks
  • El código base es compatible con codeigniter al 98%: No debería llevar demasiado tiempo portar proyectos CI a F-engine y viceversa


Read more

Presentación de HipHop PHP

Los rumores se han confirmado y finalmente facebook ha hecho publico el vídeo de presentación de este compilador para PHP.

La compañía lleva cerca de 6 meses usando el proyecto en sus servidores de producción con cerca de el 90% de su contenido corriendo con HipHop.

Para facilitar su uso en proyectos de terceros, futuras versiones incluirán compatibilidad con PHP 5.3 (actualmente solo 5.2) y una extensión para ser ejecuto sobre apache además del server propio sobre el que corre actualmente.

Los resultados hablan por si solos:

  • Web: 50% menos en consumo de CPU con el mismo tráfico
  • API: 30% menos de consumo de CPU con el doble de tráfico

Las mas de 300.000 líneas de código del proyecto serán publicadas proximamente en el canal de Facebook en Github

10 expresiones regulares para PHP

Las expresiones regulares son patrones que describen un conjunto de cadenas sin enumerar sus elementos. Aún y cuando su sintaxis puede resultar algo complicada si no estamos familiarizados con ella, su versatilidad y potencia hacen de las expresiones regulares un recurso imprescindible a la hora de validar los datos enviados desde un formulario web.

A continuación os dejo 5 expresiones para PHP con las que validar algunos campos comunes en la mayoría de sites.

Nombre de usuario

$nombre = "userNaME4234432_";
if (preg_match('/^[a-zd_]{4,28}$/i', $nombre)) {
    echo "Nombre de usuario válido.";
}

Dirección de email

$email = "nombre.apellido@domain.com.ar";
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {
    echo "email válido";
}

Número de teléfono (formato de Estados Unidos, Canadá y México)

$tel = "(032)555-5555";
if (preg_match('/^((?[0-9]{3,3})?|[0-9]{3,3}[-. ]?)[ ][0-9]{3,3}[-. ]?[0-9]{4,4}$/', $tel)) {
echo "teléfono válido";
}

Fechas

$string = "15/10/2009";
if (preg_match('/^d{1,2}/d{1,2}/d{4}$/', $string)) {
    echo "fecha correcta.";
}

Dirección IP

$string = "255.255.255.0";
if (preg_match(
'^(?:25[0-5]|2[0-4]d|1dd|[1-9]d|d)(?:[.](?:25[0-5]|2[0-4]d|1dd|[1-9]d|d)){3}$',
$string)) {
    echo "IP correcta.";
}

Validaciones genéricas:

String alpha numérico

preg_match("/^([a-z0-9])+$/i", $str)


Read more

Lo mejor del 2009

Apenas quedan unos días para que el 2009 llegue a su fin y parece un buen momento para echar la vista atrás y recordar algunos de los temas más destacados que hemos tratado por aquí.

PHP – MySql

Javascript / jQuery

Linux

Vídeos


Read more

Parsear HTML con PHP

PHP Simple HTML DOM Parser es una librería pensada para manipular código HTML de forma sencilla con PHP. Siguiendo una sintaxis que recuerda a jQuery, permite acceder a tags, modificar elementos HTML o extraer contenido en poquísimas lineas de código.

Veamos un par de ejemplos:

  • Acceder a elementos HTML

    // Create DOM from URL or file
    $html = file_get_html(‘http://www.google.com/’);

    // Find all images
    foreach($html->find(‘img’) as $element)
    echo $element->src . ‘<br>’;

    // Find all links
    foreach($html->find(‘a’) as $element)
    echo $element->href . ‘<br>’;

  • Modificar elementos HTML

    // Create DOM from string
    $html = str_get_html(‘<div id=”hello”>Hello</div><div id=”world”>World</div>’);

    $html->find(‘div’, 1)->class = ‘bar’;

    $html->find(‘div[id=hello]‘, 0)->innertext = ‘foo’;

    echo $html; // Output: <div id=”hello”>foo</div><div id=”world” class=”bar”>World</div>

  • Extraer contenido

    // Dump contents (without tags) from HTML
    echo file_get_html(‘http://www.google.com/’)->plaintext;

Simple HTML DOM Parser requiere PHP 5 o superior para su correcto funcionamiento y es capaz de trabajar con HTML no valido.

Web oficial de Simple HTML DOM Parser
Descargar desde sourceforge

Vía sentidoweb

Link wrapper con PHP

Hace unos meses, mientras programaba la sección noticias, me propuse implementar un link wrapper en los comentarios tal y como hace wordpress.

El script php encargado de guardar los comentarios de las noticias anula el código html-javascript antes de guardarlo en base de datos con el fin de evitar problemas de seguridad. El objetivo era simple, añadir automáticamente un <a href=”">…</a> a los links de cada comentario y tras un par de pruebas la función linkwrap quedo así:

 function linkwrap ($text) {
     return preg_replace('@((https?://|https?://www.|www.)([-\w\.]+)+(:\d+)?(/([\S/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);
 }

Añadir marca de agua a tus imágenes con php

Hoy descubro en sitepoint un tutorial que detalla y explica los pasos necesarios para añadir una marca de agua, al vuelo, a una imagen con php.

El script final es el siguiente:

<?php
header('content-type: image/jpeg');  

$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($_GET['src']);
$size = getimagesize($_GET['src']);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);  

?>

Pásate por el artículo original donde se explica detalladamente cada uno de los pasos del script.

Mostrando avatares desde gravatar

Gravatar es un servicio online gratuito que asocia avatares a cuantas de email. Wordpress sin ir mas lejos hace uso del mismo para mostrar los avatares que acompañan a los comentarios en el blog.

Las ventajas son claras, un usuario con cuenta en gravatar muestra su avatar junto a sus comentarios en cualquier blog wordpress en el que posteé, además de muchas otras páginas web que hacen uso de ello.

Desde el punto de vista del desarrollador, su integración en cualquier aplicación web no puede ser más sencilla. Basta con crear un elemento img html cuyo atributo src apunte a

"http://www.gravatar.com/avatar/" . $md5_delEmail . ".jpg"

Si estamos programando en PHP la sentencia completa sería la siguiente:

"http://www.gravatar.com/avatar/" . md5($emailDelUsuario) . ".jpg"

La url acepta además algunos parámetros extra. En caso de que el usuario no tenga una cuenta creada en dicho servicio, por ejemplo, podemos definir una imagen standard por medio del parámetro d. El resultado sería el siguiente:

"http://www.gravatar.com/avatar/" . md5($emailDelUsuario) . ".jpg?d=http%3A%2%2Fproyecto-f.net.net%2img_por_defecto.jpg";

El servicio crea varios tamaños de la misma imagen para facilitar su integración en nuestros diseños. Para definir el tamaño de la imagen existe el parámetro s, recogeríamos un avatar de 90×90 pixeles llamando a la siguiente url:

"http://www.gravatar.com/avatar/" . md5($emailDelUsuario) . ".jpg?d=http%3A%2%2Fproyecto-f.net.net%2img_por_defecto.jpg&s=90";

Dado que encriptamos el email del usuario mediante el algoritmo md5 no ponemos en peligro la privacidad de nadie.

Usando + para unir arrays en PHP

Acostumbro a hacer uso de la funcion array_merge() de php para unir arrays pero hoy descubro, vía electrictoolbox, una manera aún más sencilla de hacerlo por medio de operador ‘+’.

Para el ejemplo partimos de dos array que comparten algunas elementos:

$array1 = array(
 'fruit' => 'apple',
 'vegetable' => 'carrot',
 'drink' => 'water',
 'snack' => 'chips'
);

$array2 = array(
 'fruit' => 'banana',
 'drink' => 'juice',
 'sport' => 'running'
);

Si los unimos por medio '+' de la siguiente manera:
$array3 = $array1 + $array2;
Si ahora miramos el contenido de $array3 con la funcion print_r() el resultado quedaría así:

Array
(
 [fruit] => apple
 [vegetable] => carrot
 [drink] => water
 [snack] => chips
 [sport] => running
)

Sistema de gestión de usuarios en PHP

UserCake es un sencillo sistema de gestión de usuarios desarrollado en PHP y mysql. Su objetivo es proporcionar una base para construir aplicaciones donde los usuarios puedan registrarse, legearse y editar sus datos de manera simple.

usrcake

Sus funcionalidades incluyen:

  • Login
  • Registro
  • Password perdido
  • Actualizar password
  • Actualizar detalles de usuario
  • Plantillas de email
  • seguridad SHA1 + Salt / Hash
  • Activación de cuenta
  • Grupos de usuario (Basic, id – group_name)

Incluye para ello funciones que cubren necesidades frecuentes como isUserLoggedIn() o isGroupMember($id) entre otras.

Vía webresourcesdepot

Proteger descargas con PHP

En ocasiones un proyecto requiere que ciertos ficheros solo puedan ser descargados por un perfil concreto de usuarios; usuarios registrados, admins, etc.

Ocultar los links a aquellos usuarios que no tiene acceso a estos documentos suele ser suficiente por lo general, pero debemos ser conscientes de que este método no impide que un usuario con acceso al fichero pueda compartir la url con otros.

Si este nivel de seguridad nos resulta insuficiente, una alternativa puede ser realizar las descargas por medio de un script PHP en lugar de apuntar al fichero directamente. Este método podría permitirnos incluso la descarga de ficheros que se encuentren fuera de los directorios a los que apache tiene acceso.

if($usuarioValido == true) {
$name = $_GET['file'];
header("Content-disposition: attachment; filename=$name");
header("Content-type: application/octet-stream");
readfile($directorio.'/'.$name);
} else {
echo "No puedes descargar este archivo";
}

Añade la potencia de PHP a tus CSS

Vía anieto2k descubro CssDispatcher, una biblioteca para manejar CSS sobre PHP que permite procesar múltiples hojas de estilo como plantillas PHP, unirlas, minimizarlas y servirlas dependiendo del navegador.

Mezclar las tecnologías de programación con el lenguaje de estilos CSS puede resultar interesante para grupos de trabajo en los que el diseñador tenga unos conocimientos básicos de programación, esta biblioteca es un claro ejemplo de como añadir potencia y comodidad a la hora de escribir, mantener y aumentar el rendimiento de las hojas de estilo.

Variables PHP en CSS

El uso de variables dentro de las CSS puede ayudarnos a realizar pequeñas modificaciones (cambios de colores o tamaños de texto) sin esfuerzo:

.paginacion { border: 1px solid <?=$rojo ?>; }
.paginacion a { color: <?=$rojo ?>; }

Hojas de estilo adaptadas al browser

Con CssDispatcher definir CSS específicas para el navegador es tan fácil como añadir un segundo parámetro en el constructor de la clase:

$styles = new CssDispatcher;
// Este CSS solo se enviará cuando sea Internet Explorer 6
$styles->add(new Css('ie-hacks.css.php', Css::UA_IE6));
$styles->add(new Css('general.css.php'));
$styles->render();

Puedes especificar las siguientes familias de navegadores: Internet Explorer 6, Internet Explorer > 6 , Gecko y WebKit. También puedes utilizar los sinónimos UA_MOZILLA, UA_FIREFOX, UA_SAFARI y UA_CHROME respectivamente.

Más info