Vazcell

Error al activar un módulo en Drupal: fgets() must be of type resource (traducciones)

Por Adrián Vázquez · Actualizado el · 5 min de lectura

Este artículo se publicó en el blog anterior de Vazcell y lo he revisado y actualizado para Drupal 10 y 11.

En resumen

El error fgets(): Argument #1 ($stream) must be of type resource, bool given en PoStreamReader.php aparece al activar un módulo cuando Drupal no puede descargar o guardar sus traducciones. Casi siempre se soluciona creando la carpeta translations, corrigiendo sus permisos o revisando la configuración del sistema de archivos.

El error

Activas un módulo con Drush y, de repente, aparece algo así:

TypeError: fgets(): Argument #1 ($stream) must be of type resource, bool given in fgets()
(line 248 of core/lib/Drupal/Component/Gettext/PoStreamReader.php)

Asusta, pero si lees los mensajes anteriores suele aparecer la pista importante:

[error] The specified file 'temporary://file74h1sh' could not be copied because the destination
directory 'translations://' is not properly configured. This may be caused by a problem with
file or directory permissions.

Es decir: el módulo se activa, Drupal intenta descargar sus traducciones (por ejemplo al español) y no puede guardarlas. Al no poder abrir el archivo .po, el lector de traducciones recibe false en lugar de un archivo y lanza el error.

Cómo solucionarlo

  1. Carpeta translations: comprueba que existe (por defecto, sites/default/files/translations). Si no existe y Drupal no tiene permisos para crearla, créala tú.
  2. Permisos: revisa que el propietario, el grupo y los permisos de la carpeta permitan escribir al usuario del servidor web.
  3. Sistema de archivos: entra en /admin/config/media/file-system y revisa las rutas de archivos temporales y de traducciones. Guardar esa configuración, aunque no cambies nada, a veces crea lo que faltaba. Si la ruta no es accesible, cámbiala por una que sí lo sea.

Para comprobar que está resuelto, desinstala el módulo y vuelve a instalarlo: ahora las traducciones deberían descargarse sin errores. También puedes forzar la actualización de traducciones con drush locale:update.

Preguntas frecuentes

¿El error rompe el módulo?

Normalmente no: el módulo suele quedar instalado y lo que falla es la importación de sus traducciones. Aun así, conviene corregirlo para que el sitio tenga las traducciones completas.

¿Pasa en Drupal 10 y 11?

Sí. El sistema de traducciones funciona igual, así que la causa y la solución son las mismas.

¿Prefieres que te lo mire yo?

Cuéntame tu caso y te digo qué haría, cuánto costaría y cuánto tardaríamos, sin compromiso.

Pedir presupuesto gratis