# Versiones de PHP y php.ini en cuentas con varios dominios

Una cuenta de **Directadmin** puede alojar varios dominios. Cuando se quiere que cada uno use una versión distinta de PHP, o valores distintos de `php.ini`, aparece una confusión muy habitual: **unos ajustes se propagan solos a todos los dominios de la cuenta y otros no**.

No es un fallo del panel. Son dos ámbitos distintos, y conviene tenerlos claros antes de pelearse con la configuración.

## El síntoma típico

Se cambia la versión de PHP y el `memory_limit` en el dominio principal de la cuenta. Al ir al segundo dominio, el panel avisa de que toma la configuración del principal. Y entonces se observa algo aparentemente incoherente:

- El `memory_limit` nuevo **sí** aparece en el segundo dominio, sin haberlo tocado ahí.
- La versión de PHP **no**: el segundo dominio sigue con la versión antigua.

De ahí la sensación de que el panel "no hace caso". Lo que ocurre es que cada cosa se aplica a un nivel diferente.

## Los dos ámbitos

### La versión de PHP es por dominio

Cada dominio guarda su propia selección de versión, de forma independiente. Cambiarla en el dominio principal **no** la cambia en el resto: hay que hacerlo dominio por dominio.

### Los valores del `php.ini` del panel son por cuenta

Directadmin crea **un único pool de PHP-FPM por usuario**, no uno por dominio. Todos los dominios de la cuenta que usen la misma versión de PHP comparten ese pool.

Cuando desde el panel se ajusta `memory_limit`, `upload_max_filesize`, `max_execution_time` y demás, el valor acaba escrito en ese pool como `php_value`. Por eso se aplica a **todos** los dominios de la cuenta a la vez, aunque el formulario se haya abierto teniendo seleccionado un dominio concreto.

## Cambiar la versión de PHP de un dominio

Desde el panel, en modo usuario, en la pantalla de configuración de PHP. El proceso paso a paso, con capturas, está en [Configurar PHP en un servidor con Directadmin](https://wiki.castris.com/books/directadmin/page/configurar-php-en-un-servidor-con-directadmin).

Lo importante:

1. Seleccionar el dominio en el desplegable de la pantalla.
2. Cambiar la versión **de ese dominio**.
3. Repetir con cada dominio que se quiera mover. No basta con el principal.
4. Esperar unos instantes: el panel regenera la configuración del servidor web y recarga PHP-FPM.

## Cómo comprobar de verdad qué versión se está usando

Es la parte donde más se falla, porque hay varias formas de mirar y casi todas engañan.

- **Fiable:** una página en el propio dominio con `phpinfo()`, consultada por navegador, y **borrada inmediatamente después**. Un `phpinfo()` accesible expone la configuración del servidor, así que no puede quedarse ahí.
- **No fiable:** `php -v` por SSH. Devuelve la versión por defecto del servidor o la del usuario, **no** la del dominio, que es la que usa la web.
- **No fiable:** el aviso de versión de PHP del panel de WordPress u otros gestores. Suelen cachear ese dato y tardan en refrescarlo.

## Valores de `php.ini` distintos para cada dominio

Sí es posible, pero **no desde el panel**: requiere acceso de administrador al servidor.

El mecanismo son las secciones `[HOST=]` en un fichero `.ini` dentro de `/usr/local/phpXX/lib/php.conf.d/`:

```ini
[HOST=segundo-dominio.example]
memory_limit = 512M
upload_max_filesize = 128M
```

Los ficheros de ese directorio se cargan por orden alfabético, de ahí que se numeren. Después hay que reconstruir la configuración web:

```bash
da build rewrite_confs
```

Dos detalles verificados que conviene conocer:

- **La sección `[HOST=]` prevalece** sobre el valor que el panel haya dejado en el pool de la cuenta. Es decir, sirve para dar a un dominio concreto un valor distinto del que tiene el resto de la cuenta.
- **No todas las directivas admiten esto.** Las que solo pueden fijarse una vez en el `php.ini` principal, como `disable_functions`, no se pueden sobrescribir por esta vía. Ese caso concreto está tratado en [Cambios especificados en el php.ini disable_functions por dominio](https://wiki.castris.com/books/directadmin/page/cambios-especificados-en-el-phpini-disable-functions-por-dominio-directadmin-example).

Referencia oficial: [Per-domain settings for PHP](https://docs.directadmin.com/webservices/php/php-options.html#how-to-use-per-domain-or-per-path-settings-for-php).

## Resumen

| Qué se quiere cambiar | Ámbito | Quién puede hacerlo |
|---|---|---|
| Versión de PHP | Por dominio | El propio usuario, desde el panel |
| `memory_limit` y similares del panel | Toda la cuenta | El propio usuario, desde el panel |
| `memory_limit` y similares para **un solo** dominio | Por dominio | Solo el administrador del servidor |

##### Aviso

Esta documentación y su contenido no implica que funcione en tu caso o en determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido se entrega tal y como está, sin que ello implique ninguna obligación ni responsabilidad por parte de [Castris](https://castris.com).

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/store/soporte-profesional).