Archive

Archive for the ‘PHP’ Category

Mostrar errores en PHP usando Nginx

Ya os expliqué aquí como usar Nginx + PHP, sin embargo hoy me he topado con un error muy tonto, y es que PHP no muestra los errores.

Para solucionarlo basta con cambiar el php.ini, pero ojo, el de fpm


sudo  nano /etc/php5/fpm/php.ini

Ahora buscamos display_errors y lo ponemos en on.

Finalmente reiniciamos fpm


sudo service php5-fpm restart

Categorías:Linux, PHP Etiquetas: , , ,

Nginx y PHPMyAdmin en Raspberry Pi

Php My Admin

PHPMyAdmin es una de las herramientas más usadas para gestionar bases de datos gracias a su interfaz web. Sin embargo, requiere que se instale un servidor y php, normalmente, Apache.

Desgraciadamente, nuestra pequeña Raspberry Pi no va muy sobrada de recursos para mover el veterano servidor HTTP. Por ello, usaremos NGinx, un servidor mucho más ligero que últimamente está cogiendo especial relevancia. Leer más…

Categorías:PHP, Raspberry Pi

Moodle sumamente lento en WAMP

17 septiembre, 2013 Deja un comentario

Wamp

En el trabajo he tenido que instalar un Moodle sobre un servidor WAMP, y además de varios problemas al instalarlo, me he encontrado con unos tiempos de carga incomprensibles (hasta 150 segundos…) con un solo usuario.

Tras una búsqueda, me he encontrado con esta solución en StackOverflow que os traduzco aquí.

Tendréis que buscar las distintas opciones, descomentarlas si están comentadas y colocar el valor que os muestro;

Lo primero será modificar el http.conf :

EnableMMAP on
EnableSendfile on

El siguiente paso será editar el php.ini para aumentar la caché del realpath

realpath_cache_size= 4m

Finalmente cambiaremos el my.ini para mejorar el rendimiento de MySQL.

innodb_flush_log_at_trx_commit = 2

Si os soy sincero, desconozco que hace cada una de las opciones, pero el aumento de rendimiento ha sido considerable.

Categorías:PHP, Web Etiquetas: , , ,

Joomla y Nusoap, peleándose por el $HTTP_RAW_POST_DATA

Joomla_Symbol_Color

Desconozco el motivo, pero Joomla borra el contenido de la variable $HTTP_RAW_POST_DATA, la cual necesita Nusoap.

Aunque he tardado bastante en saber por qué no me funcionaban los WebServices cuando hacía la integración con el CMS (he creado un componente donde realizo las operaciones del Nusoap), la solución es bastante simple:  cambiar $HTTP_RAW_POST_DATA por php://input

Basta con remplazar la linea


$nusoap->service($HTTP_RAW_POST_DATA);

por


$nusoap->service(file_get_contents("php://input"));

Y a funcionar.

Reutilizando objetos para ahorrar tiempo y memoria en Java

25 septiembre, 2011 3 comentarios

Aunque lo comento a raíz de una optimización que estoy realizando en una aplicación Android, es aplicable a Java y cualquier otro lenguaje.

Por lo general, estamos acostumbrados a crear objetos cada vez que lo necesitemos y a destruirlos una vez que ya no nos hagan falta, sin embargo, esto no es muy adecuado cuando vamos  a crear muchísimos objetos y a destruirlos tras un breve uso, pues el sistema tendrá que buscar un hueco de memoria, reservarlo, usarlo y borrarlo en cada ocasión.

Para solventarlo, lo mejor es reciclar objetos, lo cual se hace de una forma MUY sencilla.

Supongamos que tenemos un objeto Bala de un juego de disparos, del cual sabemos que crearemos miles y miles a lo largo de una partida. Podría ser algo así:


public class Bala {

    private int x;

    private int y;

    private float direccion;

    public Bala(int x, int y, float direccion) {

        this.x = x;

        this.y = y;

        this.direccion = direccion;

    }

}

Evidentemente necesitaría unos cuantos métodos más como el avanzar y tal, pero eso no nos concierne ahora, lo que nos preocupa es como poder volver a utilizar este objeto una vez no nos haga falta, como en nuestro caso, una vez choque contra el enemigo o salga de la pantalla.

El sistema es simple, una vez un objeto no lo necesitemos más, en vez de borrarlo, lo reciclamos y lo guardamos para cuando necesitemos uno nuevo.

Después, cuando necesitemos un objeto de este tipo, en vez de crearlo, miraremos si tenemos alguno guardado y si es así lo devolvemos, si no, creamos uno.

La clase finalmente podría quedar así:


public class Bala {

    private int x;

    private int y;

    private float direccion;

    private static LinkedList<Bala> balas = new LinkedList<Bala>();

    public Bala(int x, int y, float direccion) {

        this.x = x;

        this.y = y;

        this.direccion = direccion;

    }

         //Método estático que usaremos para obtener nuevas balas
         public static Bala getBala(int x, int y, float direccion) {

              //Si no tenemos elementos reciclados, creamos uno nuevo

           if (balas.isEmpty())

                 return new  Bala(x, y, direccion);

            //Si hay elementos, sacamos uno de la lista. Le ponemos los valores y lo devolvemos

            Bala bala = balas.removeFirst();
            bala.x = x;
            bala.y = y;
            bala.direccion = direccion;
            return bala;
     }

      //Una vez añadimos uno a reciclar NO debemos volver a usarlo, pues podríamos estar
      //usándolo en dos sitios distintos a la vez...
      public void reciclar() {
          balas.add(this);
      }
      //Cuando sepamos que no vamos a necesitar más ningún elemento, podemos borrar la lista
      //para no seguir almacenándolos en memoria.
      public static void borrarRecicladas() {
           balas.clear();
       }

}

Como podéis ver, la idea es muy simple y muy útil. Dependiendo de vuestras necesidades podéis modificarlo, como no guardar más de un máximo de elementos o borrarlos todos cada cierto tiempo.
En fin, espero que os sea de utilidad.

Como evitar la obtención de una clave mediante diccionario MD5/SHA1

11 septiembre, 2011 Deja un comentario

Aunque no es un sistema infalible, si ayuda bastante cifrar las claves en md5 o sha1 antes de guardarlas en las bases de datos, pues hará que si alguien accede la misma no pueda saber cuales son las contraseñas originales. Leer más…

Categorías:PHP, Programación, Web Etiquetas: , ,

Sphinx, buscador para tu web

Cuando una web comienza a tener gran cantidad de contenido, una de las herramientas más importantes para esta es un buscador.

Si bien inicialmente puede parecer fácil realizar búsquedas en la base de datos, una vez comienzas a implementarlo te das cuenta de que hay cosas que no ha tenido en cuenta.

Comenzaremos haciendo un buscador para una sección de artículos.  Quizás lo más intuitivo sea hacer una consulta SQL tal que así:

SELECT * FROM articulos WHERE titulo = ‘%$criterio%’ OR texto = ‘%$criterio%’

Leer más…

Categorías:PHP, Programación Etiquetas: , , , ,