Entradas

Mostrando las entradas etiquetadas como clases php

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

El driver de SQL Server para PHP 7

Para los que utilizan SQL Server con PHP y quieran actualizar a PHP 7 por ahora no será posible, no habrá soporte oficial de Microsoft SQL Server para PHP 7 hasta enero, en una versión previa. Más información en su página de github . Por ahora la única forma de conectar con SQL Server desde PHP 7 es utilizando ODBC porque el antiguo driver mssql también ha desaparecido desde PHP 5.3, lo cual es totalmente normal teniendo soporte oficial de Microsoft. Toca esperar.

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

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

¿Herencia múltiple en PHP 5.4?

Imagen
La herencia es uno de los elementos clave de la programación orientada a objetos . Existen la herencia múltiple , herencia simple y la herencia horizontal , dependiendo del número de clases que una clase puede heredar o incluir. La herencia simple es la más sencilla y legible, pero restrictiva. La herencia múltiple en cambio es compleja, pero permite una definición más natural de las relaciones entre las clases. La herencia horizontal es un nuevo concepto introducido con PHP 5.4, a mi entender un parche, que permite a este lenguaje de herencia simple reutilizar código. Los lenguajes de programación orientados a objetos nos proporcionan, a parte de naturalidad al escribir código, la reutilización del mismo; de ahí que una de las principales ventajas sea el concepto de herencia. A través de la herencia podemos crear clases padres que contienen la funcionalidad básica, y luego una nueva clase que extienda a esta donde heredaremos todas sus características, propiedades y métodos. Sin ...

Pequeños cambios en PHP 5.4

Imagen
Veamos algunos de los muchos pequeños cambios realizados en el entorno de PHP 5.4. Cada uno de ellos por sí solo no justificaría un artículo independiente, pero es mejor asegurarse de ellos para que la transición a PHP 5.4 desde versiones previas no se convierta en un quebradero de cabeza. Hay una gran cantidad de cambios que se hicieron en esta actualización y algunos de ellos implican la eliminación por completo, no sólo desuso, de funcionalidades utilizadas por versiones anteriores de PHP que ya no serán compatibles, y de utilizarse obtendremos errores en nuestros archivos. Uno de estos elementos es el modo seguro . Algunas aplicaciones utilizan el modo seguro para el manejo de la seguridad en la interacción con el sistema de archivos. Esta herramienta fue creada principalmente para entornos de alojamiento compartido, pero se ha determinado que este tipo de seguridad es mejor manejarla dentro del propio servidor web o el sistema operativo. Sin embargo, eso no quiere decir que nec...

Novedades en PHP 5.4

Imagen
En el post anterior vimos por qué actualizar a PHP 5.4 en cuanto a factores de optimización del núcleo central, pero, ¿qué novedades trae esta nueva versión? Servidor web incorporado Uno de los cambios más grandes en PHP 5.4 es la adición de un servidor web incorporado. Esto nos permite utilizar PHP sin tener que instalar Apache o IIS y poder probar nuestro sitio en un instante. No es un súper servidor robusto, pero es genial para el manejo de un cierto desarrollo y pruebas en una sola máquina. Con el fin de iniciar el servidor web, la forma más fácil es navegar a la carpeta raíz de PHP y, a continuación, ejecutar PHP usando el flag S. Este servidor utiliza la carpeta public_html como raíz de los contenidos por ello debemos de crearla bajo la carpeta principal de PHP y allí ubicar todos los archivos de nuestro sitio web. php –S localhost:80 En caso de que nos salga el siguiente error failed to listen on localhost:80 (reason:Permission denied) es porque otra aplicación está utiliz...

Rellenar SELECT con AJAX y jQuery

Uno de los usos más básicos con AJAX es rellenar combos (SELECT). Pero no por básico dejar de ser a veces complicado. Lo primero que debemos saber es que las funciones AJAX de jQuery utilizan la codificación UTF-8 tanto para recibir como para enviar datos. Existen mil maneras de pasar los datos con AJAX aunque las más lógicas serían las que utilizan formatos unificados para el tráfico de datos como son XML y JSON. Particularmente a mi me gusta mucho más utilizar JSON pero en Chrome si creamos un objeto JSON a partir de un array numerado el objeto resultante se ordena obviando el orden que se le haya dado previamente . Rellenando un SELECT con XML Lo primero que haremos será construir un objeto XML codificado en UTF-8 para ello podemos ayudarnos de funciones como utf8_encode en caso de que los valores vengan codificados en ISO. Aquí es dejo un ejemplo de un XML $xml = new XmlWriter(); $xml->openMemory(); $xml->startDocument('1.0', 'UTF-8'); $xml-...

Obtener tags de videos con PHP

Imagen
Buscando alguna clase para PHP con la que pudiera obtener los tags de información de cualquier tipo de archivo multimedia (AVI, MP3) he descubierto una utilidad bastante interesante, no es una librería de PHP sino una herramienta externa con la cual podremos procesar cualquier archivo de video y obtener toda la información disponible del mismo. La herramienta se llama MediaInfo y es un programa ejecutable al que pasándole la ruta del archivo nos devuelve toda la información, la cual podemos analizar y utilizar solo los campos necesarios. Lo primero que debemos hacer es descargarnos la última versión de MediaInfo pero solo el cliente (esta explicación la haré para Windows pero utilizando el mismo procedimiento es totalmente compatible con Linux). Una vez descargado, descomprimimos el archivo ZIP y ubicamos los archivos en algún lugar de fácil acceso, en mi caso c:\Program Files\MediaInfoShell\. La sintaxis para obtener la información de un video es la siguiente: mediainfo.exe -...

Zend Studio y el símbolo de euro para PHPExcel

Imagen
El que esté familiarizado con la librería de PHP para generar archivos Excel de codeplex (PHPExcel) sabe que todos los textos para que esta librería funcione correctamente deben estar en UTF-8. El problema viene cuando queremos utilizar caracteres especiales como el símbolo del euro y nuestro código está en otra codificación. Por ejemplo los proyectos en Zend Studio por defecto están en CP1252 (la mayoría de las veces se puede confundir con el estándar ISO 8859-15 pero no es lo mismo) con lo cual si queremos convertir a UTF-8 un texto sabiendo que puede contener el símbolo de euro (€) no vale con utilizar las funciones utf8_encode o utf8_decode porque ambas codifican o decodifican entre ISO 8859-1 y UTF-8. ¿Qué opciones tenemos para codificar textos en Windows-1252 a UTF-8? Existen varias herramientas ninguna de ella exenta de tener que instalar librerías adicionales aunque son bastante sencillas y universales. La primera opción es mb_convert_encoding y la segunda es iconv ...

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

Convertir Minutos o Segundos a fecha formateada

A veces tenemos un valor de minutos o segundos y queremos convertirlo a una cadena de tiempo formateada del tipo x horas x minutos etc. Esta clase que os voy a presentar ahora es precisamente para ello. La clase se basa en la modificación de una clase parecida que lo que hace es dando una fecha determinada calcula el tiempo que ha pasado desde esa fecha hasta el momento actual, la clase original se puede encontrar en el post Clase para mostrar fechas al estilo “hace 1 dia 6 min” con PHP . class haceTanto extends DateTime { protected $strings = array( 'y' => array( '1 año' , '%d años' ), 'm' => array( '1 mes' , '%d meses' ), 'd' => array( '1 día' , '%d dias' ), 'h' => array( '1 hora' , '%d horas' ), 'i' => array( '1 min' , '%d minutos' ), ...

Errores de herencia en PHP5

Hoy he descubierto que en PHP si tienes una clase abstracta esta clase no puede heredar de ninguna otra. Lo más gracioso es que en la versión 5.2.6 que es la que utilizo no muestra ningún error específico lo único que dice PHP es que no encuentra la clase en cuestión. ¿Por qué una clase abstracta no puede heredar de otra? ¿Por qué PHP no permite la herencia múltiple? ¿Por qué PHP no permite el polimorfismo?

Convertir fechas de excel a PHP

Un archivo de Microsoft Excel almacena las fechas en un formato numérico que corresponde a los días desde el 1 de enero de 1900, teniendo en cuenta que php las fechas las guarda a partir de 1970 y en segundos pues es un poco engorroso convertir una fecha de un formato a otro, para ello PHPExcel de codeplex tiene una clase llamada PHPExcel_Shared_Date con una función estática que hace esta operación, la función como tal se llama ExcelToPHP y devuelve la cantidad de segundos correspondientes a la fecha en PHP. Podemos utilizarla de la siguiente forma: // leo el archivo excel $objPHPExcel = HPExcel_IOFactory::load('prueba.xlsx'); // utilizo como activa la hoja 1 $objPHPExcel->setActiveSheetIndex(0); $objWorksheet = $objPHPExcel->getActiveSheet(); // obtengo el valor de la celda $fecha_excel = objWorksheet->getCell('A1')->getValue(); // utilizo la función y obtengo el timestamp $timestamp = PHPExcel_Shared_Date::ExcelToPHP($fecha); $fecha_php = date(...

Codeplex excelentes soluciones

Imagen
Desde hace mucho tiempo utilizo la clase PHPExcel para trabajar excel con PHP y crear y leer archivos reales, alojado en este proyecto de hosting para software open source . Hoy he estado buscando un plugin para Windows Life Writer que me permitiera incluir código fuente dentro del blog y para mi sorpresa este proyecto llamado Code Colorizer también está alojado en Codeplex (ver cómo instalar Code Colorizer ). Aquí podemos encontrar muchos proyectos pero los que más me han llamado la atención aparte de los dos anteriores son PHPWord y PHPPowerPoint . ¡Increíble que tengamos tantos recursos para PHP y blogs de manera gratuita, me encanta la comunidad Open Source! Actualización enero 2018  Codeplex ya no existe como tal, ahora es un servicio de sólo lectura que cerró en diciembre de 2017, aún se puede consultar el archivo de proyectos aunque casi todos están ya migrados a Github en incluso algunos sin mantenimiento. Windows Live Writer es ahora Ope...

Convertir números romanos en PHP

He reutilizado una clase en PHP de Víctor De la Rocha que convierte números romanos en arábigos y viceversa para agregarles nuevas funciones y compatibilidad con PHP 5, si necesitas una clase que: convierta de números romanos a arábigos (números normales) convierta de decimales a números romanos valide números romanos Entonces esta es tu clase y puedes descargarla en el enlace: clase para convertir números romanos a decimales . Nota: se puede utilizar tanto como un objeto o como funciones estáticas. La función para saber si un número es romano o no utiliza expresiones regulares a la hora de validar los números romanos introducidos.