Entradas

Recuperar y migrar un WordPress comprometido

Hace unos días tuve que migrar un WordPress a un servidor nuevo después de que el anterior quedara comprometido. Cuando llegas a un punto en el que faltan binarios del sistema, hay procesos extraños o cron jobs que no reconoces, seguir intentando limpiar la máquina deja de tener sentido. En estos casos prefiero recuperar los datos necesarios y reconstruir el servidor desde cero. Este fue exactamente el proceso que seguí. 1. Recuperar el WordPress del servidor antiguo Lo primero fue sacar la carpeta completa del WordPress. En mi caso estaba en: /var/www/html/wordpress Desde mi máquina local ejecuté: scp -r root@<server_ip>:/var/www/html/wordpress . Con esto copié todo el código del sitio a mi máquina local. 2. Recuperar la base de datos Para identificar la base de datos revisé el  wp-config.php : grep DB_ wordpress/wp-config.php Una vez identificado el nombre de la base de datos y el usuario, generé el dump. mysqldump --no-tablespaces -u wordpress_user -p wordpress_db > /ro...

Instalar llnode en macOS Big Sur

Imagen
El complemento llnode agrega la capacidad de inspeccionar el código fuente JavaScript a las funciones de depuración estándar de C / C ++ cuando se trabaja con procesos Node.js o volcados de núcleo en LLDB. Digamos que es la herramienta imprescindible si queremos detectar fallos en la gestión de memoria en nuestro código. Entorno macOS Big Sur 11.2.3 node 14.15.4 lldb-1200.0.44.2 Al ser llnode un plugin para lldb necesitamos instalar este primero, en el caso de macOS es suficiente con instalar las herramientas de consola de Xcode, nada más, no es necesario tener la versión completa instalada. sudo xcode-select --install Para comprobar que todo es correcto podemos utilizar lldb --version Ahora vamos a instalar llnode y la mejor manera es utilizando brew: brew install llnode Es importante tener en cuenta que esto solo nos instala el plugin pero no lo vincula con lldb ni genera un comando con el que podamos llamar a llnode desde consola directamente así que es normal que una vez instala...

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...

SQL Server, columnas calculadas

Aquí os dejo algunos apuntes básicos sobre las columnas calculadas en SQL Server. ¿Cuando se calculan? Depende de cómo defina la columna calculada. Una columna calculada PERSISTIDA se calculará y luego se almacenará como datos dentro de la tabla al ser creada. Si no define la columna como PERSISTIDA, se calculará cada vez que se ejecute una consulta que la incluya. Mas info aquí . Tablas temporales o versionadas La modificación del esquema de una tabla versionada por el sistema (tablas temporales) falla porque no se admite agregar una columna calculada mientras el versionado del sistema está activado. Para solucionarlo: Primero desactivar el versionado Luego agregar la columna calculada a la tabla base Verificar el tipo de la columna calculada resultante Agregar la columna con el tipo estático apropiado a la tabla de historial (tabla temporal o tabla versionada) Volver a activar el versionado Otra cosa a tener en cuenta es que una columna calculada que utiliza una...

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

SQL Server schemabinding

Este post es una traducción al castellano de este otro . Cuando se utiliza la palabra clave SchemaBinding al crear una vista o función, lo que hace es vincular la estructura a las tablas o vistas subyacentes. ¿Qué significa? Significa que mientras un objeto exista como un objeto vinculado, está limitado en los cambios que se pueden realizar sobre él por las tablas o vistas que lo referencian. Si una tabla es referenciada por una función o vista vinculada, solo las columnas a las que hace referencia la función o la vista no se pueden modificar , el resto si. Cuando tienes objetos vinculados en una base de datos: No puedes cambiar la intercalación (collation) de la base de datos.  No puedes usar SELECT * en las vistas vinculadas.  No puedes ejecutar sp_refreshview en las vistas vinculadas.  Puedes realizar cualquier cambio en la tabla origen que no afecte la estructura de las columnas enlazadas. Puedes averiguar si un objeto está vinculado al esquema mirando ...

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

Habilitar CORS en GraphQL y Zend Expressive 3

Encontré este artículo que me dió la pista de como hacerlo, pero es de 2017, con lo cual me encontré con múltiples errores. Aquí os dejo la guía detallada de cómo habilitar CORS para las últimas versiones de GraphQL y demás librerias implicadas. Instalamos las dependencias composer require tuupola/cors-middleware composer require zendframework/zend-problem-details Creamos la factoría dónde pondremos nuestros valores por defecto y la gestión de errores en JSON (disponible en github) Editamos el archivo de dependencias Tuupola\Middleware\CorsMiddleware::class => App\Factory\CorsMiddlewareFactory::class Y por último habilitamos el middleware en pipeline.php use Tuupola\Middleware\CorsMiddleware; ... // $app->pipe(ImplicitOptionsMiddleware::class); $app->pipe(CorsMiddleware::class);

Constitución cubana 1976 vs 2018

Imagen
Este post es bastante offtopic. Por curiosidad, y sin ser lingüista ni hacer un análisis muy detallado, he pillado la constitución cubana de 1976 y la he comparado con el nuevo proyecto que se quiere aprobar ahora. La comparación no va más allá que ver el uso de las palabras, si algún lingüista le apetece, yo encantado le paso los datos para que haga un análisis más profundo. En fin, sin enrrollarme más, vamos al grano. ¿Qué palabras son las más utlizadas? Aquí no hay mucha diferencia, ¡qué sorpresa! Quitando artículos, conjunciones, preposiciones, etc..., nos quedaría que en ambas constituciones las palabras más utilizadas son: estado, poder, popular, nacional, ley (leyes), asamblea, consejo, constitución, república. ¿Qué hay de nuevo? En el nuevo proyecto se han agregado alrededor de mil palabras nuevas, entre ellas, las más utilizadas son: conformidad, ministro, gobernador, garantizar, directivos, familias, información, autonomía, inversión, proteger, desa...

GraphQL en Zend Expressive 3

Imagen
Voy a intentar hacer una guia de paso a paso para utilizar GraphQL en Zend Expressive 3 . Existe algo de documentación por la red pero, o está incompleta o desactualizada, por eso me he decidido a hacer este manual. ¿Que vamos a utilizar? La última versión de Zend Expressive 3 y la implementación de GraphQLpara PHP hecha por webonyx . Otro día hablaré del por qué Zend Expressive. ¿Comenzamos? Lo primero es crear un proyecto $ composer create-project zendframework/zend-expressive-skeleton graphql-expressive Recuerda que el directorio graphql-expressive debe estar vacío. Ahora añadimos las dependencias para GraphQL $ cd graphql-expressive $ composer require webonyx/graphql-php Ahora vamos con el código, lo primero que haremos será configurar un middleware para procesar correctamente las peticiones en JSON, editamos el archivo config/pipeline.php agregando estas dos líneas: use Zend\Expressive\Helper\BodyParams\BodyParamsMiddleware; ... $app->pipe...

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...

Instalar PHP APCu en CentOS 6.9

Utilizando los repositorios de remi podemos instalar muy fácilmente APCu siguiendo este comando sudo yum install php-pecl-apcu Si os da este error con reiniciar apache o nginx es suficiente. Installing : php-pecl-apcu-bc-1.0.3-6.el6.remi.7.1.x86_64 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/apc.so' - /usr/lib64/php/modules/apc.so: undefined symbol: zif_apcu_store in Unknown on line 0

Instalar última versión de Nodejs en CentOS 7 con yum

Node proporciona en su web un rpm con los repositorios para instalar sus últimas versiones en CentOs. cd /tmp sudo curl --silent --location https://rpm.nodesource.com/setup_9.x | sudo bash - sudo yum install -y nodejs gcc-c++ make node -v v9.5.0 npm -v 5.6.0

Instalar última versión de Git en CentOS 7 con yum

Gracias a los repositorios del proyecto IUS podemos tener las últimas versiones de Git instaladas con yum en nuestro CentOs, es válido para las versiones 6 y 7 de esta distribución de linux. sudo yum install https://$(rpm -E '%{?centos:centos}%{!?centos:rhel}%{rhel}').iuscommunity.org/ius-release.rpm sudo yum install yum-plugin-replace sudo yum replace git --replace-with git2u git --version --- git version 2.16.1

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...

Microsoft ODBC 17 + SQL server driver 5.2.0 RC1 previews

Imagen
Microsoft está apostando fuerte con SQL Server en Linux, aún le falta un IDE potente como SSMS pero el servidor y la conectividad con lenguajes como PHP está servida, ya no es necesario tener que compilar de cero PHP para tener paquetes que no están en producción, sobre todo de Microsoft, todo gracias a la ayuda del rempositorio de Remi y las contibuciones en github de la propia Microsoft. Con esta base previa, hoy, me centraré en instalar el nuevo driver ODBC con soporte para Always Encripted, el driver de PHP 5.2 y todo con la última versión en el mercado de PHP, la 7.2. Los pasos a seguir son estos: sudo yum -y install epel-release wget yum-utils sudo wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo rpm -Uvh remi-release-7*.rpm sudo yum-config-manager --enable remi-php72 sudo yum install -y unixODBC-devel autoconf sudo curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo Ahora necesitamos instalar ...