Como traducir tus aplicaciones PHP fácilmente.

Con el componente symfony/translation del framework de PHP Symfony, que ya va por su versión 4.

Como se instala

Con composer…
composer require symfony/translation
..o con git clonando su github:
git clone https://github.com/symfony/translation

Ejemplo

Index.php

langs/es_ES.php

Pero, ¿tiene que cargar el diccionario cada vez que un navegador hace una petición?

Por defecto sí, por lo que si tienes un catálogo bastante grande necesitarás utilizar su cache.
Para ello tan simple como modificar los argumentos de la instanciación del objeto Translator, fijandonos en su constructor:

La mejora en la carga dependerá del Fileloader utilizado, ya que con uno u otro le puede costar más parsear la información.

¿Y para borrar la cache?

Desde el framework de Symfony, “php bin/console cache:clear” pero si solo utilizas sus componentes, tendras que ir a la carpeta de la cache y borrarlo manualmente.

Nota, para activar la caché te hara falta el componente symfony/configcomposer require symfony/config

Y recuerda…

Si estas utilizando el framework completo de Symfony, ya viene protegido, pero si solo estás utilizando sus componentes, tienes que, por seguridad, proteger los ficheros:

Como tener dos versiones de PHP en el mismo servidor Apache

Problema: Por ejemplo, si tienes una aplicación de Symfony4 que necesita PHP7.2+, y una tienda online con Magento2 que necesita PHP 7.0 pero es incompatible con PHP7.2.

Solución: Instalas ambos PHP, y el modulo PHP7.0-fpm y PHP7.2-fpm.

Según la documentacion, FPM (FastCGI Process Manager) es una implementación alternativa al PHP FastCGI con algunas características adicionales (la mayoría) útiles para sitios web con mucho tráfico.

Si tu servidor no tiene acceso a varias versiones de PHP a través de los repositorios, te tocará instalar el repositorio más actualizado, aunque no es el oficial.

apt-get install python-software-properties
add-apt-repository ppa:ondrej/php
apt-get update

Como instalar el módulo PHP-FPM en Apache

sudo apt-get install php7.0-fpm

Cambia Apache al modo “event” y habilita FCGI

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod proxy_fcgi

Pero ten cuidado, al instalar y configurar PHP-FPM, ahora tu fichero de configuración php.ini de PHP ha cambiado:
/etc/php/7.0/apache2/php.ini => /etc/php/7.0/fpm/php.ini

¿Pero como haces para que cada sitio o carpeta se ejecute una versión de PHP u otra?

Fácil. En el VirtualHost, ya sea por directorio o por sitio web completo, agregas el siguiente código:
Include "conf-available/php7.0-fpm.conf"

Como en el ejemplo, coge php7.2 por defecto, y luego por directorio el que decidas.

Y por último, Reinicia Apache

sudo service apache2 restart

Y si tienes Vagrant…

Puedes comprobar lo arriba mencionado con esta configuración Vagrantfile. Despues de inicializar la máquina virtual tienes que conectarte a la raíz de la ip que te de para comprobar la versión de PHP, y luego prueba con “/sitephp70” para confirmarlo.

Git CheatSheet

Para principantes, he aquí un cheatsheet de Git para recordar lo principal.

Clonar un repositorio de github.
git clone https://github.com/amiguelc/todo-app.git
Crear un nuevo proyecto git
git init
Agregar todos los ficheros al seguimiento “tracked”
git add .
Para ver el estado de tu directorio Git
git status
Eliminar fichero del seguimiento (pero no del directorio de trabajo)
git rm fichero
Guardar todo los ficheros en seguimiento y agrega un comentario
git commit -a -m "first commit"
Para ver los repositorios remotos
git remote -v
Sube al servidor los datos
git push (git push origin master)
Baja del servidor los datos
git pull (o solo git pull)

Como programar un simple acortador de URLs

Antes de ponerme a descargar algún avanzado script para tener un acortador de URLs de WordPress como Simple URLS, que funcionan como un URL shortener tipo TinyUrl pero en tu propio servidor, he preferido programar uno supersencillo.
Como se puede ver en el código, tan solo hace una comprobación y redirige a su destino con un código de estado HTTP 302 Found. Ni guarda ningún dato ni nada en ninguna base de datos

Hace uso de la variable de servidor $_SERVER[‘REQUEST_URI’] que guarda la la parte de la url quitando el dominio y protocolo es decir de https://www.google.com/search?q=katarian se quedaría tán solo con la parte de “search?q=katarian”.

Para ir agregando más enlaces ya sería cuestión de ir agregando más “else if(…){ …}” o en la versión 2, agregar más enlaces al array.

 

Código acortador URL PHP, index.php -> Versión 1

Código acortador URL PHP, index.php -> Versión 2

Código en el VirtualHost de Apache

Esto es para que si tu fichero cuelga de una carpeta llamada “/to”, haga uso aquí del módulo rewrite. Lo hice así porque no quería utilizar query strings como “?link=google”. Tan solo algo así como “/to/google”, más amigable.

Prueba en http://ipweb.org/to/katarian

Nueva tienda de videojuegos online Katarian.com

El pasado noviembre de 2017 abrimos una nueva tienda de videojuegos online donde podréis comprar videojuegos de diversas plataformas como juegos de pc, comprar juegos ps4, juegox xbox one, juegos switch, juegos 3ds, figuras amiibo, juegos ps3, juegos xbox 360, juegos wii y wii u, juegos psp y ps vita.

Es un gran catalogo de más de 3.000 unidades de diferentes juegos en stock, de más de una década, por lo que aquí podréis encontrar juegos únicos que ya no se venden en ningún lugar, ediciones de coleccionista, limitadas y por supuesto las últimas novedades.

El envío tarda como máximo 2 o 3 días y cuesta tan solo 4.50€. Aun así estamos negociando continuamente para mejorar el precio. El pago sería por Paypal, con la seguridad que eso conlleva, y por transferencia bancaria.

Link tienda videojuegos: https://katarian.com

Gracias por su compra.


(Una imagen de la portada de juegos de PS4)

Magento2 lento, velocidad de carga y diversos errores

Gestiono una tienda online realizada con Magento2, y en la última semana actualicé a Magento 2.2 y tuve unos problemas de velocidad de carga bastante graves.

Me pasaba que al cabo de unas horas empezaba a tardar en cargar más de 5 segundos la página, y con el tiempo dejaba de funcionar. Miré el servidor y tenía la CPU al 100%. Era un proceso de MYSQL aproximadamente al 50%, y unos cuantos más de PHP. Por lo que lo primero que hice fue reiniciarlo, pero seguía igual. Borré caché, miré si era algún modulo. Nada. Miré logs de MYSQL, Apache, Magento2, etc.. Cambié de caché a Redis. Nada

Hasta que empecé a pensar que era Cron, porque ya no funcionaban las tareas repetitivas, por lo que me puse a investigar y bajé la frecuencia a Cron para que se ejecutara cada 3 minutos. Bajaron el numero de procesos PHP en background, y esto parecía mejorar un poco, pero no era la solución.
Entonces miré la base de datos y efectivamente, tenía en cola 65.000 tareas de Cron pendientes, por lo que al intentar ejecutarlas al tiempo no respondía el servidor.

Solución: en la base de datos de Magento “truncate cron_schedule;
Esta sentencia SQL borra la tabla de tareas pendientes de Cron y al rato se regenera de nuevo. Se crearon 265 tareas, que se ejecutaban cada minuto correctamente.

Bajón del uso del procesador en cuanto encontré la solución:

A todo esto Google mientras tanto me seguía indexando, pero como mi Web iba tan lenta, le costaba tanto que hace pensar que me penalizará unos días, aunque de momento la estadística de paginas indexadas no ha disminuido. Quizás haya entendido que es un error temporal.

Velocidad de carga de mi web según Google esos días. Antes de los errores tenía 462 ms, que es un valor normal, y luego los picos que son de 5000 ms.

Y aquí los errores de rastreo:

Otro error que conseguí solucionar fue “Your web server is set up incorrectly and allows unauthorized access to sensitive files. Please contact your hosting provider
Resulta que en la carpeta de Magento /app hay un fichero .htaccess negando el acceso al directorio con el texto: “Order deny,allow Deny from all”
Y hay un proceso en Magento que constantemente hace una petición a ese fichero para comprobar que el servidor no responde. El primer problema es que esa sintaxis es de Apache2.2, (en Apache2.4 es Require all denied), y el segundo que fue el que tuve yo, es que si utilizas PHP-FPM ignora los ficheros .htaccess.

Solución: En tu fichero de Apache *.conf, si utilizas PHP-FPM, encima de la directiva ProxyPassMatch tienes que utilizar la directiva “ProxyPass /carpeta !” para evitar accesos a ficheros sensibles.
En este caso tal que:
ProxyPass /app !
ProxyPassMatch ^/(.*\.php(/.*)?)$ ……….

Intentaré poner en esta entrada más errores que vaya encontrando, como solucionarlos y algunos trucos más de Magento2.

¡FIFA 18 ya a la venta! ¡El juego del mundo!

De la mano de Electronic Arts, llega FIFA 18, el autodenominado “El juego del mundo” sale en formato físico hoy mismo, 29 de septiembre de 2017, para las plataformas PlayStation 4, Xbox One, PC, Nintendo Switch, PlayStation 3 y Xbox 360, a un precio recomendado de entre 64€ y 70€.

La edición normal saldrá con la portada de “El bicho” Cristiano Ronaldo, y la edición coleccionista “Icon Edition” supuestamente saldrá Ronaldo Nazario

Aunque el moto gráfico utilizado es Frostbite, el mismo que el FIFA 17, este año se han centrado en mejorar la experiencia del jugador, aumentando el número de licencias (ligas, clubes, escudos, estadios, futbolistas…), con repeticiones mejoradas, atmósferas más realistas con gradas llenas con cánticos de cada club, y movimientos de jugadores basados en jugadores reales.

Continúa “El camino”, esta vez llamado “El Camino: El regreso de Álex Hunter”, con voces en castellano.

Nintendo Classic Mini Super NES ¡Ya a la venta!

¿Qué es la Nintendo Classic Mini SNES?

Se trata de una consola retro, que es una versión en miniatura de la Super Nintendo, la consola de 16 bits que la compañía japonesa lanzó en 1992 en Europa. Es de producción limitada como ya ocurrió con la NES Mini el año pasado, y la han sacado hoy mismo a la venta.

En esta nueva versión, que se puede conectarse fácilmente a cualquier TV de alta definición por HDMI, viene con dos mandos, y se incluyen 21 juegos clásicos preinstalados en su memoria interna, pero no existe la posibilidad de usar los cartuchos originales de Super Nintendo ni instalar juegos nuevos.

 

 

Estos son los 21 juegos clásicos preinstalados:

  • Contra III: The Alien Wars
  • Donkey Kong Country
  • EarthBound
  • Final Fantasy III (Final Fantasy VI)
  • F-ZERO
  • Kirby Super Star
  • Kirby’s Dream Course
  • The Legend of Zelda: A Link to the Past
  • Mega Man X
  • Secret of Mana
  • Star Fox
  • Star Fox 2
  • Street Fighter II Turbo: Hyper Fighting
  • Super Castlevania IV
  • Super Ghouls ’n Ghosts
  • Super Mario Kart
  • Super Mario RPG: Legend of the Seven Stars
  • Super Mario World
  • Super Metroid
  • Super Punch-Out!!
  • Yoshi’s Island

 

Videojuegos físicos vs videojuegos digitales

Es es la gran pregunta, ¿mejor digital o físico?Vamos a repasar las ventajas y desventajas de cada uno de ellos:

Juegos físicos:

Ventajas:

  • Es real: Y como tal, da mayor seguridad. Se puede prestar, revender, transportar, coleccionar en tu estantería, etc.. Además a la hora de comprarlo podrás hacerlo en una tienda común.
  • Reventa: Siempre se puede revender, a un precio ligeramente inferior. En el formato digital, en teoría no se puede.
  • Segunda mano: Se pueden comprar de segunda mano más barato.
  • Insertar disco y jugar: Esto da mayor comodidad, sobretodo si tienes conexión a internet o es muy lenta.
  • Coleccionismo: Tienen ediciones especiales o de coleccionista.

Desventajas:

  • Lector: El juego físico se puede estropear o rallar, esto también es una desventaja del formato digital ya que puedes perder la cuenta asociada, por eso la diferencia en este sentido es el lector necesario en el formato físico y que puede fallar con el tiempo.
  • Espacio: Ocupan espacio en tu habitación.

Juegos digitales:

Ventajas:

  • Catálogo: Hay juegos que no llegan a salir en soporte físico, sobretodo indies.
  • Ahorro de espacio: Si tienes muchos juegos, no ocuparan ningún espacio en tu cuarto.

Desventajas:

  • Precio igual: Tienen el mismo precio, por lo que mucha gente opta por tenerlos en formato físico.
  • No hay reventa: Ni se puede comprar de segunda mano, ni se puede vender, ni prestar, ni nada.
  • Tiempo limitado: Si la consola queda descatalogada y no se permiten descargas nuevas, sus juegos permanecerán mientras sigan instalados, mientras que en el formato físico permanecerán mientras exista el disco.

 

Con estas ventajas y desventajas, nos da a pensar que ambos formatos convivirán por mucho tiempo.