Ejecutar PHP en Google App Engine

Google App Engine es un hosting gratuito de aplicaciones con 500MB de almacenamitno y bando de ancha para 5 millones de páginas vistas, pero centrado en Java. Aquellos que deseen ejecutar sus aplicaciones PHP en GAE deberán hacerlo mediante Quercus, una implementación Java de PHP.
El el post que referencio explican paso a paso qué hacer para poder ejecutar nuestras aplicaciones PHP en GAE.
Run PHP on the Google App Engine

Detectar código duplicado en PHP con PHPCPD

PHPCPD es una herramienta que nos permite detectar código duplicado en nuestros scripts PHP. Una utilidad muy interesante sobre todo para aquellos proyectos grandes en los que hay muchos ficheros y unos cuantos metiendo mano al código, ya que la falta de documentación o de comunicación hace que se repitan codigos en diferentes partes del proyecto, o también debido a malas prácticas a la hora de desarrollar. El código repetido hace que sea imposible de mantener y cueste horrores modificar una funcionalidad ya que hay que buscar en diversos lugares.
PHPCPD
Vía / PHPDeveloper.org

Comprobar si una dirección de email existe sin enviar un mensaje

El email es uno de los datos más solicitados cuando se desarrolla una aplicación web. Para comprobar que se trata de una dirección de email válida, normalmente se envía un email de confirmación, pero se pueden dar circunstancias en las que no es posible o deseado el envío de ese email, por lo que es necesario realizar otras operaciones para comprobar su existencia.
El post que os paso a continuación nos indica cómo saber si la dirección de email existe usando comandos SMTP. Fácil y sencillo.
How to check if an email address exists without sending an email?
Vía / philsci

| |

Añadir variables a CSS mediante PHP y htaccess

Curioso script que nos permite añadir variables a nuestras CSS usando para ello PHP y htaccess. No es algo que recomendaría hacer por tema de rendimiento, pero sí para proyectos en los que quienes realicen las páginas no tenga demasiado conocimiento de desarrollo web.
El proceso es sencillo, las css mediante Apache se redireccionan a un script PHP, en las CSS se crean variables del siguiente modo $color: #FFF; y luego el nombre de la variable se usa en cada estilo. El PHP parsea el fichero CSS y sustituye cada aparición de la variable por su correspondiente valor. Se cachea el resultado y se muestra.
Puede que haya modos más eficientes, como que el archivo CSS realmente no exista, y cuando sea así, se ejecute el script y se cachee, así la próxima vez que se acceda, no se pasa por el script PHP.
How to Add Variables to Your CSS Files
Vía / CSS Globe

Utilidades para comprobar la calidad del código PHP

5 herramientas para comprobar la calidad de código PHP:

  • PHP_CodeSniffer comprueba si falta algún elemento de código estándar en los scripts PHP, Javascript y CSS
  • phpmd busca en el código PHP posibles problemas como bugs, código no óptimo o expresiones complicadas.
  • phpcpd detector de código PHP copiado/pegado.
  • PHP_Depend herramienta de métricas PHP.
  • PHPUnit framework de unidades de test.

Quality Assurance Tools for PHP

Vía / PHPDeveloper.org

Errores comunes a la hora de optimizar

Interesantes consejos que nos ofrece Ilia Alshanetsky sobre la optimización de nuestras aplicaciones. Resumiendo el PDF de una charla que dió que ha compartido, tenemos:

  • Ten claro que va a hacer tu aplicación antes de meterte a optimizar
  • Basa tus cálculos sobre crecimiento y escalabilidad sobre datos reales, no sobre pajaras mentales de los comerciales
  • Más código no implica más lentitud, modulariza tu código para obtener mejores resultados
  • Piensa sobre el tiempo/gasto de desarrollo por ingenieros y el gasto en nuevo hardware. Esta solución no siempre es válida, ya que evitar cuellos de botella añadiendo servidores puede ser causa de mayores problemas en el futuro. Si tu código o consultas a la BD no son eficiente, es mejor optimizarlas. Para conseguir una mejora de rendimiento del 5% mejor no te molestes en optimizar el código.
  • La optimización de código puede originar fallos en otras partes de la aplicación
  • Cuidado con los includes: la compilación puede tardar más que la propia ejecución
  • Cache, preferiblemente en memoria, tanto datos recuperados de la BD como procesos que tarden en ejecutarse
  • No todo tiene que ser en tiempo real
  • Fíjate sobre todo en la base de datos, suele ser lo primero que necesita optimización
  • Usa herramientas para encontrar los cuellos de botella
  • Micro-optimizaciones no solucionarán tus problemas de rendimiento
  • Si crees que vas a crecer, la escalabilidad es más importante que la velocidad
  • No reinventes la rueda, crearte funciones que hacen lo mismo que funciones nativas de PHP es inutil

Common Optimization Mistakes

Vía / iBlog – Ilia Alshanetsky

Sobreescribir funciones internas de PHP mediante namespaces

Una de las novedades que trae PHP 5.3 son los namespaces, un modo de encapsulación de elementos. Gracias a los namespaces podemos ejecutar un mismo código usando diferentes namespaces y así obteniendo diferentes resultados.

Esta opción nos permite sobreescribir funciones de PHP y usarlas en nuestro código:

namespace Foo;
function file_put_contents( $filename, $data, $flags = 0, $context = null ) {
$return = \file_put_contents( $filename, $data, $flags, $context );
chmod($filename, 0444);
return $return;
}

What’s new in PHP V5.3, Part 3: Namespaces

Librería PHP para Paypal, Authorize.net y 2Checkout

PHP Payment es una librería PHP para realizar pagos en tres de las plataformas de pagos Paypal, Authorize.net y 2Checkout haciendo el proceso de pago bastante sencillo, como por ejemplo para Paypal:

// Include the paypal library
include_once ('Paypal.php');
// Create an instance of the paypal library
$myPaypal = new Paypal();
// Specify your paypal email
$myPaypal->addField('business', 'YOUR_PAYPAL_EMAIL');
// Specify the currency
$myPaypal->addField('currency_code', 'USD');
// Specify the url where paypal will send the user on success/failure
$myPaypal->addField('return', 'http://YOUR_HOST/payment/paypal_success.php');
$myPaypal->addField('cancel_return', 'http://YOUR_HOST/payment/paypal_failure.php');
// Specify the url where paypal will send the IPN
$myPaypal->addField('notify_url', 'http://YOUR_HOST/payment/paypal_ipn.php');
// Specify the product information
$myPaypal->addField('item_name', 'T-Shirt');
$myPaypal->addField('amount', '9.99');
$myPaypal->addField('item_number', '001');
// Specify any custom value
$myPaypal->addField('custom', 'muri-khao');
// Enable test mode if needed
$myPaypal->enableTestMode();
// Let's start the train!
$myPaypal->submitPayment();

PHP Payment Library for Paypal, Authorize.net and 2Checkout (2CO)

Parsear HTML con PHP

Para obtener datos de un HTML, en vez de hacerlo con expresiones regulares, hacerlo mediante DOMDocument:

$oldSetting = libxml_use_internal_errors( true );
libxml_clear_errors();
$html = new DOMDocument();
$html->loadHtmlFile( $url );
$xpath = new DOMXPath( $html );
$links = $xpath->query( '//a' );
foreach ( $links as $link ) {
echo $link->getAttribute( 'href' ), "\n";
}
libxml_clear_errors();
libxml_use_internal_errors( $oldSetting ); 

Se utiliza libxml_use_internal_errors para evitar HTML mal formados

Me pregunto si para obtener tan solo un dato del HTML (title por ejemplo) es mejor el DOM o las expresiones regulares.

Extracting data from HTML