Conversation
Docs: - The `conf.d` branch of the image's file-layout tree listed `custom.ini` and `oxphp.ini`; the image has neither — it enables the extension from `extension.ini` and ships no `custom.ini` at all, that one belongs to the development image. A reader who went by the tree to place or override PHP settings was handed names that sort differently from the real ones. Both branches of the tree now also show what the PHP base image contributes, in each case a set that depends on the tag, and a new paragraph says the image carries no `php.ini` of its own and states the rules a reader acts on: only names ending in `.ini` are read, in alphabetical order, any other name being skipped without a word, and for an ordinary setting the last value read is the one that applies — while `extension=` and `zend_extension=` are collected from every file and all loaded, so a later one never replaces an earlier one. That exception has to be stated because the tree's own two files contain nothing but `extension=` lines: without it, the one worked example sitting next to the rule is the case the rule does not cover. - The component size table in the same section was stale by the same age. Measured in the published `0.11.0` image on both architectures, the three artefacts are ~12–15 MB, ~150–170 KB and ~700 KB, against ~8 MB, ~50 KB and ~200 KB as published.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The "Image Structure" tree in
docs/getting-started/installation.mddescribes the file layout of the runtime image, and itsconf.dbranch listed two files the image does not have:The release image enables the extension from
extension.ini, and it ships nocustom.iniat all — that one belongs to the development image, because production is meant to bring its own PHP configuration. Checked against the publishedghcr.io/oxphp/oxphp:0.11.0on both architectures:The names are the part of the tree a reader acts on. PHP reads
conf.din alphabetical order, so a file created under the name the documentation gave can sort on either side of the real one.Two things the tree did not say came out of the same check. The image carries no
php.iniof its own —/usr/local/etc/php/holds only the upstreamphp.ini-developmentandphp.ini-productionsamples, andphp --inireportsLoaded Configuration File: (none). And both branches of the tree were silent about what the PHP base image contributes: thedocker-php-ext-*.inifiles besideextension.ini, and the extension.sofiles besideoxphp_sapi.so. In each case the set depends on the tag —php:8.4-zts-alpine3.23carriesdocker-php-ext-opcache.iniandopcache.so, while the 8.5-based image does not, because OPcache is built in there.What the page now says about load order
A reader who is told "put your settings in
conf.d" needs two rules, and the second one is the reason this is worth more than a name swap.Only names ending in
.iniare read, in alphabetical order, and any other name is skipped without a word. This is a real failure mode for anyone mounting a ConfigMap key or a.conffile: the file is present, nothing complains, and the settings simply do not apply.For an ordinary setting the last value read is the one that applies, so a file that overrides one has to sort after the file that sets it. But
extension=andzend_extension=are the exception — PHP collects them from every file and loads them all, so a laterextension=never replaces an earlier one. Stating the general rule without that exception would have been actively misleading here, because the two files in the tree contain nothing butextension=lines, and the page's own production example writes four more of them toconf.d/app-extensions.ini, which sorts beforeextension.ini. A reader applying "later replaces earlier" to what is sitting right in front of them would conclude their extensions get clobbered and rename the file for no reason.Both rules were checked in the shipped image, not just read in the source:
Component sizes
The size table in the same section was stale by about the same age. Measured in
0.11.0:oxphpliboxphp_bridge.sooxphp_sapi.soThe table now says the figures are from a named version and that they differ by architecture, so the next drift is visible rather than silent.
Scope
Docs only, no code. Every other mention of a
conf.dfile indocs/was checked against both Dockerfiles and left alone: they all describe a file the user creates and mounts, where the name is the user's to choose. This section was the only place making a claim about what the runtime image contains.The size budget in
examples/dockerfile/Dockerfileand the "~188 MB → ~76 MB" figures indocs/getting-started/docker.mdrest on the same stale numbers, but they are a self-consistent budget for that example's ownprodstage and recomputing the total needs a build of it. Tracked separately rather than half-corrected here.Verification
cargo fmt -- --check,cargo clippy --no-default-features -- -D warnings,cargo test --no-default-features— clean (no Rust in the diff; run because the check is unconditional)scripts/gen-llms-txt.sh --check— up to date (58 pages);llms-full.txtis regenerated, not hand-editedghcr.io/oxphp/oxphp:0.11.0, and everyconf.dandextensions/entry the image has is represented in the treemain/php_ini.cat the pinnedphp-8.5.2tag —php_scandir(..., php_alphasort), the.ini-only filter,zend_hash_updatefor directives, and theextension_listspath forextension=/zend_extension=— and confirmed by the in-image runs above