core

PHP Simple Fast & Secure

View on GitHub

Home › Reference › PHP compatibility

PHP 8.3, 8.4 and 8.5

The development environment supports PHP 8.3, 8.4 and 8.5. Compose defaults to 8.5, but the validation baseline for this project is PHP 8.3 (see AGENTS.md). Select the version without editing the service definitions:

PHP_VERSION=8.3 docker compose up -d php
PHP_VERSION=8.4 docker compose up -d php
PHP_VERSION=8.5 docker compose up -d php

The same variable selects the image for php-swoole. The existing DEBUG variable still controls the image suffix.

Run project commands inside the container:

docker exec psfs-php-1 php -v
docker exec -e XDEBUG_MODE=off psfs-php-1 composer install
docker exec -e XDEBUG_MODE=off psfs-php-1 composer check-platform-reqs
docker exec -e XDEBUG_MODE=off psfs-php-1 php vendor/bin/phpunit --no-coverage --fail-on-warning --fail-on-deprecation --display-all-issues

Omit XDEBUG_MODE=off when debugging. Composer resolves dependencies for PHP 8.3.0 so an update on PHP 8.5 cannot silently raise their minimum PHP version. check-platform-reqs verifies the actual runtime, ignoring that emulated version.

Propel and PHP 8.5

Older Propel releases called xml_parser_free() in the schema reader. That call has been a no-op since PHP 8.0 and emits a deprecation on PHP 8.5. The project no longer applies a local patch for it: composer.json depends on the psfs/propel fork (dev-master), whose source does not call xml_parser_free(). The schema generation and API tests exercise this path.

Because the fix lives in the dependency, downstream applications and fresh --no-dev installs receive it automatically, as long as they resolve psfs/propel rather than upstream propel/propel.


← Previous: Propel workflow · Next: Security overview →