Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/build-php-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ jobs:
fail-fast: false
matrix:
include:
- image: php
tag: 8.5-fpm-5
context: images/8.5-fpm
- image: php
tag: 8.5-apache-5
context: images/8.5-apache
- image: php
tag: 8.4-fpm-5
context: images/8.4-fpm
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/pr-php-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ jobs:
- examples/8.2
- examples/8.3
- examples/8.4
- examples/8.5
- examples/custom
- examples/composer
- examples/php-extensions
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## {{ UNRELEASED_VERSION }} - [{{ UNRELEASED_DATE }}]({{ UNRELEASED_LINK }})

* Added support for PHP 8.5

## v1.8.0 - [September 2, 2025](https://github.com/lando/php/releases/tag/v1.8.0)

* Removed automatic installation of `hirak/prestissimo` for `composer:1`
Expand Down
2 changes: 1 addition & 1 deletion builders/php.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ module.exports = {
name: 'php',
config: {
version: '7.4',
supported: ['8.4', '8.3', '8.2', '8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'],
supported: ['8.5', '8.4', '8.3', '8.2', '8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'],
legacy: ['7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3'],
gen2: ['5.5', '5.4', '5.3'],
path: [
Expand Down
120 changes: 60 additions & 60 deletions docs/extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,66 +5,66 @@ description: Learn what extensions are installed in the Lando PHP plugin

# Installed Extensions

| | 5.3 | 5.4 | 5.5 | 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2 | 8.3 | 8.4 |
| -- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| apc | X | X | | | | | | | | | | | | |
| apcu | | | X | X | X | X | X | X | X | X | X | X | X | X |
| bcmath | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| bz2 | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| calendar | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| Core | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| ctype | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| curl | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| date | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| dom | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| exif | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| fileinfo | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| filter | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| ftp | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| gd | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| gettext | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| hash | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| iconv | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| imagick | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| imap | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| intl | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| json | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| ldap | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| libxml | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mbstring | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mcrypt | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| memcached | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mysqli | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mysqlnd | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| OAuth | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| OPcache | | | X | X | X | X | X | X | X | X | X | X | X | X |
| openssl | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pcntl | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pcre | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| PDO | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pdo_mysql | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pdo_pgsql | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pdo_sqlite| X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| Phar | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| posix | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| readline | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| redis | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| readline | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| Reflection| X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| session | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| SimpleXML | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| soap | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| SPL | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| sqlite3 | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| standard | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| tokenizer | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| xdebug | * | * | * | * | * | * | * | * | * | * | * | * | * | * |
| xhprof | | | | | | | | | X | X | X | X | X | X |
| xml | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| xmlreader | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| xmlwriter | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| zip | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| zlib | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| | 5.3 | 5.4 | 5.5 | 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2 | 8.3 | 8.4 | 8.5 |
| -- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| apc | X | X | | | | | | | | | | | | | |
| apcu | | | X | X | X | X | X | X | X | X | X | X | X | X | X |
| bcmath | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| bz2 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| calendar | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| Core | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| ctype | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| curl | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| date | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| dom | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| exif | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| fileinfo | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| filter | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| ftp | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| gd | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| gettext | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| hash | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| iconv | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| imagick | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| imap | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| intl | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| json | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| ldap | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| libxml | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mbstring | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mcrypt | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| memcached | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mysqli | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| mysqlnd | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| OAuth | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| OPcache | | | X | X | X | X | X | X | X | X | X | X | X | X | X |
| openssl | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pcntl | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pcre | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| PDO | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pdo_mysql | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pdo_pgsql | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| pdo_sqlite| X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| Phar | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| posix | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| readline | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| redis | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| readline | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| Reflection| X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| session | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| SimpleXML | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| soap | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| SPL | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| sqlite3 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| standard | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| tokenizer | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| xdebug | * | * | * | * | * | * | * | * | * | * | * | * | * | * | * |
| xhprof | | | | | | | | | X | X | X | X | X | X | X |
| xml | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| xmlreader | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| xmlwriter | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| zip | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
| zlib | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |

__*__ Note that `xdebug` is off by default but you can enable it by setting your `php` services config to `xdebug: true`. Read more about this in "Configuration" above.

Expand Down
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ services:

## Supported versions

* [8.5](https://hub.docker.com/r/devwithlando/php)
* [8.4](https://hub.docker.com/r/devwithlando/php)
* [8.3](https://hub.docker.com/r/devwithlando/php)
* [8.2](https://hub.docker.com/r/devwithlando/php)
Expand Down
3 changes: 3 additions & 0 deletions examples/8.5/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
vendor
composer.json
test
57 changes: 57 additions & 0 deletions examples/8.5/.lando.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: lando-php85
events:
post-start:
- defaults: php -i | grep memory_limit | grep -e "-1"
services:
defaults:
type: php:8.5
cli:
type: php:8.5
via: cli
build_as_root:
- curl -sL https://deb.nodesource.com/setup_18.x | bash -
- apt-get update -y
- apt-get install -y nodejs
cliworker:
type: php:8.5
composer_version: false
via: cli
command: sleep infinity
custom:
type: php:8.5
composer_version: "2.9.2"
via: nginx
ssl: true
webroot: web
config:
php: config/php.ini
overrides:
image: devwithlando/php:8.5-fpm-5
environment:
DUALBLADE: maxim
OTHER: thing
custom_nginx:
build_as_root:
- apt-get update -y
- apt-get install curl -y
- mkdir -p /app/test && touch /app/test/managed_build_step
overrides:
environment:
MORE: things
OTHER: stuff
tooling:
php:
service: defaults
node:
service: :host
options:
host:
description: The service to use
default: cli
alias:
- h

# This is important because it lets lando know to test against the plugin in this repo
# DO NOT REMOVE THIS!
plugins:
"@lando/php": ../..
122 changes: 122 additions & 0 deletions examples/8.5/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# PHP 8.5 Example

This example exists primarily to test the following documentation:

* [PHP Service](https://docs.lando.dev/config/php.html)

And probably other stuff

## Start up tests

Run the following commands to get up and running with this example.

```bash
# Should start up successfully
lando poweroff
lando start
```

## Verification commands

Run the following commands to validate things are rolling as they should.

```bash
# Should use 8.5 as the default php version
lando exec defaults -- php -v | tee >(cat 1>&2) | grep "PHP 8.5"

# Should use 15.x as the default postgresql-client version
lando exec defaults -- psql -V | tee >(cat 1>&2) | grep "15."

# Should use apache 2.4 as the default webserver version
lando exec defaults -- apachectl -V | tee >(cat 1>&2) | grep "2.4."

# Should only serve over http by default
lando exec defaults -- curl https://localhost || echo $? | grep 7

# Should serve from the app root by default
lando exec defaults -- curl http://localhost | grep "ROOTDIR"

# Should have a 1G php mem limit on appserver
lando exec defaults -- curl http://localhost | grep "memory_limit" | grep "1G"

# Should have COMPOSER_MEMORY_LIMIT set to -1
lando exec defaults -- env | grep "COMPOSER_MEMORY_LIMIT=-1"

# Should install composer 2.x by default
lando exec defaults -- composer --version --no-ansi | tee >(cat 1>&2) | grep -q "Composer version 2."

# Should have unlimited memory for php for CLI opts
lando php -i | grep memory_limit | grep -e "-1"
lando exec defaults -- php -i | grep "memory_limit" | grep -e "-1"

# Should not enable xdebug by default
lando exec defaults -- php -m | grep xdebug || echo $? | grep 1

# Should have a PATH_INFO and PATH_TRANSLATED SERVER vars
lando exec custom_nginx -- curl https://localhost | grep SERVER | grep PATH_INFO
lando exec custom_nginx -- curl https://localhost | grep SERVER | grep PATH_TRANSLATED

# Should use specified php version if given
lando exec custom -- php -v | tee >(cat 1>&2) | grep "PHP 8.5"

# Should install composer 2.9.2 if version number is set
lando exec custom -- composer --version --no-ansi | tee >(cat 1>&2) | grep -q "Composer version 2.9.2"

# Should serve via nginx if specified
lando exec custom_nginx -- curl http://localhost | grep "WEBDIR"

# Should serve via https if specified
lando exec custom_nginx -- curl https://localhost | grep "WEBDIR"

# Should not serve port 80 for cli
lando exec cli -- curl http://localhost || echo $? | grep 7

# Should use custom php ini if specified
lando exec custom -- php -i | grep memory_limit | grep 514
lando exec custom -- curl http://custom_nginx | grep html_errors | grep On | grep On

# Should serve and be accessible over ssl if specified
lando exec custom_nginx -- curl https://localhost
lando exec custom -- curl https://custom_nginx

# Should inherit overrides from its generator
lando exec custom -- env | grep DUALBLADE | grep maxim
lando exec custom_nginx -- env | grep DUALBLADE | grep maxim

# Should be able to run build steps on lando managed nginx service
# https://github.com/lando/lando/issues/1990
lando exec custom_nginx -- cat /app/test/managed_build_step

# Should be able to override lando managed nginx service
# https://github.com/lando/lando/issues/1990
lando exec custom_nginx -- env | grep OTHER | grep stuff
lando exec custom_nginx -- env | grep MORE | grep things

# Should set PATH_INFO and PATH_TRANSLATED if appropriate
# https://github.com/lando/lando/issues/2192
lando exec custom_nginx -- curl http://localhost/path_info.php/a/b.php | grep PATH_INFO | grep "/a/b.php"
lando exec custom_nginx -- curl http://localhost/path_info.php/a/b.php | grep PATH_TRANSLATED | grep "/app/web/a/b.php"
lando exec custom_nginx -- curl http://localhost/path_info.php/a/b.php | grep SCRIPT_NAME | grep "/path_info.php"
lando exec defaults -- curl http://localhost/path_info.php/a/b.php | grep PATH_INFO | grep "/a/b.php"
lando exec defaults -- curl http://localhost/path_info.php/a/b.php | grep PATH_TRANSLATED | grep "/app/a/b.php"
lando exec defaults -- curl http://localhost/path_info.php/a/b.php | grep SCRIPT_NAME | grep "/path_info.php"

# Should allow cli services to specify a boot up command
lando info -s cliworker --deep | grep Cmd | grep sleep | grep infinity

# Should not install composer when composer_version is false
echo $(lando exec cliworker -- composer --version --no-ansi 2>&1) | grep "executable file not found"

# Should have node 18 installed in cli service
lando node -v | tee >(cat 1>&2) | grep v18.
```

## Destroy tests

Run the following commands to trash this app like nothing ever happened.

```bash
# Should be destroyed with success
lando destroy -y
lando poweroff
```
Loading
Loading