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
- Carpeta translations: comprueba que existe (por defecto, sites/default/files/translations). Si no existe y Drupal no tiene permisos para crearla, créala tú.
- Permisos: revisa que el propietario, el grupo y los permisos de la carpeta permitan escribir al usuario del servidor web.
- 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.
Te puede interesar
Desarrollo Drupal freelance en remoto Cómo migrar de Drupal 7 a Drupal 10 y llegar a Drupal 11 Cuánto cuesta mantener una página web al año Qué necesita la web de un negocio local para conseguir clientes Cómo aplicar un parche en Drupal 10 y 11 con Composer Acceder al panel de Drupal sin contraseña con Drush (drush uli) Config Split: configuración distinta por entorno en Drupal Módulos esenciales para empezar un proyecto Drupal