php

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:

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

El problema era imagick

El código que yo uso para imprimir una imagen es bitImage. El error aparecía justamente al invocar a bitImage, no al invocar a load. Pero si vemos, el código de load es:

public static function load(
string $filename,
bool $allowOptimisations = true,
array $preferred = ['imagick', 'gd', 'native']
) {

Fíjate en que recibe 3 parámetros. Y lo que nos interesa es el orden de preferencia ($preferred), que por defecto es imagick, gd y native. Esto es porque primero intenta cargar la imagen usando imagick, si no se puede usa gd y finalmente métodos nativos.

Si dejamos ese orden, entonces usará imagick por defecto. Lo siguiente causa el error, pues es como no indicar el parámetro aceptando que se prefiera a imagick:

$imagen = EscposImage::load($nombreArchivo, true,['imagick','gd','native']);

Pero así está bien:

$imagen = EscposImage::load($nombreArchivo, true,['gd','native', 'imagick']);

También así:

$imagen = EscposImage::load($nombreArchivo, true,['native','gd', 'imagick']);

El truco es simplemente no usar imagick o dejarlo al final. No tengo idea del porqué… puede ser por el servidor, algún permiso que se me haya pasado, la protección del proveedor de servicios, etcétera.

Como dije, configuré esto en un servidor con Plesk y la imagen se guardaba con file_put_contents. Nunca en mi vida me había aparecido algún error de open_basedir y todo esto se me hace muy raro, pero al final vine aquí a comentar mi problema y solución en caso de que a alguien más le funcione.

Nota: si tú quieres imprimir en una impresora térmica y quieres evitarte todos estos errores además de poder imprimir desde cualquier lenguaje de programación entonces dale un vistazo a mi plugin:

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.