Entradas

Mostrando las entradas etiquetadas como librerías php

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

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

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

Instalando ImageMagick con PHP y Windows

Imagen
En este tutorial veremos como instalar paso a paso el software ImageMagick en Windows y la librería de PHP asociada. Software de mi servidor Windows Server 2008 R2 Standard Español x64 SP1 XAMPP Version: 1.8.3 Apache x86 2.4.7 VC11 PHP 5.5.6 x86 TS VC11 Software a instalar ImageMagick-6.9.1-2-Q16-x86-dll php_imagick-3.3.0rc1-5.5-ts-vc11-x86 Enlaces de descarga para ImageMagick El software se puede descargar desde este enlace o desde la página oficial . Los drivers para PHP se pueden descargar también desde diferentes ubicaciones y en diferentes versiones, up opté por la última en el momento de crear el post la 3.3.0 RC1 , pero también es posible descargar la 3.2.0 RC1 o la versión estable 3.1.2 . Todas se pueden descargar desde la siguiente ruta alternativa . Instalación de ImageMagick con XAMPP Realmente lo de que sea sobre XAMPP da igual, lo único que tendríamos que buscar las rutas y directorios específicos de nuestra instalación de PHP. Instalación del soft...

Reduciendo el tamaño de mPDF

Imagen
mPDF es una clase PHP que genera archivos PDF desde HTML con codificación UTF-8. Se basa en FPDF y HTML2FPDF, con una serie de mejoras. Según el propio autor la librería, que ya va por su versión 6.0 y es sobre la que hablaré en este post, se creó para producir archivos PDF de diferentes idiomas al vuelo. Es más lento que los scripts originales, por ejemplo HTML2FPDF, y produce archivos más grandes cuando se usa Unicode, pero tiene soporte de estilos CSS y muchas mejoras . Pero bueno, si has llegado hasta aquí buscando como reducir el tamaño de esta librería supongo que sepas lo anterior así que vamos al grano. Este post va dedicado a todos aquellos que generan PDF pero que no requieren funcionalidades extras, en mi caso solo necesito que un HTML en español e inglés, con imágenes y estilos básicos sea convertido en un PDF de una sola página, por ejemplo el siguiente código: $mpdf = new mPDF('en-GB-x','A4','','',5,5,5,5,0,0); $mpdf->mirrorMargins =...

PHP rendimiento curl vs file_get_contents

Una de las opciones para mejorar la seguridad de nuestro código que planteaba en el post asegurar php desde el archivo de configuración era la de evitar que archivos remotos pudiesen ser abiertos o incluidos desde nuestro código fuente, también comentaba que una de las consecuencias directas era la imposibilidad de utilizar file_get_contents para abrir urls. Después de realizar varias pruebas internas utilizando ambas instrucciones para obtener un json de una página externa a mi sitio veo que no solo es en seguridad que ganamos sino en rendimiento, desde mi código he podido constatar que utilizar curl es de media un 30 % más rápido que llamar directamente a file_get_contents. Haciendo una búsqueda luego de ver estos resultados (que todo sea dicho fueron hechos con una versión de PHP muy antigua la 5.2.1) he encontrado que hay otros usuarios a los que les ha pasado lo mismo y han obtenido resultados muy similares a los míos. La función que utilicé está dentro de una clase con lo cua...

Internacionalización (i18n) con PHP

Cuando trabajamos con un sitio que debe estar disponible en  varios idiomas hay múltiples alternativas para traducirlo en PHP pero todas básicamente se basan en incluir un archivo de idioma y sustituir cada frase por su equivalente. Cuando tenemos que traducir un sitio deberíamos plantearnos seriamente la internacionalización del mismo ¿qué es? Básicamente es no solo traducir el texto sino mostrar fechas y configuraciones regionales según el idioma elegido. La mejor herramienta para esto es la extensión de PHP gettext , herramienta que aún no he probado pero que sospecho tendrá un rendimiento más que aceptable y mucho mejor que el resto de opciones que veremos en este post. Lo único malo de esta librería y precisamente será lo que garantice su rendimiento es el uso de la cache para almacenar los idiomas con lo cual cualquier actualización requeriría un reinicio de apache, cosa que en muchos casos no es viable salvo que tengamos un servidor dedicado. Os prometo que intentaré imp...

Funciones actualizadas en PHP 5.5

Imagen
En un post anterior vimos las nuevas funcionalidades que PHP 5.5 introduce , en este vamos a ver cambios que se han hecho en funciones ya existentes como por ejemplo la combinación de foreach y list, las mejoras en la función empty, el comportamiento de unpack y la eliminaciones de funciones previamente deprecadas. Combinando foreach con list Como desarrollador, una de las tareas comunes que veo de forma regular es el uso de loops en un conjunto de resultados. Dependiendo de las circunstancias, es posible que tenga que asignar un grupo de variables a valores de propiedades o valores de una matriz. Hasta este momento ha sido un proceso manual, pero en PHP 5.5 es posible asignar estos valores directamente utilizando la función list. Esto me permite recorrer el vector y desempacar matrices anidadas en variables en un bucle. Solo hay una limitación, no puedo utilizar la lista como un elemento clave. Quedaría algo como este foreach($row as list($var1, $var2)). Comprobar cualquier cosa ...

Nuevas funcionalidades en PHP 5.5

Una vez que hemos visto todas las ventajas que nos puede traer PHP 5.4 y sabiendo que esta no es la última versión estable sería interesante ver cuáles son las ventajas de esta para una vez decididos migrar optemos por una u otra. Generadores Una de las necesidades de programación más comunes, es ser capaz de realizar una acción sobre todos los elementos de un objeto. Por ejemplo, usando un foreach en una matriz, para obtener cada clave o, un foreach sobre un objeto, para obtener el nombre de cada parámetro y su valor. El mecanismo para la aplicación de este comportamiento es conocido como un iterador, que se utiliza para recorrer todos los elementos de un objeto o una matriz. Los iteradores se pueden definir de forma explícita con clases personalizadas, pero eso puede ser un proceso difícil de manejar y complejo, con apaños y, más que un puñado de funciones. ¿Qué pasa si quiero actuar en un subconjunto de una matriz, y realizar algo de lógica a medida que avanzo, pero aún así ser...

XAMPP Call to undefined function ldap_connect()

Imagen
Para activar la librería LDAP en cualquier entorno Windows debemos seguir los siguientes pasos: Activar la extensión en el archivo php.ini Agregar a la variable de sistema PATH la ruta de PHP. Cito el manual de PHP Para que esta extensión funcione, hay unos ficheros DLL que deben estar disponibles en el sistema de Windows PATH . Para más información en como hacer esto, vea la FAQ titulada " Como añadir mi directorio PHP en el PATH de Windows ". Aunque copiar los ficheros DLL desde el directorio PHP al directorio del sistema de Windows también funciona (porque el directorio del sistema por defecto es el PATH del sistema), esto no se recomienda. Esta extensión requiere que los siguientes ficheros estén en el PATH : libeay32.dll y ssleay32.dll Las versiones anteriores de PHP 4.3.0 requieren adicionalmente libsasl.dll . Para activar la librería en el php.ini lo único que tenemos que hacer es descomentar (eliminar el ; inicial) la siguiente línea ;extension=php_ldap...

Almacenar IPs en las bases de datos

Imagen
La mayoría de los usuarios cuando tienen que almacenar IPs en sus bases de datos los hacen con tipos de campos VARCHAR cuando es mucho más óptimo almacenarlos con un entero sin signo (en caso de MySQL) o BIG INT (en caso de SQL Server). Convertir IPs en MySQL Existen 2 funciones para ello inet_aton e inet_ntoa , la primera convierte la IP en un número y la segunda es el proceso contrario. Convertir IPs en SQL Server En SQL Server no hay funciones predefinidas para ello pero las podemos crear muy fácilmente, en el siguiente enlace hay un par de ejemplos muy buenos para convertir IPs a BIG INT en SQL Server y viceversa . Esta transformación también la podemos hacer al insertar los datos en el lenguaje de programación, en el caso de PHP sería ip2long y long2ip .

Error Unable to connect to server mssql_connect()

Una de las desventajas de intentar conectar PHP con SQL Server desde linux es tener que utilizar la librería mssql. Esta librería si de algo es escasa es de mostrar errores con los cual cuando tenemos el error Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server lo único que queremos es poner el grito en el cielo porque no sabemos el motivo como tal. Como expliqué en el post Acceder desde Linux a SQL Server con PHP para instalar esta librería es necesario instalar previamente FreeTDS y esta desde la versión 0.6 viene con una utilidad llamada tsql que nos permitirá conectarnos al servidor SQL y en caso de fallo nos dará errores mucho más descriptivos. Lo que tenemos que hacer es entrar como root a la consola de nuestro servidor y ejecutar el comando tsql, en caso del siguiente error tsql: command not found la solución es simple, hay primero que comprobar que existe el archivo y segundo incluir la ruta en la variable global PATH de linux. El archivo...

Archivos grandes con PHPseclib

Imagen
Uno de los mejores conjuntos de plugins, o clases, o librerías externas, para PHP es PHPseclib (PHP secure library) la cual implementa de manera mucho más intuitiva las funcionalidades para acceder a servidores con SSH y SFTP. Lo malo de casi todas estas librerías es que no son distribuciones oficiales y por tanto estamos sujetos a los intereses o convicciones de cada programador. Las ventajas de PHPseclib son muchísimo mayores que sus desventajas, que las hay, una de ellas por ejemplo es su incapacidad de gestionar correctamente el tamaño de archivos superiores a 4 GB. Según reza en la misma documentación de la clase: Los archivos de más de 4GB se mostrarán como si tuviesen exactamente 4GB. Los tamaños de archivos están representado por un número entero de 64 bits, no se debe utilizar Net_SFTP para transferir archivos con más de 4 GB (0xFFFFFFFF bytes) porque todos los tamaños de los archivos que son más grandes se representarán como 4GB. La solución para esto es reescribir la f...

Activando CURL en WAMP 2.2 64 bits

Imagen
¿Problemas con PHP Curl en una de las instalaciones wamp siguientes para Windows 64bit? wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-x64.exe wampserver2.2e-php5.4.3-httpd-2.4.2-mysql5.5.24-x64.exe Si es así entonces este post te ayudará a solucionarlas y activar nuevamente esta extensión tan útil de PHP. WAMP no cabe duda ha mejorado muchísimo desde que sus primeras versiones vieran la luz, es una interfaz muy sencilla y una de las pocas que se ha atrevido a compilar MySQL, PHP y Apache para Windows en 64 bits, y es sobre esta distribución en concreto que voy ha hablar y es que la librería curl que viene compilada para PHP 5.4.3 en WAMP 2.2 está mal, al activarla todo parece normal pero cuando ejecutamos un script con alguna de las funciones podemos tener errores de este tipo: Use of undefined constant CURLOPT_TIMEOUT O si comprobamos el evento de logs de WAMP tendríamos lo siguiente: Activation context generation failed for “c:\wamp\bin\php\php5.4.3\ext\php_curl.dll”. De...

mssql_connect(): Unable to connect to server

Existen dos posibles soluciones para este error de la librería de PHP mssql (obsoleta ya desde la versión 5.3 de PHP por la aparición del driver de Microsoft para SQL Server sqlsrv). El error unable to connect to server puede deberse a una de estas dos razones: La librería ntwdblib.dll perteneciente a las MS SQL Client Tools está desfasada, por tanto tenemos que localizarla en nuestro ordenador y descargar una versión más reciente. En la configuración del php.ini tenemos la directiva mssql.compatability_mode a 0 y deberíamos tenerla a 1. Con estas sencillas comprobaciones nos evitaremos muchos quebraderos de cabeza al intentar conectar nuestro servidor web con PHP y un servidor de base de datos SQL Server con esta librería.

Errores driver SQL Server para PHP

En este post voy a describir algunos de los errores menos comunes que nos podemos encontrar utilizando el driver de SQL server para PHP elaborado por Microsoft. Son errores poco comunes y poco descriptivos en la información, no son los errores típicos de inserción de datos duplicados o de actualizaciones erróneas. Este post es un poco más específico y en el voy a mostrar errores más bien de conexión o errores que de aparecer deberíamos tirarnos de los pelos por su gravedad ya no solo de instalación del servidor sino de vulnerabilidad con los datos. Para mostrar los errores y warnings este drive de Microsoft para PHP nos presenta la función sqlsrv_errors las cual nos devuelve un array con todos los errores captados en la última ejecución, para cada error hay 3 parámetros fundamentales. SQLSTATE, código y mensaje. Para un listado de los posibles SQLSTATE podemos consultar el siguiente listado, como estos son para errores que se originan en el controlador ODBC, los valores SQLST...