Crear esquinas redondeadas con antialias con PHP

Rounded PHP es una librería para PHP que nos devuelve imágenes de recuadros con esquinas redondeadas con antialias perfecto.
roundedphp.png
Nos permite indicar si queremos un rectángulo completo o solo una parte, además del tamaño del recuadro, el radio, el ancho del borde, el color de fondo, contenido y borde, y la transparencia de cada color.
Rounded PHP

Snippets útiles para PHP

Interesante grupo de snippets para PHP:

  • Validador de email: la clase php-email-address-validation facilita enormemente esta comprobación.
  • Generador de contraseñas: buen código que genera contraseñas aleatorias con posibilidad de indicarle grado de complejidad.
  • Obtener la IP: porque no siempre vale con REMOTE_ADDR.
  • Forzar la descarga de un fichero
    header("Content-type: application/octet-stream");
    // displays progress bar when downloading (credits to Felix ;-))
    header("Content-Length: " . filesize('myImage.jpg'));
    // file name of download file
    header('Content-Disposition: attachment; filename="myImage.jpg"');
    // reads the file on the server
    readfile('myImage.jpg');
  • Codificar la salida: a diferentes formatos (html, javascript, …) usando esta librería
  • Envío de emails: mediante la librería PHPMailer o Swift Mailer
  • Subir ficheros: de forma sencilla con esta clase

10 code snippets for PHP developers

Php5Tube: acceso a datos de Youtube

Php5Tube es una clase open source que permite acceder de forma sencilla a la API de Youtube, procesando la respuesta XML y devolviendo un array de datos fáciles de leer que convierte el desarrollo en algo intuitivo.

Un ejemplo de uso sería el siguiente:

//get or create youtube username
if( isset($_GET['user']) ){$youtube_user = $_GET['user'];}
else {$youtube_user = 'rickrolled';}
//create phptube object and get videos
include_once("Php5tube.php");
$php5tube = new Php5tube('Video','User','Comment');
$videos = $php5tube->getUserVideos($youtube_user);

Php5Tube

xmpphp: libería Jabber para PHP

xmpphp es una librería que permite realizar acciones sobre el protocolo XMPP, en el cual está basado Jabber o GTalk.

Un ejemplo sencillo para mandar mensajes sería el siguiente:

<?php
include("xmpp.php");
$conn = new XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=False, $loglevel=LOGGING_INFO);
$conn->connect();
$conn->processUntil('session_start');
$conn->message('someguy@someserver.net', 'This is a test message!');
$conn->disconnect();
?>

Una clase que nos puede ayudar mucho en algunas tareas como en el envio de alertas o avisos.

xmpphp

Gracias David por el aviso

__autoload en PHP5

En PHP5 existe una funcionalidad muy interesante a la hora de crear una aplicación o un framework. Se trata del método __autoload que nos permite ejecutar código cuando se intenta instanciar a una clase que aún no ha sido definida aún.

Esto nos permitiría hacer un include del fichero de la clase cuando se vaya a ejecutar, así nos ahorramos muchos includes al principio de cada script.

function __autoload($class_name) {
require_once $class_name . '.php';
}
// El código anterior deberá ir en la clase y cuando vayamos a instanciarlo, como a continuación, se ejecutará
$obj  = new MyClass1();
$obj2 = new MyClass2();

El código se puede mejorar para que coja el código de distintas partes o librerías.

__autoload

Propel: ORM para PHP

Propel es un ORM para PHP que facilita la labor de desarrollo de aplicaciones web, gracias a la capa que transforma el tratamiento de la BD mediante objetos, con la que se puede recuperar, insertar y modificar datos.

No es necesario preocuparse por las conexiones de la BD y escribir SQL. Tampoco es necesario escapar datos o realizar casting. Tan solo es necesario definir la base de datos en formato XML u obtener la definición desde una base de datos ya existente.

Propel

Programación en paralelo con PHP

Realizar algunas tareas puede ser algo lento, por lo que a veces es necesario ejecutar procesos en paralelo para agilizar la ejecución de un script. PHP no permite programación concurrente, por lo cual hay que simularlo, y para ello es necesario la utilización de sockets.

El método es sencillo, se crean dos sockets y se comprueba que hayan acabado de ejecutarse:

// Ejecuta un proceso en un socket
function JobStartAsync($server, $url, $port=80,$conn_timeout=30, $rw_timeout=86400) {
$errno = '';
$errstr = '';
set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, $conn_timeout);
if (!$fp) {
echo "$errstr ($errno)
\n"; return false; } $out = "GET $url HTTP/1.1\r\n"; $out .= "Host: $server\r\n"; $out .= "Connection: Close\r\n\r\n"; stream_set_blocking($fp, false); stream_set_timeout($fp, $rw_timeout); fwrite($fp, $out); return $fp; } // Devuelve falso si el socket está desconectado o un string (que puede ser vacio) si está conectado function JobPollAsync(&$fp) { if ($fp === false) return false; if (feof($fp)) { fclose($fp); $fp = false; return false; } return fread($fp, 10000); } // Ejecución inicial // Se ejecutan dos procesos cualquiera j1 y j2 $fp1 = JobStartAsync('localhost','/jobs/j1.php'); $fp2 = JobStartAsync('localhost','/jobs/j2.php'); while (true) { sleep(1); $r1 = JobPollAsync($fp1); $r2 = JobPollAsync($fp2); if ($r1 === false && $r2 === false) break; echo "r1 = $r1
"; echo "r2 = $r2
"; flush(); @ob_flush(); } echo "

Jobs Complete

";

El autor profundiza algo más y comenta también cómo se resolvería el método divide y vencerás.

Siempre hay que tener cuidado cuando se programa en paralelo ya que podemos tener problemas al acceder simultáneamente a un recurso compartido.

Easy Parallel Processing in PHP

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.