Changing common PHP settings

Instead of going through the effort of writing custom scripts or mounting files to change PHP settings, have the power to change common settings with the simplicity of an environment variable.

Common Examples

All our environment variables are documented and can be found in our environment variable specification documentation.

Here are a few examples on how you can change common PHP settings.

Docker Compose: Changing allowed upload size

version: '3'
services:
  php:
    image: serversideup/php:8.2.12-unit-bookworm
    environment:
      PHP_POST_MAX_SIZE: "500M"
      PHP_UPLOAD_MAX_FILE_SIZE: "500M"
      SSL_MODE: "mixed"
    ports:
      - 80:8080
      - 443:8443
    volumes:
      - .:/var/www/html/

Docker CLI: Setting the PHP timezone to New York

docker run -d \
  -p 80:8080 \
  -v $(pwd):/var/www/html \
  -e PHP_DATE_TIMEZONE="America/New_York" \
  serversideup/php:8.2.12-fpm-nginx-bookworm

Setting your own php.ini

PHP will read the php.ini file from the /usr/local/etc/php/conf.d/ directory in alphabetical order. This means you can create your own php.ini file and mount it to the container to override the default settings.

For example, we can create this file in our project directory:

zzz-custom-php.ini

mysqli.max_persistent = 300
opcache.max_file_size = 10M
opcache.log_verbosity_level = 3

Then in our Dockerfile, we can copy this file to the /usr/local/etc/php/conf.d/ directory:

Dockerfile: Append to our default configuration

FROM serversideup/php:8.3-fpm-nginx-bookworm

COPY zzz-custom-php.ini /usr/local/etc/php/conf.d/

If you prefer to remove the default php.ini file, you can do so by adding the following line to your Dockerfile:

Dockerfile: Remove our default configuration

FROM serversideup/php:8.3-fpm-nginx-bookworm

RUN rm /usr/local/etc/php/conf.d/serversideup-docker-php.ini
COPY zzz-custom-php.ini /usr/local/etc/php/conf.d/

Validating changes

It's always best to validate your changes by running php -i via the command line or using phpinfo().