Skip to content

maint: move to PHP 8.4, Apache 2.4.68 - #362

Merged
mcdurdin merged 1 commit into
masterfrom
maint/php-84
Sep 10, 2026
Merged

maint: move to PHP 8.4, Apache 2.4.68#362
mcdurdin merged 1 commit into
masterfrom
maint/php-84

Conversation

@mcdurdin

@mcdurdin mcdurdin commented Sep 9, 2026

Copy link
Copy Markdown
Member

As the PHP 7.4 image broke with missing security dependencies in Debian Bullseye (at time of writing, as yet unresolved), resolved to complete the upgrade to PHP 8.4 rather than try to build a stopgap solution based on existing PHP 7.4. Unfortunately PHP 8.4 has a number of incompatible changes in 8.x series, documented at https://www.php.net/manual/en/migration80.incompatible.php. I have audited some of the more obvious ones -- but there is potential for other breakages which we will need to monitor.

Changes required:

  • move from PHP 7.4 to PHP 8.4 Docker image (upgrades Debian, Apache, PHP as major components)
  • update apt process for accessing Microsoft packages on Debian
  • add libicu-dev and install intl php extension (not included by default in the 8.4 image)
  • dependency upgrades forced for Sentry, phpunit, curl-client, guzzlehttp/guzzle
  • removed unused parsedown, parsedown-extra
  • addition of BCTLS flag to .htaccess mod_rewrite rules (https://stackoverflow.com/q/75684314/1836776)
  • Add unit tests to verify several endpoints - focus on spaces in parameters where they are allowed (e.g. legacy keyboard ids)
  • Fixup call to str_getcsv
  • Other minor tweaks as required

See-also: keymanapp/keyman.com#828
See-also: keymanapp/s.keyman.com#1712
See-also: keymanapp/keymanweb.com#210
See-also: keymanapp/help.keyman.com#2655
Relates-to: keymanapp/keymanweb.com#209
Test-bot: skip

@keymanapp-test-bot

Copy link
Copy Markdown

User Test Results

Test specification and instructions

User tests are not required

@keymanapp-test-bot keymanapp-test-bot Bot added this to the B19S1 milestone Sep 9, 2026
Comment thread build.sh
Comment on lines +191 to +192
builder_run_action composer-start docker_build_and_start_composer_container
builder_run_action composer-stop docker_stop_and_cleanup_composer_container

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that these actions depend on an upcoming change to shared-sites. Putting them here for convenience only. They have no other impact.

Comment thread Dockerfile
Comment thread Dockerfile
As the PHP 7.4 image broke with missing security dependencies in Debian
Bullseye (at time of writing, as yet unresolved), resolved to complete
the upgrade to PHP 8.4 rather than try to build a stopgap solution based
on existing PHP 7.4. Unfortunately PHP 8.4 has a number of incompatible
changes in 8.x series, documented at
https://www.php.net/manual/en/migration80.incompatible.php. I have
audited some of the more obvious ones -- but there is potential for
other breakages which we will need to monitor.

Changes required:
* move from PHP 7.4 to PHP 8.4 Docker image (upgrades Debian, Apache,
  PHP as major components)
* update apt process for accessing Microsoft packages on Debian
* add libicu-dev and install intl php extension (not included by default
  in the 8.4 image)
* dependency upgrades forced for Sentry, phpunit, curl-client,
  guzzlehttp/guzzle
* removed unused parsedown, parsedown-extra
* addition of BCTLS flag to .htaccess mod_rewrite rules
  (https://stackoverflow.com/q/75684314/1836776)
* Add unit tests to verify several endpoints - focus on spaces in
  parameters where they are allowed (e.g. legacy keyboard ids)
* Fixup call to `str_getcsv`
* Other minor tweaks as required

See-also: keymanapp/keyman.com#828
See-also: keymanapp/s.keyman.com#1712
See-also: keymanapp/keymanweb.com#210
See-also: keymanapp/help.keyman.com#2655
Relates-to: keymanapp/keymanweb.com#209
Test-bot: skip

@jahorton jahorton left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would probably be wise to have someone else give a proper review to this, given it's the api.keyman.com site and therefore the most critical one for these related issues, but LGTM so far as I can tell.

foreach($data as $line) {
$sql .= "INSERT $table $coldef VALUES(";
$row = str_getcsv($line,"\t",'',"");
# note that \x7f should be an unused character in the source file as

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a change emerging from php 8.4 upgrade: the enclosure parameter is now validated and cannot be an empty string.

Comment thread Dockerfile
RUN docker-php-ext-install pdo pdo_mysql zip
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv pdo pdo_mysql

# Install intl extension

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

intl was not bundled in the php-8.4 image, whereas it was in php-7.4; this also needs libicu-dev

@mcdurdin
mcdurdin marked this pull request as ready for review September 10, 2026 07:30
@mcdurdin
mcdurdin marked this pull request as draft September 10, 2026 07:30
@mcdurdin
mcdurdin marked this pull request as ready for review September 10, 2026 09:06
@mcdurdin
mcdurdin merged commit d4972dc into master Sep 10, 2026
5 of 6 checks passed
@mcdurdin
mcdurdin deleted the maint/php-84 branch September 10, 2026 09:07
@github-project-automation github-project-automation Bot moved this from Todo to Done in Keyman Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants