# 🔧 Fix: php-cgi vs PHP CLI para Composer

**Fecha:** Noviembre 2024  
**Problema:** Composer se ejecuta con `php-cgi` en lugar de PHP CLI, causando errores

---

## ❌ Error Encontrado

```
Composer cannot be run safely on non-CLI SAPIs with register_argc_argv=On. Aborting.
```

**Causa:** Cuando se ejecuta `composer` directamente, el sistema resuelve el shebang del archivo `.phar` a `php-cgi` en lugar de `php` CLI, especialmente en entornos cPanel.

---

## ✅ Solución Implementada

### Ejecutar Composer con PHP CLI Explícitamente

En lugar de:
```bash
composer --version
composer install
```

Usar:
```bash
php /path/to/composer --version
php /path/to/composer install
```

**Ventajas:**
- Garantiza que se use PHP CLI (no php-cgi)
- Funciona en cualquier entorno
- Evita problemas con shebang del .phar

---

## 📋 Cambios en `bulk_create_cpanel4.sh`

### 1. Verificación de Versión

**Antes:**
```bash
sudo -u "$username" bash -c "cd $home_dir && $composer_bin --version 2>&1"
```

**Después:**
```bash
sudo -u "$username" bash -c "cd $home_dir && $php_cli $composer_bin --version 2>&1"
```

### 2. Instalación de Dependencias

**Antes:**
```bash
$composer_bin install --no-interaction
```

**Después:**
```bash
$php_cli $composer_bin install --no-interaction
```

### 3. Método Alternativo (Fallback)

**Antes:**
```bash
if sudo -u "$username" bash -c "$composer_bin --version 2>&1" >/dev/null 2>&1; then
```

**Después:**
```bash
if sudo -u "$username" bash -c "$php_cli $composer_bin --version 2>&1" >/dev/null 2>&1; then
```

---

## 🔍 Detección de PHP CLI

El script usa `find_php_cli()` para detectar el PHP CLI correcto:

```bash
find_php_cli() {
    local username="$1"
    local home_dir="/home/$username"
    
    # Buscar PHP CLI en ubicaciones comunes
    for php_path in /usr/bin/php /usr/local/bin/php /opt/cpanel/ea-php*/root/usr/bin/php; do
        if [ -x "$php_path" ] && ! echo "$php_path" | grep -q "php-cgi"; then
            # Verificar que es CLI ejecutando -v
            if sudo -u "$username" bash -c "$php_path -v" >/dev/null 2>&1; then
                echo "$php_path"
                return 0
            fi
        fi
    done
    
    # Fallback
    echo "/usr/bin/php"
}
```

---

## 🧪 Pruebas

### Verificar que Composer funciona

```bash
# Como usuario cPanel
php /home/usuario/.local/bin/composer --version

# Debe mostrar:
# Composer version 2.x.x
```

### Verificar que NO usa php-cgi

```bash
# Esto debe fallar con el error de php-cgi
/home/usuario/.local/bin/composer --version

# Esto debe funcionar
php /home/usuario/.local/bin/composer --version
```

---

## 📝 Notas

- **Siempre usar PHP CLI explícito** cuando se ejecuta Composer desde scripts
- El shebang del `.phar` puede apuntar a `php-cgi` en algunos entornos
- Usar `$php_cli $composer_bin` garantiza el uso correcto
- Esto también aplica a `php artisan` y otros comandos PHP CLI

---

## 🔗 Relacionado

- `FIX-PHP-CLI-VPS.md` - Detección de PHP CLI
- `FIX-ALLOW-URL-FOPEN-COMPOSER.md` - Problema de allow_url_fopen

---

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

