Error open_basedir al imprimir imagen con ESC POS de Mike42

Hoy vengo a relatar otro error y la solución que encontré trabajando en un proyecto. Resulta que configuré la librería escpos-php en un servidor Ubuntu con Plesk. Lo subí, instalé las dependencias, etcétera hasta que me aparecía el siguiente error:

open_basedir restriction in effect. File(archivo) is not within the allowed path(s).

Cabe aclarar que esto me pasaba al imprimir una imagen. Lo demás funcionaba perfectamente. Y obviamente revisé que tuviera instaladas las extensiones, permisos de archivos, etcétera. Revisa eso antes y también el siguiente post:

Failed to load image al usar escpos-php de Mike42

En caso de que te aparezca este error, sigue leyendo.

(más…)

Failed to load image al usar escpos-php de Mike42

En este post voy a relatar un error que aparece al comunicarse con impresoras térmicas desde PHP usando la librería ESC POS de Mike42. En este caso el error es Failed to load image que ocurre cuando queremos imprimir una imagen en una impresora térmica.

Recuerda que este error aparece si la imagen no es válida, no existe, no tienes la extensión gd y/o imagick, etcétera. Pero si crees que cuentas con todo eso y te sigue dando problemas entonces sigue leyendo.

Te lo repito: antes de revisar la solución listada más adelante, por favor comprueba que la imagen que quieres imprimir existe y que tienes habilitadas las extensiones necesarias.

(más…)

Rotar imagen en navegador web con JavaScript y canvas

En este artículo te voy a enseñar a rotar una imagen con HTML y JavaScript a través de canvas, de manera que podrás girar una imagen los grados que tú quieras, es decir, rotarla 90, 180, 270 o cualquier cantidad.

Veremos cómo cargar una imagen, pintarla en un canvas, agregarle rotación y después hacer cosas como descargar esa imagen o enviarla al backend que puede ser con Node, C#, PHP, etcétera.

(más…)

Abrir y cerrar etiqueta HTML cada N elementos

En este post vamos a ver un algoritmo para separar etiquetas HTML cada cierto número de elementos. Por ejemplo, colocar un div cada 4 elementos sin importar la cantidad total de los elementos.

Esto sirve como ejercicio y para aplicaciones de la vida real. Recientemente tuve que separar un grupo de etiquetas div de 4 en 4 y encerrarlos en un div contenedor.

Entonces veamos cómo separar elementos cada cierto número y encerrarlos en otro contenedor sin importar la cantidad de elementos ni cada cuánto debemos separarlos. Básicamente vamos a realizar agrupaciones y división de datos.

(más…)

Recibo de compra con PHP en ejercicio resuelto - Subtotal, IVA y total

PHP: compra de productos con formulario (ejercicio resuelto)

El día de hoy vamos a resolver un ejercicio de programación en PHP. Se trata de simular la compra de productos a través de un formulario y luego mostrar el total.

Es un ejercicio de programación para aprender más sobre este lenguaje. La solicitud dice:

Realizar una página web dinámica con PHP que simule la compra de varios productos de una tiendita a través de un formulario web.

  • Solicitar el nombre de 5 productos (cuadros de textos).
  • Solicitar la marca de cada producto (desplegables).
  • Solicitar el precio de cada producto (cuadros de número)
  • El formulario tendrá los botones de enviar y reset
  • Al presionar el botón de envío, el programa calculará la suma de los productos (subtotal), el IVA y el total de la compra (Subtotal + IVA)

Vamos a hacerlo dibujando el formulario de manera dinámica y recibiéndolo igualmente en el servidor.

(más…)

Proyecto de Laravel ejecutándose en Android con Termux

Ejecutar proyecto de Laravel en Android con Termux

En el post de hoy veremos cómo “programar” en Laravel desde Android, o dicho técnicamente, ejecutar un proyecto de Laravel (que usa PHP) dentro de un servidor Apache con PHP todo dentro de Termux corriendo sobre un dispositivo Android.

Las herramientas que necesitamos ya existen en Termux, y son php, mysql, composer y apache.

Además, no es obligatorio programar en el móvil (aunque sí posible); podemos simplemente montar un proyecto de Laravel en Android.

(más…)

Exportar base de datos de MySQL con Laravel hacia un archivo SQL

Exportar base de datos de MySQL con Laravel

En este corto post de programación con PHP, Laravel y MySQL vamos a ver cómo exportar una base de datos de MariaDB completa desde un controlador de Laravel.

Vamos a usar la herramienta mysqldump atrapando su salida en un archivo y luego vamos a servirlo al cliente para finalmente eliminarlo, es decir, usaremos mysqldump para volcar la base de datos a un archivo SQL temporal.

Nota: si quieres también puedes ver el script que usa PHP puro y adaptarlo a Laravel:

Script para respaldar una base de datos de MySQL con PHP

(más…)

Código fuente de plugin para impresoras térmicas v2

En este post te mostraré cómo instalar y compilar lo necesario para montar el código fuente del plugin de impresoras térmicas versión 2 que ya presenté anteriormente y que puedes ver en el siguiente post:

Presentando plugin para impresoras térmicas versión 2

En pocas palabras, ese plugin permite imprimir en impresoras térmicas usando una API de internet, pero al estar en un servidor web necesita una conexión estable a internet, por ello es que ya existe la versión 3.

Al tener el código fuente, tú mismo puedes vender el servicio de la API ESC POS o usarlo para ti mismo modificando los planes y brindándote un plan ilimitado.

Veamos entonces cómo instalar las herramientas necesarias para modificar el código fuente del plugin versión 2.

(más…)

Agrupar condiciones WHERE en SQL usando Laravel

En el post de hoy vamos a trabajar con Laravel, PHP y consultas SQL con WHERE. Como bien sabes, en MySQL o motores similares podemos agrupar condiciones usando paréntesis, estableciendo así un orden.

Por ejemplo, si queremos encerrar 2 condiciones y luego evaluarlas con un AND, haríamos algo así:

select * from `productos` where `id_establecimiento` = ? and (`descripcion` LIKE ? or `codigo_barras` LIKE ?) order by `descripcion` asc;

En este caso hacemos un and entre la primera comparación y el resultado de la segunda que está encerrada entre paréntesis para evaluar un or.

Esto es importante porque (para este ejemplo) si no se usaran paréntesis se podrían ver los productos de todos los establecimientos si es que el código de barras coincide.

Entonces veamos cómo agrupar y evaluar condiciones booleanas de la base de datos entre paréntesis usando el Query Builder y ORM de Laravel.

(más…)

Archivo de Excel creado con Laravel, PHP y PhpSpreadsheet

Laravel: crear archivo de Excel

En este post veremos cómo crear un archivo de Excel usando Laravel. Verás que es realmente sencillo.

Te pondré un ejemplo simple y a partir del mismo podrás crear hojas de cálculo usando los modelos de Laravel que se conectan a la base de datos o trayendo el contenido desde cualquier lugar.

Vamos a usar PhpSpreadsheet del cual ya existe un post con PHP puro, pero ahora veremos cómo usar PhpSpreadsheet con Laravel.

(más…)

Laravel: restringir acceso según rol de usuario

En el post te hoy te enseñaré a manejar algunos roles de usuario en Laravel para que se pueda acceder a ciertas áreas dependiendo del rol.

Con lo que aprenderás podrás restringir ciertos módulos solo al administrador, y otros solo para el usuario normal, cajero, empleado, etcétera. Vamos a usar controladores y middlewares.

Por cierto, con esto vamos a restringir controladores completos, y no acciones. Eso lo dejamos para otro post en donde seguramente usaremos los Requests y el método authorize.

(más…)

Validar confirmación de contraseña con Laravel - Confirmar contraseña

Laravel: validar confirmación de contraseña

En el corto post de hoy veremos cómo validar que las contraseñas que el usuario escribe sean iguales al momento de registrar un usuario, es decir, que la contraseña y la confirmación de la contraseña coincidan.

Así vas a poder mostrar el mensaje de “Las contraseñas deben coincidir” o “Vuelve a escribir tu contraseña”

Esto se puede hacer con un if o cosas complejas, pero te enseñaré a comprobar si las 2 contraseñas son iguales dentro del Request que llega al formulario, dentro de StoreUserRequest específicamente.

Por cierto, estoy suponiendo que usas la autenticación de Laravel para crear usuarios o que al menos usas un Request para enviar el formulario.

(más…)

Ticket de venta en sistema de ventas con PHP

Ticket de venta y cantidad modificable en punto de venta con PHP y MySQL

Hace tiempo publiqué en este mismo blog un sistema de ventas open source con PHP, MySQL y Bootstrap.

En los últimos días le he agregado algunas características y hago este post para informar sobre las actualizaciones a ese sistema de ventas.

Específicamente hablando he agregado un campo para modificar la cantidad al vender usando el teclado. Por otro lado ahora se puede imprimir un ticket o recibo de venta.

(más…)

Trabajando con parámetros de ruta en Laravel

Hoy vamos a hablar un poco sobre los parámetros que se pueden pasar en la URL cuando usamos el framework Laravel y sobre la importancia del nombre de la variable que los mismos deben tener.

Recuerda que cuando usas un resource de Laravel, el framework asigna un nombre dependiendo del modelo; y varias veces no es el que esperamos.

Por otro lado debemos cuidar el nombre de la variable cuando recibimos el parámetro en un controlador.

Veamos cómo funcionan los parámetros de ruta en Laravel al usar resources y controladores, además de un truco para saber el nombre de los parámetros de las rutas de Laravel.

(más…)

Por parzibyte, hace