martes, 24 de julio de 2012

Tips de performance en Php

Actualiza tu versión de Php


Los equipos de desarrolladores de php mejoran las versiones de php continuamente, mantené actualizada la versión de php de tu servidor. (también es recomendable por cuestiones de seguridad)



Usa sistemas de cache


Usa algún módulo de cache, tal como Memcache, o un sistema de templates que soporte cache, como Smarty,  para mejorar la performance de su sitio web respecto de consultas a la base de datos y el rendereo de sus páginas.

No copies variables por ninguna razón

Los programadores novatos intentan hacer su código fácil de leer, claro, y en ese afán crean variables innecesarias.

$description = strip_tags($_POST['description']);
echo $description;

No hay ninguna razón para hacer eso.

echo strip_tags($_POST['description']);
 Copiar variables resulta en un doble consumo de memoria, y vuelven más lentos a los scripts.

Evita hacer querys Sql en loops

Es conveniente hacer una sola query al final de un loop, siempre que se pueda, que hacer una query por cada ciclo del loop.

NO:
foreach ($userList as $user) {
  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
  mysql_query($query);
  }

SI:
$userData = array();
foreach ($userList as $user) {
    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
 }
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);


jueves, 19 de julio de 2012

Thumbnail de una imagen al vuelo

Este pequeño código permite crear un thumbnail de una imagen al vuelo, sin guardarla.

Recibe una imagen por get y crea el thumbnail



/**
* create_thumbnail.php
*/

$url
= $_GET['url'];
$url = str_replace("http:/","http://",$url);
$allowed = array('jpg','gif','png');
$pos = strrpos($_GET['url'], ".");
$str = substr($_GET['url'],($pos + 1));
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// Getting binary data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
// output to browser
$im = @imagecreatefromstring($image);
$tw = @imagesx($im);
if(!$tw){
    // Font directory + font name
    $font = '../../fonts/Austrise.ttf';
    // Size of the font
    $fontSize = 18;
    // Height of the image
    $height = 32;
    // Width of the image
    $width = 250;
    // Text
    $str = 'Couldn\'t get image.';
    $img_handle = imagecreate ($width, $height) or die ("Cannot Create image");
    // Set the Background Color RGB
    $backColor = imagecolorallocate($img_handle, 255, 255, 255);
    // Set the Text Color RGB
    $txtColor = imagecolorallocate($img_handle, 20, 92, 137); 
    $textbox = imagettfbbox($fontSize, 0, $font, $str) or die('Error in imagettfbbox function');
    $x = ($width - $textbox[4])/2;
    $y = ($height - $textbox[5])/2;
    imagettftext($img_handle, $fontSize, 0, $x, $y, $txtColor, $font , $str) or die('Error in imagettftext function');
    header('Content-Type: image/jpeg');
    imagejpeg($img_handle,NULL,100);
    imagedestroy($img_handle); 
}else{
    if($str == 'jpg' || $str == 'jpeg')
        header("Content-type: image/jpeg");
    if($str == 'gif')
        header("Content-type: image/gif");
    if($str == 'png')
        header("Content-type: image/png");
    $th = imagesy($im);
    $thumbWidth = 200;
    if($tw <= $thumbWidth){
        $thumbWidth = $tw;
    }
    $thumbHeight = $th * ($thumbWidth / $tw);
    $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
    if($str == 'gif'){
        $colorTransparent = imagecolortransparent($im);
        imagefill($thumbImg, 0, 0, $colorTransparent);
        imagecolortransparent($thumbImg, $colorTransparent);
    }
    if($str == 'png'){
        imagealphablending($thumbImg, false);
        imagesavealpha($thumbImg,true);
        $transparent = imagecolorallocatealpha($thumbImg, 255, 255, 255, 127);
        imagefilledrectangle($thumbImg, 0, 0, $thumbWidth, $thumbHeight, $transparent);
    }
    imagecopyresampled($thumbImg, $im, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $tw, $th);
    if($str == 'jpg' || $str == 'jpeg'){
        imagejpeg($thumbImg, NULL, 100);
    }
    if($str == 'gif'){
        imagegif($thumbImg);
    }
    if($str == 'png'){
        imagealphablending($thumbImg,TRUE);
        imagepng($thumbImg, NULL, 9, PNG_ALL_FILTERS);
    }
    imagedestroy($thumbImg);
}

Php de la forma correcta (Php The Right Way)

Introducción

Hay una gran cantidad de información no actualizada en la Web que lleva los nuevos usuarios de PHP por mal camino, la propagación de las malas prácticas y el código malo. Esto tiene que parar. PHP: La manera correcta es una herramienta fácil de leer, de referencia rápida para las mejores prácticas aceptadas de PHP, los estándares de codificación, y enlaces a tutoriales de autoridad en todo la Web.

El sitio PHP The Rigth Way brinda el punto de partida para escribir código php en la forma correcta. 

Una gran herramienta.