por Rafael Vega Castro | May 10, 2011 | PHP, Trabajo
Tuvimos un problema al tratar de centralizar una aplicación web que corría en varios dominios, lo que sucedía era que las KEYs del memcache eran exactamente iguales en todos los dominios pero los datos que debían contener esas KEYs eran diferente, obviamente porque eran sitios diferentes solo que con el mismo código fuente.
La solución que se nos ocurrió para evitar tener varias instancias de memcache ejecutadas en el servidor gastando memoria fue la de agregar un Prefijo parametrizado según el dominio en el que se crea la KEY.
Este es un ejemplo del código actual que tenemos
define("PREFIJO","app1"); //este es el parametro que se configura según cada dominio
$memcache= new Memcache();
$memcache->connect("localhost",111112);
$key=PREFIJO."nombre_llave";
$memcache->set($key,$datos,false,60*60);
Luego para leer sería:
$key=PREFIJO."nombre_llave";
$memcache->get($key);
Espero que les sirva como nos sirvió a nosotros 🙂
por Rafael Vega Castro | Abr 23, 2011 | PHP, Trabajo
Hace días alguien del equipo de desarrollo de evoluZiona Sas necesitaba obtener la primera página de un PDF pero en formato JPG con PHP, obviamente de forma dinámica porque era para resolver un problema que nos asechaba desde hace ya algún tiempo.
La solución para el problema la dimos con imagemagick, específicamente con el comando convert, lo que hicimos fue instalar esta herramienta en el servidor y luego usarla con PHP mediante la función exec, aquí el código:
$archivo="archivo_pdf_de_donde_sacaremos_el_jpg.pdf";
$img_path="/tmp"; //ruta temporal para guardar el jpg
$file_name=time();
$dir="/usr/bin/convert";
$comando="$dir {$archivo}[0] $img_path/$file_name.jpg";
exec($comando,$out);
$image=imagecreatefromjpeg("$img_path/$file_name.jpg");
header('Content-Type: image/jpeg');
imagejpeg($image);
unlink("$img_path/$file_name.jpg");
El comando convert recibe los siguiente parametros:
- ruta del archivo PDF. Entre corchetes se coloca el rango de paginas a convertir en JPG, puede ser una página en especifico o un rango determinado, [0] , [0-100]. Tengan en cuenta que en linux se empieza a numerar desde cero, lo que quiere decir que la primera página vendría siendo la página 0
- Ruta destino donde se guardará el JPG
por Rafael Vega Castro | Abr 12, 2011 | PHP, Trabajo
Hace tiempo escribí un artículo sobre como hacer que el código javascript se cargue de forma más rápida, y también el uso de memcache para optimizar la petición de consultas a la base de datos y hoy quiero empezar la primera parte de dos o quizás tres secciones de un artículo con consejos para optimizar tu aplicación web hecha en PHP.
Cuando me refiero a optimizar significa a que nuestras aplicaciones básicamente sean más rápidas ya sean usando menos memoria o menos procesos, lo primero que quiero es desmentir el mito que dice «una aplicación es optima que otra si usa menos líneas de código», eso es falso… quizás en algunas ocasiones aplique pero no siempre es así.
Ahora, como decía antes, hay varios aspectos a optimizar en una aplicación, trataré de dar consejos para los siguientes 3 aspectos optimizables dentro de cualquier programa o fragmento de código:
- Cantidad de líneas de código
- Consumo de memoria
- La velocidad en que se ejecuta (uso de procesador)
A mi criterio, los dos últimos puntos son los más importantes, estos dos determinan si un algoritmo es optimo o no, pero la cantidad de líneas de código no determina que tan optimo es un algoritmo. Ahora, si ayuda a la optimización porque cada línea de código significa una instrucción o instrucciones más para el procesador.
Mis consejos son:
- Tratar de no usar variables globales a menos que sea necesario. PHP siempre tiene que comprobar que existen.
- Es mejor no introducir código html dentro de PHP.Es más rápido usar
Texto aquí
que usar
echo "Texto aquí"
- No declares variables que no usarás, estoy utilizaría memoria innecesaria
- La función require_once es lenta, así que en lo posible no la uses
- Siempre que puedas declarar un método o variable como estática, hazlo!
- Si vas a escribir en disco duro, trata de no hacerlo fragmento por fragmento sino todo de un solo golpe, quizás sacrifiques un poco de memoria RAM pero ganas rendimiento en velocidad, esto debido a que es más rápido acceder a memoria RAM que al disco duro… es necesario analizar bien el caso para saber como aplicarlo.
- Los ciclos o bucles consumen gran cantidad de procesamiento en la CPU, así que si puedes aplicar un poco de matemáticas discretas seguramente el procesador te lo agradecerá.
- Hay que calcular el tamaño de un arreglo antes de un ciclo, sino cada vez que se ejecuta el ciclo se tendrá que calcular el tamaño del arregloMal:
for($i=1;$i<=sizeof($arreglo);$i++)
Bien:
$tamano=sizeof($arreglo);
for($i=1;$i<=$tamano;$i++)
- Esconder los errores con @ es muy lento
- Utiliza pocos accesos a la base de datos
- Cuando hagas una consulta a la base de datos, no traigas campos innecesarios. No utilices «SELECT * FROM tabla» si no lo necesitas, utiliza «SELECT campo, campo FROM tabla».
- La programación orientada a objetos es muy útil cuando nuestro programa es grande y nos permite reutilizar código, por tanto tener menos líneas de código fuente
Bueno, estos son apenas unos cuantos consejos que doy de mi experiencia, quizás aún tu aplicación no sea optima pero seguro que estos consejos ayudarán a que el rendimiento mejore mucho.
Pronto escribiré otra tanda de consejos para que tu aplicación en php sea mas optima.
por Rafael Vega Castro | Mar 13, 2011 | PHP, SEO, Trabajo
Este es un error muy común que se comete, y es las personas ponen en el title de la web el dominio de la misma.
No hacer esto: «miweb.com – Lo mejor del entretenimiento en internet»
Lo mejor es hacer esto: «Lo mejor del entretenimiento de internet | miweb»
El poner el dominio de tu web de primero en el title causa irrelevancia que no te ayuda mucho a la hora de querer posicionar tu web.
por Rafael Vega Castro | Mar 12, 2011 | PHP, SEO, Trabajo
No se si habrán notado que al entrar a webs como
http://bubok.es
http://facebook.com
http://google.com
http://linkedin.com
Automaticamente, siempre se agrega el prefijo www. a la web.
Pues la razón es que es un punto a favor para lograr un buen posicionamiento de tu web, porque al final si no aplicas esta técnica para los buscadores www.bubok.es y bubok.es son dos dominios (webs) diferentes, en cambios si obligamos a que bubok.es vaya a www.bubok.es siempre lo tomará como un solo dominio y tendremos un mejor posicionamiento.
Si tienen un servidor apache o similiar, podemos lograr esto mediante el archivo .htaccess en tu servidor y el siguiente fragmento de código:
RewriteCond %{HTTP_HOST} ^[a-zA-Z]+\.info
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
El anterior fragmento hace que al entrar en mi dominio https://rafaelvega.com redireccione se 301 a https://www.rafaelvega.com
por Rafael Vega Castro | Oct 1, 2010 | De todo un poco, PHP, Tecnología, Trabajo
Desde hace un tiempo atrás del cual no tengo idea cuanto fue, twitter cambió su API para conectarse a sus servicios, esto causó que todo mundo tuviera que actualizar sus códigos OBLIGATORIAMENTE para poder seguir haciendo lo que venían haciendo antes.
Despues de varios intentos fallidos encontré una forma de hacer la autenticación, fue un aporte de Tijs Verkoyen.
Lo unico que no hace Tijs es decir como utilizar su clase… aquí trataré de poner de la forma más fácil como twittear con la clase de Tijs, el resto de funciones las puede mirar en su web.
1. Bajar el archivo .php de la clase, aquí.
2. Crear una aplicación de twitter, rellenando todos los datos en: http://dev.twitter.com/apps/new
3. Entramos a http://dev.twitter.com/apps e ingresamos a la aplicación que hemos creado, de aquí debemos tomar los valores de «Consumer key» y el «Consumer secret».
4. Luego de copiar/anotar los valores, vamos al menú derecho y entramos a «My Access Token», de aquí copiaremos los valores de «Access Token» y «Access Token Secret»
Ya tenemos casi listo todo 🙂 , ahora viene el código.
$twi_user = new Twitter("Consumer key","Consumer secret");
$twi_user->setOAuthToken("Access Token");
$twi_user->setOAuthTokenSecret("Access Token Secret");
$twi_user->statusesUpdate("Este es mi primer mensaje en twitter con el nuevo método de autenticación");
Eso es todo, más fácil de lo que parece
Últimos comentarios