# 🔧 Fix Final: Composer Install con Extensiones PHP

**Fecha:** Noviembre 2024  
**Problema:** `composer install` falla por extensiones PHP faltantes y requisitos de versión

---

## ❌ Problemas Encontrados

### 1. Error de Sintaxis
```
bash: line 9: local: can only be used in a function
```

**Causa:** `local` no se puede usar fuera de una función en bash.

### 2. Extensión `fileinfo` Faltante
```
- intervention/image 2.7.2 requires ext-fileinfo * -> it is missing from your system.
```

**Causa:** La extensión `fileinfo` no está habilitada en PHP CLI.

### 3. Requisito PHP 8.3+ para `zipstream-php`
```
- maennchen/zipstream-php 3.2.0 requires php-64bit ^8.3 
  -> your php-64bit version (8.2.29) does not satisfy that requirement.
```

**Causa:** Algunos paquetes requieren PHP 8.3+, pero tenemos PHP 8.2.29.

---

## ✅ Solución Implementada

### 1. Eliminar `local` en `bash -c`

```bash
# ❌ Antes (error)
local php_version=$($php_cli -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')

# ✅ Después (correcto)
php_version=$($php_cli -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')
```

### 2. Usar `--ignore-platform-req` para Extensiones

```bash
# Ignorar fileinfo (se puede habilitar después en cPanel)
ignore_flags="--ignore-platform-req=ext-fileinfo"

# Ignorar requisitos de versión PHP si < 8.3
if [ "$php_major" -lt 8 ] || ([ "$php_major" -eq 8 ] && [ "$php_minor" -lt 3 ]); then
  ignore_flags="$ignore_flags --ignore-platform-req=php"
fi
```

### 3. Lógica Completa de Flags

```bash
# Construir flags según necesidades
ignore_flags=""

# Si PHP < 8.2, ignorar todos los requisitos
if [ "$php_major" -lt 8 ] || ([ "$php_major" -eq 8 ] && [ "$php_minor" -lt 2 ]); then
  ignore_flags="--ignore-platform-reqs"
fi

# Si PHP < 8.3, ignorar requisitos de versión PHP
if [ "$php_major" -lt 8 ] || ([ "$php_major" -eq 8 ] && [ "$php_minor" -lt 3 ]); then
  if [ -n "$ignore_flags" ]; then
    ignore_flags="$ignore_flags --ignore-platform-req=php"
  else
    ignore_flags="--ignore-platform-req=php"
  fi
fi

# Siempre ignorar fileinfo (se habilita después en cPanel)
ignore_flags="$ignore_flags --ignore-platform-req=ext-fileinfo"

# Ejecutar composer install
composer install --no-interaction $ignore_flags
```

---

## 🔍 Habilitar `fileinfo` en cPanel

Después de la instalación, habilitar `fileinfo` en cPanel:

1. **En cPanel del usuario:**
   - Ir a "Select PHP Version"
   - Hacer clic en "Extensions"
   - Marcar `fileinfo`
   - Guardar cambios

2. **O desde línea de comandos (como root):**
   ```bash
   # Habilitar fileinfo para PHP 8.2
   echo "extension=fileinfo" >> /opt/cpanel/ea-php82/root/etc/php.d/20-fileinfo.ini
   ```

---

## 📋 Verificar Extensiones Habilitadas

```bash
# Ver extensiones habilitadas
/opt/cpanel/ea-php82/root/usr/bin/php -m | grep fileinfo

# Debe mostrar: fileinfo
```

---

## ⚠️ Notas sobre `--ignore-platform-req`

**Ventajas:**
- Permite instalar dependencias aunque falten extensiones
- Útil para instalación inicial

**Desventajas:**
- Algunas funcionalidades pueden no funcionar hasta habilitar extensiones
- Puede causar errores en tiempo de ejecución

**Recomendación:** Habilitar `fileinfo` en cPanel después de la instalación.

---

## 🎯 Resultado Esperado

Después de esta corrección:
1. ✅ No más errores de sintaxis con `local`
2. ✅ `composer install` completa con `--ignore-platform-req=ext-fileinfo`
3. ✅ Dependencias instaladas correctamente
4. ✅ Migraciones pueden ejecutarse
5. ⚠️ Habilitar `fileinfo` manualmente después en cPanel

---

**Última actualización:** Noviembre 2024

