Agilizar tus aplicaciones PHP con la elección correcta de funciones

Hay muchos consejos para agilizar tus scripts de PHP, pero en este caso se concentran en el uso de funciones y sus funciones alias. Por lógica la llamada a una función será más rápida que la llamada a una función alias, salvo en un caso que la verdad me sorprende.

Los porcentajes que se muestran son reales, pero quizás no sean perceptibles, ya que el uso de estas funciones puede ser mínimo en un desarrollo, pero bueno, si algo de tiempo obtenemos, mejor que mejor.

Las funciones son las siguientes:

  • sizeof y count: count es un 12% más rápida.
  • is_int y is_integer: is_int es un 9% más rápida.
  • chop y rtrim: rtrim es un 7% más rápida.
  • doubleval y floatval: floatval es un 4% más rápida.
  • fwrite y fputs: fputs es un 23% más rápida, esta es la comparativa que me sorprende, porque fputs es alias de fwrite. Que alguien me lo explique, ¿una diferencia del 23%? o no son alias o el ejemplo está mal medido.
  • implode y join: implode es un 5% más rápida.
  • ini_alter y ini_set: ini_set es un 19% más rápida.

7 tips for lightning fast PHP sites

Consejos iniciales para MySQL

Una serie de consejos para aquellos que empiezan con MySQL o que vienen de usar otra base de datos.

  • Motores de almacenamiento: los storage engines son podríamos decir que tipos de tablas, y la elección de estos puede ser fundamental, ya que algunos poseen características que otros no tienen, por ejemplo InnoDB tiene constraints de claves secundarias.
  • Escalado (scale-out vs scape-up): el escalado puede ser de dos tipos scale-out que se refiere a la capacidad de mejorar el servidor, y scale-up que es la capacidad de añadir más servidores. MySQL realiza mejor el scale-out que el scale-up.
  • Copias de seguridad: para realizar las copias de seguridad se usa el comando mysqldump, aunque si dispones de Linux puedes usar LVM, o también puedes usar la replicación.
  • Permisos: no existen los roles, los permisos se crean a partir del USERID.
  • Collations: por defecto, si se comparan strings no son sensibles a mayúsculas minúsculas (a=A).
  • Autocommit: activo por defecto.
  • Optimización: es recomendable usar los logs de las slow queries para ver qué va mal en nuestro sistema.
  • SQL_MODE: si estás preocupado por la integridad de los datos, deberás leer información sobre el SQL_MODE.
  • Isolation levels: importante leer sobre los isolation levels ya que tiene distinto comportamiento que en otras bases de datos como Oracle.

tips for MySQL newbies

Vogoo PHP Lib: motor para recomendaciones

Vogoo PHP Lib es un motor para filtros de recomendaciones/colaboraciones que puedes integrar en tu sistema. Gracias a esta librería podrás añadir características del tipo: “la gente a la que le gusta este artículo también le gusta…”. Es fácil de usar y con unas simples líneas de código se puede realizar el filtrado de artículos.
En su versión 2.0, los módulos se han reorganizado para mejorar la consistencia del código, a parte de añadir un módulo de estadísticas. Diseñado para que trabaje con varios sistemas de bases de datos aunque solo ha sido probado con MySQL y PostgreSQL.
Entre las características que ofrece nos encontramos con un motor de predicción de puntuaciones de usuarios, calculo de similitud entre usuarios, múltiples categorías, puntuaciones automáticas basadas en páginas vistas y muchas cosas más. Existe una versión PRO que tiene optimizado el motor de filtro.
Vogoo PHP Lib
Vía / International PHP Magazine

Templatr: generador de temas WordPress

Mucha es la gente que utiliza WordPress y no todo el mundo debe saber ni diseño, ni CSS, ni XHTML, ni mucho menos el sistema de plantillas de WordPress. Para aquellos que sepan algo, pero necesiten una ayuda, existe Templatr, una herramienta online que permite modificar una plantilla base de WordPress y añadirle los estilos que necesitemos.

Inicialmente deberemos elegir el layout (o cómo se divide la pantalla), y después podremos modificar dentro de cada tipo de página (index, static o single) cada uno de los elementos, ya sea seleccionándolos dentro de unos combos o pinchando directamente en ellos para seleccionarlos.

Existen vídeos explicativos que muestran la facilidad de esta aplicación:

Templatr

Vía / OpenSourceCommunity.org

Usar auto_increment para claves en MySQL

El uso de claves primarias con auto_increment en MySQL se debería tener en cuenta cuando el valor de la clave no es importante. Esto es, por ejemplo si tenemos una tabla de empleados y consideramos que la clave primaria es el número de empleado o el número de indentidad del ciudadano, pues quizás no sea buena idea usar auto_increment. Pero si la clave va a ser un número aleatorio, el valor no importa, el uso de auto_increment sería lo más adecuado.

Para definir una tabla con clave primaria con auto_increment, deberías ejecutar la siguiente sentencia:

create table `empleados` (
`id` int (10)   NOT NULL AUTO_INCREMENT ,
`nombre` varchar (250)   NOT NULL ,
`correo` varchar (250)   NOT NULL  ,
PRIMARY KEY ( `id` )  )

Con esta tabla, cuando insertemos un nuevo dato no se debe indicar el ID, ya directamente MySQL lo asignará.

El problema suele ser que muchas veces, cuando insertamos un registro, necesitamos la clave del registro nuevo para usarlo en la inserción en otra tabla relacionada. Por lo que si usamos el auto_increment, a priori no seremos capaces de saber cuál es el valor. En estas circunstancias deberemos usar la sentencia LAST_INSERT_ID(), la cual nos devolverá el ultimo id insertado, pero hay que tener cuidado con esto, porque con la concurrencia podemos obtener resultados no deseados.

También se puede reinicializar el valor del auto_increment, pero teniendo en cuenta que no se puede usar un valor menor o igual que uno que ya se haya usado. Por lo que habrá que tener cuidado en las exportaciones.

alter tabla tabla auto_increment=50;
| |

Hacer login a Google Adsense con PHP

Un ejemplo para conectarnos a Google Adsense usando cURL, usa a parte de cookies, el USER AGENT y las cabeceras REFERRER HTTP headers.

<?php
// Descomentar solo para admitir cierta IP
// if($_SERVER['REMOTE_ADDR'] !== '1.1.1.1') die();
$usuario=urlencode('myemail@gmail.com');
$password="micontraseña";
$gacookie="./.gacookie";
$postdata="Email=$usuario&Passwd=$password&GA3T=5AS_gBsvDHI&nui=15&fpui=3"
."&service=adsense&ifr=true&rm=hide&itmpl=true&hl=en_US&alwf=true&continue=https://www.google.com/adsense/report/overview&null=Sign in";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,"https://www.google.com/accounts/ServiceLoginBoxAuth");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $gacookie);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $gacookie);
curl_setopt ($ch, CURLOPT_REFERER, 'https://www.google.com/adsense/report/overview');
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
curl_close($ch);
echo $result;
unlink($gacookie);
exit;
?>

Login to Google AdSense using PHP

links for 2007-09-22