Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

03 junio 2008

Oferta de trabajo

Análisis patrocinado por Zync.es

Hace no demasiado tiempo os hablé de una agencia de viajes on-line que tenía una amplia gama de hoteles llamado Destinia. Hoy no os voy a hablar de esas ofertas, pero sí de la compañía en si.

Parece que les están yendo bien las cosas y necesitan un nuevo programador para sus oficinas en Madrid. Si eres programador, conoces PHP, vives (o no te importaría vivir) en Madrid y estás buscando trabajo te cuento lo que están buscando por si te interesa. Recuerda que si entras gracias a mi me lo podías decir (al menos para sentir que te he echado una mano).

Necesitarás ser Ingeniero Técnico, tener una experiencia demostrable de 2 años usando PHP y MySQL en algún proyecto de envergadura en Internet y, por supuesto, ya que se trata de una empresa relacionada con agentes extranjeros, deberás tener un buen nivel de inglés. No dicen nada de otros idiomas pero estoy casi seguro que te ayudará saber alguno más.

Si además has estado relacionado/a alguna vez con páginas de turismo, vuelo o sistemas de contabilidad tendrás más puntos para entrar. También te ayudará el tener conocimientos de UML, XML, Javascript, Ajax y Linux.

Ofrecen un contrato por obra a jornada completa renovable en indefinido cerca del metro Gran Vía. Si te parece interesante y pero quieres tener más información puedes acceder aquí para informarte.

Y si no te interesaba ese puesto también buscan un/a agente de viajes. Por si te gusta más la idea.

16 noviembre 2007

Msgbox con CSS y Ajax

Si estás haciendo una web 2.0 totalmente alucinante y para mostrar un simple mensaje al visitante optas por redirigirlo a otra página que realmente no sirve para nada, o haces uso de alguna librería muy pesada para mostrar una ventanita con Javascript o, simplemente, no te gusta demasiado cómo queda lo que tienes deberías echarle un vistazo a la librería que Andrey Okonetchnikov ha creado.

Basada en los dialogos que muestra Mac OS X presenta un cuadro con un efecto desde arriba que cada realmente bien. Pesa 28,1 Kb incluyendo la hoja de estilo y la imagen para cerrar la ventana.

El uso es muy simple. Hay que incluir el archivo de script y el css.


<script type="text/javascript" src="../js/modalbox.js"></script>
<link rel="stylesheet" href="../js/modalbox.css" type="text/css"/>

Y en el lugar que queramos que aparezca podemos hacer algo tan simple como esto:

Modalbox.show('pagina_por_ajax.html');

O un poco más elaborado:

Modalbox.show('inputBox.php',
{title:'Título',width:300,height:200,
method:'post',
params:{mensaje:'Hola mundo'}});

Como se puede ver, se pueden pasar fácilmente parámetros a la página de destino que queremos que se muestre. También se puede mostrar texto estático generado en la propia página.

Pero como reza el título, lo que busco es diseñar un cuadro que permita la interacción con el usuario. Y para ello, una vez tenemos el cuadro deberemos hacer estos arreglos.

El llamar a otra página para mostrar el cuadro nos ayudará a abstraer la funcionalidad que queremos ofrecer para distintas páginas. Pero esa misma abstracción nos hará un poco más difícil su uso.

Deberemos pasarle a la página que mostrará el contenido el nombre de 2 funciones que serán las encargadas de ejecutar las acciones cuando responda afirmativa o negativamente y crear dichas funciones, por supuesto.


Así tendríamos que añadir a la llamada anterior algo como esto:

params:{...,funcSi:'funcionSi',funcNo:'funcionNo'}

La página que muestra el contenido podría ser algo tan simple como esto:

<?php
echo $_POST['mensaje'];
?>
<div id="botones">
<input type="button" value="Sí" onClick="<?= $_POST['funcSi']?>()"/>
<input type="button" value="No" onClick="<?= $_POST['funcNo']?>()"/>
</div>

Y para terminar, las funciones llamadas desde la ventana deberían utilizar esta función:

Modalbox.hide();

Para ocultar la ventana ya que no hace falta. Con esto tendríamos un funcional (aunque aún no demasiado estético) cuadro de mensaje listo para usar.

14 noviembre 2007

Función de la semana

A partir de ahora cada miércoles pondré alguna función que pueda ser útil en algún momento. Posiblemente me centre en el lenguaje PHP que es el que más uso actualmente. Pero ello no quiere decir que no ponga alguna que otra cosa de otros.

Esta semana hablaré de una instrucción muy útil cuando tenemos que buscar archivos dentro de un directorio.

Si has tenido que mostrar alguna vez las entradas de un directorio y has tenido que filtrarlas de alguna forma (para ver, por ejemplo, todos los archivos de texto, los archivos XML, las imágenes ...) posiblemente lo hayas resuelto abriendo el directorio, leyendo una a una cada entrada, comparándola con lo que buscabas y, después de hacer lo que necesitas, cerrando el directorio.

Pues has hecho mal. Existe una forma mucho más rápida de hacerlo. En PHP desde la versión 4.3 se hace uso de una función también disponible en la biblioteca estándar de C llamada glob().

En PHP su uso es, como suele suceder con todas las demás, mucho más fácil que en C. Pero qué mejor que un ejemplo:


<?php
foreach (glob("*.txt") as $nombre_archivo)
{
echo $nombre_archivo ' con tamaño ',
filesize($nombre_archivo), " bytes\n";
}
?>

Esto mostrará una salida como esta:

archivo1.txt con tamaño 44686 bytes
archivo2.txt con tamaño267625 bytes
archivo3.txt con tamaño137820 bytes

16 octubre 2007

40 formas de optimizar tu código PHP

En la página de diseño Reinholdweber.com he encontrado una lista muy interesante con 40 formas de optimizar el código PHP. Algunas de ellas me han sorprendido porque pensaba que era precisamente lo contrario.

Para aquellos que prefirais leer en la lengua de Cervantes la pongo aquí traducida.

  1. Si un método puede ser estático, decláralo estático. Puede ser hasta 4 veces más rápido.
  2. echo es más rápido que print.
  3. Usa multiples parámetros de echo en vez de concatenar cadenas.
  4. Establece el valor máximo para los bucles for antes y no en el bucle.
  5. Haz un unset a las variables para liberar memoria. Especialmente con matrices grandes.
  6. Evita las variables como __get, __set, __autoload
  7. require_once() es muy costoso
  8. Usa paths completos en los includes y los requires. Así se usará menos tiempo en resolver los paths del SO.
  9. Si necesitas saber el momento en que se empezó a ejecutar el script $_SERVER[’REQUEST_TIME’] es mejor que time().
  10. Comprueba si puedes usar strncasecmp, strpbrk y stripos en vez de regex
  11. str_replace es más rápido que preg_replace, pero strtr es aún más rápido, hasta 4 veces.
  12. Si la función a utilizar, como una función para reemplazar una cadena, acepta tanto matrices como caracteres simples y tu lista de argumentos no es demasiado grande, intenta escribir varias sentencias que reemplacen un carácter cada vez en vez de una llamada que utilice la matriz.
  13. Es mejor usar select que múltiples sentencias if, else if.
  14. La supresión de errores con @ es muy lenta.
  15. Establece la opción mod_deflate en Apache.
  16. Cierra la conexión a la base de datos cuando hayas terminado de utilizarla.
  17. $fila[’id’] es 7 veces más rápida que $fila[id].
  18. Los mensajes de error son caros.
  19. No uses funciones dentro del bucle for. Por ejemplo en esta sentencia for ($x=0; $x <> a la función count() se le llama en cada ciclo.
  20. Incrementar una variable local en un método es el método más rápido. Casi como llamar a una variable local en una función.
  21. Incrementar una variable global es 2 veces más lento que una local.
  22. Incrementar la propiedad de un objeto (ej. $this->prop++) es 3 veces más lento que hacerlo con una variable local.
  23. Incrementar una variable local indefinida es de 9 a 10 veces más lento que una ya inicializada.
  24. Declarar una variable global en una función que no la usa enlentece la función (casi lo mismo que el tiempo necesario para incrementar una variable local). Probablemente PHP comprueba que la variable global exista.
  25. La invocación de métodos parece independiente del número de métodos definidos en la clase. Después de añadir 10 métodos a una clase de prueba (antes y después del método de prueba) no cambia el desempeño.
  26. Los métodos definidos en las clases derivadas se ejecutan más rápido que aquellos en las clases base. Por lo que lo mejor es hacer las clases base lo más específicas posibles.
  27. La llamada a una función con un parámetro y sin cuerpo tarda lo mismo que 7 u 8 operaciones $variablelocal++.
  28. Rodeando una cadena con ' en vez de con " hace la interpretación un poco más rápido, ya que PHP comprueba si hay variables en las cadenas con " pero no en las de '. Por supuesto, esto solo puede hacerse cuando no utilizas variables en la cadena.
  29. Cuando muestras una cadena con echo es más rápido separarlas con comas en vez de con puntos. Nota: esto solo funciona con echo porque es una función que puede utilizar varios argumentos de cadena.
  30. Un script PHP tarda entre 2 y 10 veces más tiempo en servirse que una página estática HTML por Apache. Intenta usar más páginas estáticas y menos scripts.
  31. Los scripts PHP son recompilados cada vez que se ejecuta a menos que sea cacheado. Instalar un producto de cacheo PHP puede aumentar el rendimiento entre un 25 y un 100% eliminando el tiempo de compilación.
  32. Cachea tanto como sea posible. Usa memcached. Memcached es sistema de cacheo de objetos en memoria para acelerar las aplicaciones de web dinámicas aliviando la carga de bases de datos. Como en el anterior, permite no tener que recompilar todo el código.
  33. Cuando trabajes con cadenas y necesites comprobar la longitud de la cadena necesitarás usar strlen(). Aunque esta función es muy rápida porque lee directamente el valor almacenado en la estructura zval de la cadena (que es la estructura en C donde PHP almacena la información de la variable), sigue siendo lenta porque requiere varias operaciones como lowercase y una búsqueda en una tabla hash seguido de la ejecución de la función. Algunas veces se puede acelerar siguiendo este truco con isset().

    Ej.
    if (strlen($foo) < 5) { echo "Foo es demasiado corto"; }
    contra
    if (!isset($foo{5})) { echo "Foo es demasiado corto"; }

    Llamar a isset() parece más rápido que strlen(). La diferencia estriba en que la primera es una construcción del lenguaje y la segunda una función. Por lo que no requiere buscar ninguna función. Esto significa que así no habrá ninguna sobrecarga para buscar la longitud de la cadena.
  34. Cuando se incrementa o decrementa el valor de la variable así $i++ es más lento que $++i. Esto es específico a PHP y no es aplicable a otros lenguajes. Esto sucede porque el postincremento utiliza en PHP 4 opcodes y el preincremento solo 3. La primera actualmente necesita crear una variable temporal mientras que el otro no. Con el optimizador de PHP de Zend esto ya no es así, sin embargo, puede que el servidor que utilices no disponga de este optimizador.
  35. No todo tiene porque ser POO. Los objetos sobrecargan mucho. Cada método o llamada a un objeto consume mucha memoria.
  36. No implementes cada estructura de datos como una clase. Las matrices también son útiles.
  37. No dividas los métodos demasiado. Piensa qué código vas a reutilizar realmente. Siempre puedes dividir el código luego, cuando haga falta.
  38. Haz uso de las funciones predefinidas.
  39. Si tienes funciones que consumen mucho tiempo, considera escribirlas como extensiones en C.
  40. Usa el módulo mod_gzip. Es un módulo de Apache que comprime los datos al vuelo y puede reducir las transferencias hasta en un 80%.
También podrás encontrar un excelente artículo sobre optimizar PHP por John Lim. Que si tengo tiempo traduciré algún otro día.

30 agosto 2007

Json en PHP

Si tenéis que utilizar JSON en algún servidor que tenga la versión 5.1 de PHP y en el que no tengáis control, una de las mejores soluciones es usar el framework de Zend. Sin embargo, tener que bajar todo el framework tan solo para mandar un array a un script es un poco exagerado.
Para esos casos, os dejo el archivo retocado para poder utilizar esta útil función en PHP.

Para usarlo tan solo debéis llamar a esta función:

$json = Zend_Json_Encoder::encode ($array);