Entradas

Mostrando las entradas etiquetadas como php

Migrando zend expressive a mezzio

Imagen
Hace ya un tiempo se gestaron cambios en Zend, ahora es Láminas y el soporte a Zend Framework tal y lo conocíamos ha caducado, ahora el Framework es Mezzio. Esta es la equivalencia de los nuevos paquetes, la mayoría de cambios son solo de namespaces: zendframework/zend-auradi-config => laminas/laminas-auradi-config zendframework/zend-cache => laminas/laminas-cache zendframework/zend-code => laminas/laminas-code zendframework/zend-component-installer => laminas/laminas-component-installer zendframework/zend-config-aggregator => laminas/laminas-config-aggregator zendframework/zend-db => laminas/laminas-db zendframework/zend-debug is abandoned, you should avoid using it. No replacement was suggested. zendframework/zend-diactoros => laminas/laminas-diactoros zendframework/zend-escaper => laminas/laminas-escaper zendframework/zend-eventmanager => laminas/laminas-eventmanager zendframework/zend-expressive => mezzio/mezzio zendframework/zend...

CentOS 8 ahora viene con DNF

Uno de los cambios más radicales en CentOS 8 ha sido la sustitución del gestor de paquetes YUM por DNF, en la mayoría de los sitios comentan que la transición es casi trivial, pero esto no es del todo cierto, en este post veremos algunas consideraciones sobre este cambio. Primero veamos las 3 razones que se esgrimen para haber levado a cabo este cambio: La documentación de yum es casi inexistente para ampliar su funcionalidad YUM no soporta Python 3 El gestor de dependencias utilizado por DNF es más estándar, ya vine siendo utilizado por SUSE hace mucho tiempo dentro de zypper. Ahora bien, pese a que la sintaxis es básicamente la misma el manejo de repositorios no lo es tanto, se van a poder agregar como se hacía con YUM, incluso dejando en el mismo directorio los archivos .repo pero algunas cosas cambian, en mi caso pondré las diferencias para trabajar con algunas librerías de PHP. Por ejemplo, en vez de habilitar diferentes repos para una u otra versión ahora se habilita un...

Ciclos de lanzamiento en PHP, curiosidades

Imagen
A raíz de la cada vez más cercana versión 8 de PHP y sus esperadas mejoras han surgido algunos bulos sobre su fecha de lanzamiento, hasta ser confirmada finalmente el 10 de febrero con el siguiente tweet:  En este tweet se habla de los ciclos de lanzamiento de PHP, puede parecer algo trivial o sin importancia, pero desde la versión 7, no sólo ha mejorado el lenguaje, sino la forma de trabajar del equipo de desarrollo. Si tomamos por ejemplo los 414 lanzamientos que se han publicado desde junio de 2003, de ellos 27 alfas, 30 betas y 52 candidatas, podemos ver una mayor organización y previsible agenda en los mismos. Por citar un ejemplo, mientras en php 5 no siempre se publicaban alfas, betas o RC, en php 7 si, y además periódicamente, las versiones 0,1,2,3 y 4 de php 7 comparten los mismo tiempos, desde el lanzamiento de la primera beta hasta el lanzamiento de la primera versión candidata pasan exactamente 42 días, y también para la mayoría de transiciones de alfa a b...

Instalar libreria PHP image magick en MacOS Catalina

Imagen
Primero necesitamos instalar los pre requisitos, en caso que no los tengamos brew install imagemagick Luego ejecutamos la instalación con PECL y le damos INTRO a cada pregunta para aceptar los valores por defecto pecl install imagick Please provide the prefix of ImageMagick installation [autodetect] : Ignorar los siguientes errores cp: /private/tmp/pear/temp/imagick/build/php.m4: Permission denied cp: /private/tmp/pear/temp/imagick/build/shtool: Permission denied cp: /private/tmp/pear/temp/imagick/build/libtool.m4: Permission denied cp: /private/tmp/pear/temp/imagick/build/ax_check_compile_flag.m4: Permission denied cp: /private/tmp/pear/temp/imagick/build/ax_gcc_func_attribute.m4: Permission denied cp: /private/tmp/pear/temp/imagick/build/php_cxx_compile_stdcxx.m4: Permission denied cp: /private/tmp/pear/temp/imagick/build/pkg.m4: Permission denied cp: /private/tmp/pear/temp/imagick/build/config.guess: Permission denied cp: /private/tmp/pear/temp/imagick/build/config...

Instalar librería memcached para PHP en MacOS Catalina

Imagen
Primero necesitamos instalar los pre requisitos, en caso que no los tengamos brew install zlib brew install pkg-config brew install libmemcached Luego ejecutamos la instalación con PECL y le damos INTRO a cada pregunta para aceptar los valores por defecto pecl install memcached libmemcached directory [no] : zlib directory [no] : use system fastlz [no] : enable igbinary serializer [no] : enable msgpack serializer [no] : enable json serializer [no] : enable server protocol [no] : enable sasl [yes] : enable sessions [yes] : Ignorar el siguiente error Warning: Use of undefined constant name - assumed 'name' (this will throw an Error in a future version of PHP) in Builder.php on line 407

Instalar PHP 7.4+ en MacOS Catalina 10.15+

Imagen
  Ahora instalar PHP es muchísimo más sencillo en Mac, con un solo comando podemos hacerlo tal y como se hace en CentOS. brew install php php -v PHP 7.4.2 (cli) (built: Jan 22 2020 06:30:58) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.2, Copyright (c), by Zend Technologies Si la versión de PHP no es la última, es posible que hayas instalado una versión previa utilizando el script de liip , si es tu caso te recomiendo desinstalarlo, el problema es si liip te lo ha instalado en /usr/bin/php en vez de /usr/local/bin/php , que seguramente es tu caso porque brew lo instala en esta última ubicación. Desisntalar PHP instalado con liip sudo rm -rf /usr/local/php* Luego necesitas deshabilitar System Integrity Protection , para ello tienes que reiniciar en modo recuperación (Command + R) y sin elegir ninguna opción del menú, ir al Terminal y ejecutar csrutil disable , para más info puedes consultar este ot...

Actualizar a PHP 7.3+ en MacOS Mojave 10.14+

Imagen
Mac suele venir con alguna versión de PHP, pero al igual que CentOs estas versiones nunca son las últimas. Buscando por internet hay muchísimos manuales que te permiten actualizar a la última versión de PHP en MacOS, pero todo son para apache, si necesitas ejecutar PHP en el terminal siempre vas a tener la versión por defecto. Por suerte este se puede modificar muy fácilmente. Para instalarlo he seguido los pasos de este manual , que, aunque en la página oficial diga que el soporte es hasta la versión 10.13 de OSX para la 10.14 también funciona. Luego necesitamos editar nuestro terminal para que la versión sea la correcta, esto lo haremos de manera sencilla así: nano ~/.bash_profile Agregamos la siguiente línea export PATH="/usr/local/php5/bin:$PATH" CTRL+O CTRL+X source ~/.bash_profile

Personalizar las tablas users y password_resets en Laravel 5.6

Imagen
La autenticación en Laravel es un proceso muy sencillo, pero de tan sencillo personalizarlo tiene sus detalles, en este post veremos como personalizar, en parte, las tablas de usuarios y reinicio de contraseñas. Según lo estricto que seas con la estructura de tu base de datos y el formato que hayas elegido seguir puede que los valores de los campos y las tablas por defecto de Laravel no sean de tu agrado, como es mi caso, por ejemplo: Laravel prefiere minúsculas y plurales para los nombres de las tablas, yo utilizo UpperCamelCase y singular. Para los nombres de los campos Laravel utiliza guión bajo (underscore) y minúsculas, yo prefiero lowerCamelCase, con lo cual, necesito renombrar los siguientes campos de estas tablas: remember_token - rememberToken  created_at - createdAt updated_at  - updatedAt id - userId Y renombrar las tablas: users - User password_resets - PasswordReset Si utilizas las migraciones de Laravel tienes que cambiar los nombres de las...

PHP en Google compute engine + cloud sql

Imagen
Hoy en día los servicios en la nube son una clara alternativa a la hora de alojar un sitio web, ya no es necesario un servidor dedicado con las prestaciones y herramientas que ofrecen Google, Amazon o Azure. En el caso de Google existen alternativas más sencillas para alojar un sitio web que las de utilizar compute engine (una maquina virtual), me refiero a app engine, pero a mi parecer se pierde mucho control sobre las prestaciones que queramos tener. En este post pienso hablar de como instalar nginx con soporte para http2 y php 7.2 en una maquina virtual con CentOS 7, además de enseñar a configurarlo para utilizar una base de datos MySQL 5.7 almacenada en el servicio cloud SQL de Google. A la hora de sar de alta estos servicios es muy recomendable que esten en la misma zona geográfica, tanto la maquina virtual como la instancia de MySQL. Una vez creada nuestra instancia de maquina virtual instalaremos nginx y comprobaremos su configuración con: nginx -V nginx -t A...

Compilando PHP FPM en CentOS 7

Realmente ya no es necesario en la mayoría de los casos compilar tu propia versión de PHP pero en ciertos momentos puede ser necesario, por ejemplo, a la hora de compilar una librería que no esté plenamente difundida o por temas de rendimiento porque al crear una versión compilada puedes incluir en el núcleo de php las extensiones que utilizas. Este procedimiento lo hice en septiembre del año pasado, cuando aún no estaba tan extendido en linux la instalación de la librería de Microsoft para SQL Server, por eso la incluyo en este manual. ¿Qué necesitamos instalar primero? yum groupinstall "Development Tools" (yum install kernel-devel) yum install wget \ autoconf \ libxml2-devel \ krb5-devel \ libicu-devel \ gcc-c++ \ bzip2-devel \ curl-devel \ libpng-devel \ libc-client-devel \ openssl-devel \ libmcrypt-devel.x86_64 \ net-snmp \ net-snmp-devel \ git En caso de errores podéis consultar esta guía...

Composer: allow_url_fopen, disable_functions, open_basedir

Imagen
En cualquier manual básico de seguridad en PHP se indica que las instrucciones  allow_url_fopen , disable_functions y open_basedir deben ser modificadas para impedir posibles brechas. El problema es que composer utiliza estas directivas de php.ini. Los posibles errores que nos pueden dar son los siguientes Phar::mapPhar(): open_basedir restriction in effect. File(/composer) is not within the allowed path(s) require(phar://composer.phar/bin/composer): failed to open stream: phar error: invalid url or non-existent phar "phar://composer.phar/bin/composer" is_dir(): open_basedir restriction in effect. File(/.composer) is not within the allowed path(s) Update failed (The Process class relies on proc_open, which is not available on your PHP installation.) [Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which is not available on your PHP installation. La forma menos segura para tratar estos errores es poner en peligro nu...

Presupuestos participativos Madrid

Imagen
El pasado 25 de marzo el Ayuntamiento de Madrid cerró el plazo para apoyar las propuestas de la ciudadanía destinadas a los presupuestos de 2018, 100 millones de euros para que los madrileños inviertan en su ciudad. La pregunta que os haréis es ¿esto que pinta en un blog geek? Mucho, porque gracias a PHP, SQL Server, Power BI y Excel podemos dar respuesta a algunas preguntas que no quedan del todo claras, o son inexistentes, en la web del ayuntamiento .  Preguntas como ¿número de propuestas por distrito? ¿presupuesto por distrito? ¿qué han apoyado los madrileños? Todas ellas tienen respuesta en este post. ¿Cómo he llegado a estas cifras? Primero era necesario importar en una base de datos los detalles de cada propuesta: título, apoyos, distrito y etiquetas. Estas últimas, las etiquetas, al ser creadas por los usuarios era necesario normalizarlas, de manera que de 341, eliminando duplicadas, faltas de ortografía, combinadas y agrupando, he dejado solo 169. De esta form...

El mejor IDE para PHP

Imagen
Voy a comenzar diciendo que no existe un IDE perfecto, los hay mejores y peores, ninguno perfecto. El mejor IDE es el que mejor se adapte a tu proyecto, a veces es necesario utilizar uno para un proyecto antiguo que vamos a refactorizar y otro para un proyecto que comenzamos de cero. En este blog voy a hablar de las características que creo que deberíamos de considerar a la hora de elegir nuestro entorno de desarrollo integrado (IDE), siempre enfocados a PHP. Consumo de recursos Raro es un entorno que consuma demasiada CPU pero en cuanto a RAM son bastante golosos, sobre todo los basados en Java, en la siguiente tabla veréis el consumo medio de RAM para alguno de estos IDEs. IDE RAM Zend Studio 13.5.1 905 MB NetBeans 8.2 830 MB PHP Tools Visual Studio 2017 320 MB Visual Studio Code 1.11 30 MB Servicios Un buen entorno no solo debe presentar las herramientas necesarias para refactorizar, comprobar y rastrear errores, intellisense, sino permitir la inte...

Slim 3 en Apache como proxy de Nginx

Imagen
Supongo que si has llegado a este post es que conoces Slim , pero para los que no, voy a hacer una pequeña introducción. Slim es un micro framework PHP que te ayuda a escribir con rapidez aplicaciones web simples pero potentes y APIs. Aunque esa es su definición, Slim es realmente útil a la hora de crear servicios web. Ya va por la versión número 3 y aunque no tiene ni página en la Wikipedia, es bastante recomendable. Bien, yendo al grano. Si bien en su página web de documentación vienen detalladas las configuraciones para nginx, apache y otros servidores , lo que no viene es la configuración si tenemos un Nginx como front que utiliza Apache como proxy para las peticiones de PHP. Para este caso concreto lo que debemos hacer es configurar Nginx para que envíe la petición tal y como la recibe a Apache y que apache se encargue de procesarla. Imaginemos que el servicio web se encuentra en una subcarpeta de nuestra aplicación, /api, de manera que accedemos /api/public. Est...

Migrar una web con PHP de Windows a Linux

Imagen
Si bien es cierto que el código PHP es el mismo para un servidor Windows como para uno Linux, a la hora de migrar hay que tener algunas cosas en consideración. Si bien la migración de un servidor Linux hacia uno con Windows es más transparente, la contraria lleva algunas tareas especiales. Lo más importante son las rutas include, mientras Windows soporta tanto include_once 'clases/db.php'; como include_once 'clases\db.php', en Linux sólo se soporta la barra \. Este sería el cambio más importante a tener en cuenta. Luego tenemos que ver si nuestro código tiene extensiones específicas de Windows , si son críticas y no encontramos alternativas, impedirían la migración. Un último punto a tener en cuenta son las llamadas a funciones de la línea de comandos con exec por ejemplo. Seguramente los comandos ejecutados no sean los mismos y las respuestas sean totalmente diferentes.

Servidores web para Windows

Imagen
Llevo ya muchos años trabajando con servidores web, de ellos bastante tiempo sobre Windows y es bastante complicado. Llegar a una configuración óptima en Windows solo puede ser con prueba y error, no hay una receta mágica que te lo permita, pero no por ello son malos servidores, en mi opinión creo que se han dejado de lado. Windows representa sólo el 32,2 % en los sistemas operativos que mantienen servidores web. ¿Por qué tan poca cuota? Para montar un servidor web bajo Windows sólo existen 2 excusas potentes: Trabajas con ASP Tu base de datos está en Microsoft SQL Server Para el punto 1 no hay alternativa posible, ASP necesita IIS y por ello Windows. Por el contrario el punto 2 es más susceptible a cambio (y más ahora con los nuevos desarrollos en los que la propia Microsoft está involucrada como el driver ODBC y la adaptación a Linux del propio SQL Server ). Para trabajar con SQL Server no es necesario ASP, puedes acceder desde PHP con ODBC, eso si...

PHP con Visual Studio Code

Imagen
El pasado 14 de abril Microsoft anunciaba la primera versión de Visual Studio Code , una versión simplificada (muy simplificada) de Visual Studio, orientada a la edición de código. Entre los lenguajes de programación soportados por defecto está PHP y aunque aún le queda mucho camino por delante es un IDE que debemos tener en cuenta. Sorprende la interfaz tan limpia que tiene, muy de mi agrado personal, y si bien es cierto que parece escasa de opciones dispone de bastantes funcionalidades en los pocos botones que tiene. Para trabajar con PHP no hace falta hacer nada, dispone de Intellisense de las funciones innatas de PHP no así de las clases propias de nuestro código, sin duda su mayor limitación, aunque existe un proyecto para intentar suplir esta carencia pero a mi en particular no me ha funcionado . En la parte inferior izquierda tienes varios iconos, el primero te da la opción de gestionar las extensiones, cuando abres una carpeta con archivos PHP tienes una opción i...

Microsoft ODBC driver 13 para CentOS 7

Imagen
Vamos a instalar el nuevo driver ODBC de Microsoft en un CentOS 7, pieza indispensable para futuro lanzamiento de su driver específico para Linux . Lo primero que haremos será descargar el driver ODBC desde la página oficial de Microsoft y comprobar los requerimientos mínimos para nuestro sistema operativo . yum info glibc yum info e2fsprogs yum info krb5-libs yum info openssl Para evitar errores del tipo Error: configure: error: no acceptable C compiler found in $PATH , y sobre todo en sistemas nuevos, debemos instalar un compilador para c yum groupinstall "Development tools" Instalando unixODBC Driver Manager para Microsoft ODBC Driver 13 (Preview) para SQL Server Ahora necesitamos instalar el driver manager sobre el que basa la conexión el ODBC de Microsoft. La opción más sencilla es utilizar el script de instalación que viene por defecto. Importante: la versión soportada es la que distribuye Microsoft, debéis desinstalar versiones ya existentes, da...

Instalar últimas versiones de nginx, php y mysql en CentOS 7

Imagen
Trabajar con las últimas versiones de software en sistemas como CentOS a veces suele ser difícil, sobre todo a la hora de encontrar repositorios que te permitan mantener el mismo nombre de paquetes y así poder actualizar los existentes. A día de hoy estas son las versiones que tengo instaladas, todas con los nombres de paquetes oficiales, nginx, php y mysql, (existen otros repositorios que te permiten instalar php 7 pero con un nombre diferente php70 o php70w según el repositorio que consultes): CentOS Linux release 7.2.1511 (Core) Server version: 5.7.10 MySQL Community Server (GPL) nginx version: nginx/1.9.9 PHP 7.0.1 (cli) (built: Dec 16 2015 15:23:56) ( NTS ) Repositorios necesarios Para instalar MySQL descargaremos el repositorio oficial de Oracle, desde que MySQL fue comprado por Oracle la comunidad de CentOS se ha decantado por MariaDB con lo cual no hay disponibles versiones para CentOS. rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-7...