Skip to content

Add PHP 8.4.20 and 8.5.5 configurations with extension support and update bundle release to 2026.4.18#73

Merged
jwaisner merged 3 commits intomainfrom
April
Apr 24, 2026
Merged

Add PHP 8.4.20 and 8.5.5 configurations with extension support and update bundle release to 2026.4.18#73
jwaisner merged 3 commits intomainfrom
April

Conversation

@N6REJ
Copy link
Copy Markdown
Collaborator

@N6REJ N6REJ commented Apr 19, 2026

PR Type

Enhancement


Description

  • Added PHP 8.4.20 and PHP 8.5.5 support with comprehensive configuration files

  • Created php.ini configuration files for both versions with 1920+ lines of settings, including memory limits, execution timeouts, error reporting, and essential extensions (curl, fileinfo, gd, intl, mbstring, mysqli, openssl, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium, xdebug)

  • Added extension properties files for both PHP versions with download URLs for imagick, memcache, xdebug, and zip extensions

  • Created Bearsampp configuration files (bearsampp.conf) for both PHP versions with CLI executables and Apache module references

  • Added dependency configuration files (deps.properties) for both versions with ImageMagick 7.1.2-19 Q16 HDRI x64 build

  • Added PEAR package manager configuration (pear.properties) for both versions referencing pearweb_phars 1.10.24

  • Updated bundle release version from 2026.3.13 to 2026.4.18 in build.properties

  • Added README documentation for dependencies directories explaining PATH environment variable injection


Diagram Walkthrough

flowchart LR
  A["Build Properties"] -- "version update" --> B["2026.4.18"]
  C["PHP 8.4.20"] -- "configuration" --> D["php.ini"]
  C -- "extensions" --> E["exts.properties"]
  C -- "dependencies" --> F["deps.properties"]
  C -- "pear" --> G["pear.properties"]
  C -- "bearsampp" --> H["bearsampp.conf"]
  I["PHP 8.5.5"] -- "configuration" --> J["php.ini"]
  I -- "extensions" --> K["exts.properties"]
  I -- "dependencies" --> L["deps.properties"]
  I -- "pear" --> M["pear.properties"]
  I -- "bearsampp" --> N["bearsampp.conf"]
Loading

File Walkthrough

Relevant files
Configuration changes
11 files
php.ini
PHP 8.4.20 configuration file with extensions                       

bin/php8.4.20/php.ini

  • Added comprehensive PHP 8.4.20 configuration file with 1925 lines of
    settings
  • Configured core PHP directives including memory limits (512M),
    execution timeouts, and error reporting
  • Enabled essential extensions (curl, fileinfo, gd, intl, mbstring,
    mysqli, openssl, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium)
  • Set up paths for extensions, temporary directories, and PEAR using
    ~BEARSAMPP_LIN_PATH~ placeholder
  • Configured xdebug extension with debug mode and cachegrind output
    settings
+1925/-0
exts.properties
PHP 8.4.20 extension properties and download links             

bin/php8.4.20/exts.properties

  • Added extension download URLs for PHP 8.4.20 (imagick, memcache,
    xdebug, zip)
  • Specified versions compatible with PHP 8.4 from Bearsampp modules
    repository
  • All extensions point to release 2026.4.18 except imagick (2026.3.4)
+4/-0     
exts.properties
PHP 8.5.5 extension properties and download links               

bin/php8.5.5/exts.properties

  • Added extension download URLs for PHP 8.5.5 (imagick, memcache,
    xdebug, zip)
  • Specified versions compatible with PHP 8.5 from Bearsampp modules
    repository
  • Extensions reference releases 2026.4.18 and 2026.3.4/2026.3.13
    depending on extension
+4/-0     
bearsampp.conf
PHP 8.4.20 Bearsampp configuration settings                           

bin/php8.4.20/bearsampp.conf

  • Added Bearsampp configuration for PHP 8.4.20 with version identifier
  • Configured CLI executables, configuration file path, and Apache module
    reference
  • Set bundle release placeholder @RELEASE_VERSION@ for dynamic version
    injection
+9/-0     
bearsampp.conf
PHP 8.5.5 Bearsampp configuration settings                             

bin/php8.5.5/bearsampp.conf

  • Added Bearsampp configuration for PHP 8.5.5 with version identifier
  • Configured CLI executables, configuration file path, and Apache module
    reference
  • Set bundle release placeholder @RELEASE_VERSION@ for dynamic version
    injection
+9/-0     
deps.properties
PHP 8.4.20 dependencies configuration                                       

bin/php8.4.20/deps.properties

  • Added ImageMagick dependency download URL for PHP 8.4.20
  • References portable ImageMagick 7.1.2-19 Q16 HDRI x64 build from
    release 2026.4.18
+1/-0     
deps.properties
PHP 8.5.5 dependencies configuration                                         

bin/php8.5.5/deps.properties

  • Added ImageMagick dependency download URL for PHP 8.5.5
  • References portable ImageMagick 7.1.2-19 Q16 HDRI x64 build from
    release 2026.4.18
+1/-0     
build.properties
Bundle release version update                                                       

build.properties

  • Updated bundle release version from 2026.3.13 to 2026.4.18
+1/-1     
pear.properties
PHP 8.4.20 PEAR package manager configuration                       

bin/php8.4.20/pear.properties

  • Added PEAR download URL for PHP 8.4.20
  • References pearweb_phars 1.10.24 from release 2025.12.7
+1/-0     
pear.properties
PHP 8.5.5 PEAR package manager configuration                         

bin/php8.5.5/pear.properties

  • Added PEAR download URL for PHP 8.5.5
  • References pearweb_phars 1.10.24 from release 2025.12.7
+1/-0     
php.ini
PHP 8.5.5 configuration file with extensions and paths     

bin/php8.5.5/php.ini

  • Added comprehensive PHP 8.5.5 configuration file with 1920 lines of
    settings
  • Configured core PHP directives including error reporting, display
    settings, and resource limits
  • Enabled essential extensions (curl, fileinfo, gd, gettext, intl,
    mbstring, mysqli, openssl, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql,
    sodium)
  • Set up paths for extensions directory, include path, session storage,
    and temporary directories with ~BEARSAMPP_LIN_PATH~ placeholders
  • Configured xdebug extension with debug mode, trigger-based activation,
    and output settings
+1920/-0
Documentation
2 files
README.txt
PHP 8.4.20 dependencies directory documentation                   

bin/php8.4.20/deps/README.txt

  • Added README file with instructions for placing PECL dependencies
  • Documents that dependencies will be injected into PATH environment
    variable
+2/-0     
README.txt
PHP 8.5.5 dependencies directory documentation                     

bin/php8.5.5/deps/README.txt

  • Added README file with instructions for placing PECL dependencies
  • Documents that dependencies will be injected into PATH environment
    variable
+2/-0     

@N6REJ N6REJ added the enhancement ✨ Improve program label Apr 19, 2026
@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Add PHP 8.4.20 and 8.5.5 support with comprehensive configuration and update bundle release to 2026.4.18

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Added PHP 8.4.20 and 8.5.5 support with comprehensive configuration files
• Created php.ini configuration files for both versions with 1920+ lines of settings, including
  memory limits (512M), execution time (60s), and POST size (32M)
• Enabled essential PHP extensions: curl, fileinfo, gd, gettext, intl, mbstring, mysqli, openssl,
  pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium, and xdebug
• Configured xdebug extension with debug mode and cachegrind output settings for both versions
• Created extension properties files (exts.properties) for both PHP versions with imagick,
  memcache, xdebug, and zip extensions
• Updated PHP 8.5.3 extensions to 2026.4.18 release (memcache, xdebug, zip)
• Created Bearsampp configuration files (bearsampp.conf) for both versions with CLI executables
  and Apache 2.4 module settings
• Added dependencies configuration (deps.properties) for both versions with ImageMagick 7.1.2-19
• Created PEAR configuration files (pear.properties) for both versions
• Added documentation files explaining the deps directory structure
• Updated bundle release version from 2026.3.13 to 2026.4.18 in build.properties
Diagram
flowchart LR
  A["Bundle Release<br/>2026.3.13"] -- "update to" --> B["Bundle Release<br/>2026.4.18"]
  B -- "adds" --> C["PHP 8.4.20<br/>Configuration"]
  B -- "adds" --> D["PHP 8.5.5<br/>Configuration"]
  C -- "includes" --> E["php.ini<br/>Extensions<br/>Dependencies"]
  D -- "includes" --> F["php.ini<br/>Extensions<br/>Dependencies"]
  C -- "updates" --> G["Extension URLs<br/>to 2026.4.18"]
  D -- "updates" --> G
Loading

Grey Divider

File Changes

1. bin/php8.4.20/php.ini ⚙️ Configuration changes +1925/-0

PHP 8.4.20 configuration file with extensions

• Added comprehensive PHP 8.4.20 configuration file with 1925 lines of settings
• Configured core PHP directives including memory limits (512M), execution time (60s), and POST size
 (32M)
• Enabled essential extensions: curl, fileinfo, gd, gettext, intl, mbstring, mysqli, openssl,
 pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium
• Configured xdebug extension with debug mode and cachegrind output settings
• Set up paths for extensions, temporary files, and PEAR using ~BEARSAMPP_LIN_PATH~ placeholder

bin/php8.4.20/php.ini


2. bin/php8.5.3/exts.properties Dependencies +4/-4

Update PHP 8.5.3 extensions to 2026.4.18 release

• Updated memcache extension URL from 2026.3.4 to 2026.4.18 release
• Updated xdebug extension URL from 2026.3.4 to 2026.4.18 release
• Updated zip extension URL from 2026.3.13 to 2026.4.18 release
• Standardized formatting by adding spaces around equals signs for consistency

bin/php8.5.3/exts.properties


3. bin/php8.4.20/exts.properties ⚙️ Configuration changes +4/-0

PHP 8.4.20 extensions configuration file

• Created new extensions properties file for PHP 8.4.20
• Configured four extensions: imagick, memcache, xdebug, and zip
• All extensions point to 2026.4.18 release except imagick (2026.3.4)
• Standardized formatting with spaces around equals signs

bin/php8.4.20/exts.properties


View more (11)
4. bin/php8.5.5/exts.properties ⚙️ Configuration changes +4/-0

PHP 8.5.5 extensions configuration file

• Created new extensions properties file for PHP 8.5.5
• Configured four extensions: imagick, memcache, xdebug, and zip
• Extensions reference 2026.3.4 and 2026.3.13 releases
• Inconsistent formatting with some entries lacking spaces around equals signs

bin/php8.5.5/exts.properties


5. bin/php8.4.20/bearsampp.conf ⚙️ Configuration changes +9/-0

PHP 8.4.20 Bearsampp configuration file

• Created configuration file for PHP 8.4.20 with version identifier
• Defined CLI executables: php.exe and php-win.exe
• Specified Apache 2.4 module: php8apache2_4.dll
• Set bundle release placeholder @RELEASE_VERSION@

bin/php8.4.20/bearsampp.conf


6. bin/php8.5.5/bearsampp.conf ⚙️ Configuration changes +9/-0

PHP 8.5.5 Bearsampp configuration file

• Created configuration file for PHP 8.5.5 with version identifier
• Defined CLI executables: php.exe and php-win.exe
• Specified Apache 2.4 module: php8apache2_4.dll
• Set bundle release placeholder @RELEASE_VERSION@

bin/php8.5.5/bearsampp.conf


7. bin/php8.4.20/deps.properties ⚙️ Configuration changes +1/-0

PHP 8.4.20 dependencies configuration

• Created dependencies properties file for PHP 8.4.20
• Configured ImageMagick 7.1.2-19 dependency from 2026.4.18 release
• Points to portable Q16 HDRI x64 version

bin/php8.4.20/deps.properties


8. bin/php8.5.5/deps.properties ⚙️ Configuration changes +1/-0

PHP 8.5.5 dependencies configuration

• Created dependencies properties file for PHP 8.5.5
• Configured ImageMagick 7.1.2-19 dependency from 2026.4.18 release
• Points to portable Q16 HDRI x64 version

bin/php8.5.5/deps.properties


9. build.properties ⚙️ Configuration changes +1/-1

Update bundle release version

• Updated bundle release version from 2026.3.13 to 2026.4.18

build.properties


10. bin/php8.4.20/deps/README.txt 📝 Documentation +2/-0

PHP 8.4.20 dependencies directory documentation

• Created README file documenting the purpose of the deps directory
• Explains that dependencies like PECL deps should be placed here
• Notes that dependencies will be injected into PATH environment variable

bin/php8.4.20/deps/README.txt


11. bin/php8.5.5/deps/README.txt 📝 Documentation +2/-0

PHP 8.5.5 dependencies directory documentation

• Created README file documenting the purpose of the deps directory
• Explains that dependencies like PECL deps should be placed here
• Notes that dependencies will be injected into PATH environment variable

bin/php8.5.5/deps/README.txt


12. bin/php8.4.20/pear.properties ⚙️ Configuration changes +1/-0

PHP 8.4.20 PEAR configuration

• Created PEAR properties file for PHP 8.4.20
• Configured PEAR download from 2025.12.7 release
• References pearweb_phars version 1.10.24

bin/php8.4.20/pear.properties


13. bin/php8.5.5/pear.properties ⚙️ Configuration changes +1/-0

PHP 8.5.5 PEAR configuration

• Created PEAR properties file for PHP 8.5.5
• Configured PEAR download from 2025.12.7 release
• References pearweb_phars version 1.10.24

bin/php8.5.5/pear.properties


14. bin/php8.5.5/php.ini ⚙️ Configuration changes +1920/-0

PHP 8.5.5 configuration file with extensions and paths

• Added comprehensive PHP 8.5.5 configuration file with 1920 lines of settings
• Configured core PHP directives including error reporting, display settings, and resource limits
• Enabled essential extensions (curl, fileinfo, gd, gettext, intl, mbstring, mysqli, openssl,
 pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium)
• Set up paths for extensions directory, include path, session storage, and temporary directories
 with ~BEARSAMPP_LIN_PATH~ placeholders
• Configured xdebug extension with debug mode, trigger-based activation, and cachegrind output
 settings

bin/php8.5.5/php.ini


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Apr 19, 2026

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. CI skips new versions 🐞 Bug ☼ Reliability
Description
The repo’s PHP Extension Testing workflow filters detected /bin versions against
releases.properties, so the newly added 8.4.20/8.5.5 configs will be skipped and won’t be tested.
This also means the workflow’s download phase would fail if these versions were forced into the
matrix without adding releases.properties entries.
Code

bin/php8.5.5/bearsampp.conf[1]

+phpVersion = "8.5.5"
Evidence
The PR introduces new version folders (e.g., phpVersion = "8.5.5"), but releases.properties
currently has no entries for 8.4.20 or 8.5.5. The CI workflow explicitly skips any versions not
found in releases.properties and later throws if the version is missing when attempting to download
the PHP archive.

.github/workflows/php-extension-test.yml[82-97]
.github/workflows/php-extension-test.yml[230-235]
releases.properties[1-12]
bin/php8.5.5/bearsampp.conf[1-2]
bin/php8.4.20/bearsampp.conf[1-2]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
New PHP versions (8.4.20, 8.5.5) are added under `bin/`, but the CI workflow only tests versions present in `releases.properties`, so these versions will be skipped (and cannot be downloaded in the test job).

### Issue Context
The workflow validates versions against `releases.properties` and uses it to obtain the download URL.

### Fix Focus Areas
- releases.properties[1-200]
- .github/workflows/php-extension-test.yml[41-100]

### Expected fix
- Add `8.4.20 = <url>` and `8.5.5 = <url>` entries to `releases.properties` (once corresponding artifacts exist), **or** adjust the workflow logic so PRs that add new `bin/php<ver>/` folders can be tested without requiring the version to already exist in `releases.properties` from `origin/main`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Imagemagick key case mismatch 🐞 Bug ⚙ Maintainability
Description
The new deps.properties files use the key "Imagemagick", but the build’s update automation only
looks for and updates a lowercase "imagemagick" property key. As a result, running the update task
will not update ImageMagick URLs for these new versions, leaving them stale.
Code

bin/php8.4.20/deps.properties[1]

+Imagemagick = https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/ImageMagick-7.1.2-19-portable-Q16-HDRI-x64.7z
Evidence
deps.properties uses a capitalized key ("Imagemagick"), while build.gradle’s update logic populates
updates['imagemagick'] and calls updatePropertiesFile(...) using the lowercase key.
updatePropertiesFile matches the key case-sensitively, so it will never match and update
"Imagemagick".

bin/php8.4.20/deps.properties[1-1]
bin/php8.5.5/deps.properties[1-1]
build.gradle[946-953]
build.gradle[1019-1036]
build.gradle[1061-1068]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`deps.properties` uses `Imagemagick` (capital I), but the build update task updates only the lowercase `imagemagick` key and matches keys case-sensitively, so ImageMagick URL updates won’t apply.

### Issue Context
This impacts the repo’s automation for refreshing dependency URLs (the update task). Runtime dependency processing is case-insensitive, but the updater is not.

### Fix Focus Areas
- bin/php8.4.20/deps.properties[1-1]
- bin/php8.5.5/deps.properties[1-1]
- build.gradle[1019-1068]

### Expected fix
Choose one:
1) Change the key in the new `deps.properties` files to `imagemagick=...` (lowercase) to match the updater, **and** consider aligning other versions for consistency.
2) Update the build updater to handle both `imagemagick` and `Imagemagick` keys (e.g., case-insensitive key matching or updating both keys if present).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 19, 2026

🐘 PHP Module Tests - Results

Test Date: 2026-04-19 03:52:24 UTC
Status: ✅ All tests passed

📊 Test Results by Version

PHP 8.5.3

win10-amd
win10-intel
win11-amd
win11-intel

PHP 8.5.2

win10-amd
win10-intel
win11-amd
win11-intel

PHP 8.5.0

win10-amd
win10-intel
win11-amd
win11-intel

PHP 8.4.18

win10-amd
win10-intel
win11-amd
win11-intel

PHP 8.4.17

win10-amd
win10-intel
win11-amd
win11-intel

Results: 20 of 20 tests completed

All tests passed successfully! ✨


📋 Test Phases

Each version is tested through the following phases:

  • Phase 1: Basic PHP Validation (Download, Extract, Verify Executable)
  • Phase 2: Extension Validation (Download, Architecture Check, Loading Test)
  • Phase 3: Dependency Validation (Download Dependencies, Test with Dependencies)
  • Phase 4: Functional Testing (Test Extension Functionality)

Check artifacts for detailed logs.

Remove spaces around equals signs in exts.properties and update memcache and xdebug extension URLs to use php-2026.3.4 release
@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Apr 19, 2026

PR Reviewer Guide 🔍

(Review updated until commit 9b48472)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 No relevant tests
🔒 Security concerns

Supply chain / insecure defaults:
The PR introduces multiple remote binary download URLs in exts.properties, deps.properties, and pear.properties without any integrity pinning (hashes/signatures) and also documents PATH injection in bin/php8.4.20/deps/README.txt / bin/php8.5.5/deps/README.txt (“injected into the PATH environment variable”), which increases the impact of any compromised dependency. Additionally, bin/php8.4.20/php.ini enables display_errors, display_startup_errors, and expose_php, which can leak information if used outside a strictly local dev environment. Please validate threat model and consider adding checksum verification and safer defaults.

⚡ Recommended focus areas for review

Security Defaults

The shipped php.ini appears to be development-oriented (e.g., display_errors/display_startup_errors enabled, expose_php enabled, and zend.assertions enabled). Please validate that this is intended for the bundle’s default runtime profile, or consider providing a production-safe default (or clearly separating dev vs prod configs).

expose_php = On

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 60

; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time = 90

; Maximum input variable nesting level
; http://php.net/max-input-nesting-level
;max_input_nesting_level = 64

; How many GET/POST/COOKIE input variables may be accepted
;max_input_vars = 1000

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit = 512M

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; This directive informs PHP of which errors, warnings and notices you would like
; it to take action for. The recommended way of setting values for this
; directive is through the use of the error level constants and bitwise
; operators. The error level constants are below here for convenience as well as
; some common settings and their meanings.
; By default, PHP is set to take action on all errors, notices and warnings EXCEPT
; those related to E_NOTICE and E_STRICT, which together cover best practices and
; recommended coding standards in PHP. For performance reasons, this is the
; recommend error reporting setting. Your production server shouldn't be wasting
; resources complaining about best practices and coding standards. That's what
; development servers and development settings are for.
; Note: The php.ini-development file has this setting as E_ALL. This
; means it pretty much reports everything which is exactly what you want during
; development and early testing.
;
; Error Level Constants:
; E_ALL             - All errors and warnings (includes E_STRICT as of PHP 5.4.0)
; E_ERROR           - fatal run-time errors
; E_RECOVERABLE_ERROR  - almost fatal run-time errors
; E_WARNING         - run-time warnings (non-fatal errors)
; E_PARSE           - compile-time parse errors
; E_NOTICE          - run-time notices (these are warnings which often result
;     from a bug in your code, but it's possible that it was
;     intentional (e.g., using an uninitialized variable and
;     relying on the fact it is automatically initialized to an
;     empty string)
; E_STRICT          - run-time notices, enable to have PHP suggest changes
;     to your code which will ensure the best interoperability
;     and forward compatibility of your code
; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
;     initial startup
; E_COMPILE_ERROR   - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR      - user-generated error message
; E_USER_WARNING    - user-generated warning message
; E_USER_NOTICE     - user-generated notice message
; E_DEPRECATED      - warn about code that will not work in future versions
;     of PHP
; E_USER_DEPRECATED - user-generated deprecation warnings
;
; Common Values:
;   E_ALL (Show all errors, warnings and notices including coding standards.)
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
; Default Value: E_ALL
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; For production environments, we recommend logging errors rather than
; sending them to STDOUT.
; Possible Values:
;   Off = Do not display any errors
;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
;   On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = On

; The display of errors which occur during PHP's startup sequence are handled
; separately from display_errors. We strongly recommend you set this to 'off'
; for production servers to avoid leaking configuration details.
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-startup-errors
display_startup_errors = On

; Besides displaying errors, PHP can also log errors to locations such as a
; server-specific log, STDERR, or a location specified by the error_log
; directive found below. While errors should not be displayed on productions
; servers they should still be monitored and logging is a great way to do that.
; Default Value: Off
; Development Value: On
; Production Value: On
; http://php.net/log-errors
log_errors = On

; Set maximum length of log_errors. In error_log information about the source is
; added. The default is 1024 and 0 allows to not apply any maximum length at all.
; http://php.net/log-errors-max-len
log_errors_max_len = 1024

; Do not log repeated messages. Repeated errors must occur in same file on same
; line unless ignore_repeated_source is set true.
; http://php.net/ignore-repeated-errors
ignore_repeated_errors = Off

; Ignore source of message when ignoring repeated messages. When this setting
; is On you will not log errors with repeated messages from different files or
; source lines.
; http://php.net/ignore-repeated-source
ignore_repeated_source = Off

; If this parameter is set to Off, then memory leaks will not be shown (on
; stdout or in the log). This is only effective in a debug compile, and if
; error reporting includes E_WARNING in the allowed list
; http://php.net/report-memleaks
report_memleaks = On

; This setting is off by default.
;report_zend_debug = 0
Extension Loading

xdebug is configured to load via zend_extension = "xdebug" with debug mode enabled; on Windows this may require a fully qualified DLL path or correct naming in the extension dir, and enabling it by default can significantly impact performance. Also, opcache is referenced via a DLL path but opcache.enable is set to disabled—please confirm the intended default behavior and loading consistency.

zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.20/ext/php_opcache.dll"

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=0

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=0

; The OPcache shared memory storage size.
;opcache.memory_consumption=128

; The amount of memory for interned strings in Mbytes.
;opcache.interned_strings_buffer=8

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
;opcache.max_accelerated_files=10000

; The maximum percentage of "wasted" memory until a restart is scheduled.
;opcache.max_wasted_percentage=5

; When this directive is enabled, the OPcache appends the current working
; directory to the script key, thus eliminating possible collisions between
; files with the same name (basename). Disabling the directive improves
; performance, but may break existing applications.
;opcache.use_cwd=1

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
;opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
;opcache.revalidate_freq=2

; Enables or disables file search in include_path optimization
;opcache.revalidate_path=0

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
;opcache.save_comments=1

; If enabled, compilation warnings (including notices and deprecations) will
; be recorded and replayed each time a file is included. Otherwise, compilation
; warnings will only be emitted when the file is first cached.
;opcache.record_warnings=0

; Allow file existence override (file_exists, etc.) performance feature.
;opcache.enable_file_override=0

; A bitmask, where each bit enables or disables the appropriate OPcache
; passes
;opcache.optimization_level=0x7FFFBFFF

;opcache.dups_fix=0

; The location of the OPcache blacklist file (wildcards allowed).
; Each OPcache blacklist file is a text file that holds the names of files
; that should not be accelerated. The file format is to add each filename
; to a new line. The filename may be a full path or just a file prefix
; (i.e., /var/www/x  blacklists all the files and directories in /var/www
; that start with 'x'). Line starting with a ; are ignored (comments).
;opcache.blacklist_filename=

; Allows exclusion of large files from being cached. By default all files
; are cached.
;opcache.max_file_size=0

; Check the cache checksum each N requests.
; The default value of "0" means that the checks are disabled.
;opcache.consistency_checks=0

; How long to wait (in seconds) for a scheduled restart to begin if the cache
; is not being accessed.
;opcache.force_restart_timeout=180

; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=

; All OPcache errors go to the Web server log.
; By default, only fatal errors (level 0) or errors (level 1) are logged.
; You can also enable warnings (level 2), info messages (level 3) or
; debug messages (level 4).
;opcache.log_verbosity_level=1

; Preferred Shared Memory back-end. Leave empty and let the system decide.
;opcache.preferred_memory_model=

; Protect the shared memory from unexpected writing during script execution.
; Useful for internal debugging only.
;opcache.protect_memory=0

; Allows calling OPcache API functions only from PHP scripts which path is
; started from specified string. The default "" means no restriction
;opcache.restrict_api=

; Mapping base of shared memory segments (for Windows only). All the PHP
; processes have to map shared memory into the same address space. This
; directive allows to manually fix the "Unable to reattach to base address"
; errors.
;opcache.mmap_base=

; Facilitates multiple OPcache instances per user (for Windows only). All PHP
; processes with the same cache ID and user share an OPcache instance.
;opcache.cache_id=

; Enables and sets the second level cache directory.
; It should improve performance when SHM memory is full, at server restart or
; SHM reset. The default "" disables file based caching.
;opcache.file_cache=

; Enables or disables opcode caching in shared memory.
;opcache.file_cache_only=0

; Enables or disables checksum validation when script loaded from file cache.
;opcache.file_cache_consistency_checks=1

; Implies opcache.file_cache_only=1 for a certain process that failed to
; reattach to the shared memory (for Windows only). Explicitly enabled file
; cache is required.
;opcache.file_cache_fallback=1

; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration.
;opcache.huge_code_pages=0

; Validate cached file permissions.
;opcache.validate_permission=0

; Prevent name collisions in chroot'ed environment.
;opcache.validate_root=0

; If specified, it produces opcode dumps for debugging different stages of
; optimizations.
;opcache.opt_debug_level=0

; Specifies a PHP script that is going to be compiled and executed at server
; start-up.
; http://php.net/opcache.preload
;opcache.preload=

; Preloading code as root is not allowed for security reasons. This directive
; facilitates to let the preloading to be run as another user.
; http://php.net/opcache.preload_user
;opcache.preload_user=

; Prevents caching files that are less than this number of seconds old. It
; protects from caching of incompletely updated files. In case all file updates
; on your site are atomic, you may increase performance by setting it to "0".
;opcache.file_update_protection=2

; Absolute path used to store shared lockfiles (for *nix only).
;opcache.lockfile_path=/tmp

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =

[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
;openssl.cafile=

; If openssl.cafile is not specified or if the CA file is not found, the
; directory pointed to by openssl.capath is searched for a suitable
; certificate. This value must be a correctly hashed certificate directory.
; Most users should not specify a value for this directive as PHP will
; attempt to use the OS-managed cert stores in its absence. If specified,
; this value may still be overridden on a per-stream basis via the "capath"
; SSL stream context option.
;openssl.capath=

[ffi]
; FFI API restriction. Possible values:
; "preload" - enabled in CLI scripts and preloaded files (default)
; "false"   - always disabled
; "true"    - always enabled
;ffi.enable=preload

; List of headers files to preload, wildcard patterns allowed.
;ffi.preload=

[xdebug]
zend_extension = "xdebug"
xdebug.mode = debug
xdebug.start_with_request = trigger
xdebug.output_name = cachegrind.out.%t.%p
xdebug.output_dir = "~BEARSAMPP_LIN_PATH~/tmp/cachegrind"
xdebug.var_display_max_children = "1024"
xdebug.var_display_max_depth = "8192"
xdebug.var_display_max_data = "32768"
xdebug.max_nesting_level = "250"
URL Consistency

Extension download entries show inconsistent formatting and release versions (e.g., zip points to an older php-2026.3.13 release while others use php-2026.4.18, and there are mixed key formatting styles like zip = ... vs memcache=...). Please confirm the expected parser behavior and align versions/formatting to avoid missed or incorrect downloads.

imagick=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_imagick-3.8.1-8.5-ts-vs17-x64.zip
memcache=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_memcache-8.2-8.5-ts-vs17-x64.zip
xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_xdebug-3.5.1-8.5-ts-vs17-x86_64.dll
zip = https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.13/php_zip-1.22.8-8.5-ts-vs17-x64.zip

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented Apr 19, 2026

PR Code Suggestions ✨

Latest suggestions up to 9b48472

CategorySuggestion                                                                                                                                    Impact
Security
Make debugging extension opt-in

Comment out or disable the xdebug extension by default to avoid unintentional
performance hits.

bin/php8.4.20/php.ini [1916-1921]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
+;zend_extension = "xdebug"
+xdebug.mode = off
 xdebug.start_with_request = trigger
 xdebug.output_name = cachegrind.out.%t.%p
 xdebug.output_dir = "~BEARSAMPP_LIN_PATH~/tmp/cachegrind"
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: Disabling xdebug by default is a practical way to prevent performance degradation in a development environment, making the tool correctly opt-in.

Low
Possible issue
Fix malformed properties key

Remove trailing spaces around the = sign for the zip property.

bin/php8.5.5/exts.properties [1-4]

 imagick=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_imagick-3.8.1-8.5-ts-vs17-x64.zip
 memcache=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_memcache-8.2-8.5-ts-vs17-x64.zip
 xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_xdebug-3.5.1-8.5-ts-vs17-x86_64.dll
-zip = https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.13/php_zip-1.22.8-8.5-ts-vs17-x64.zip
+zip=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.13/php_zip-1.22.8-8.5-ts-vs17-x64.zip
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: Removing spaces around the assignment operator ensures consistency and prevents potential parsing issues depending on the properties parser implementation.

Low
Normalize properties key formatting

Remove spaces around the = sign for the imagick and zip properties to maintain a
consistent format.

bin/php8.4.20/exts.properties [1-4]

-imagick = https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_imagick-3.7.0-8.4-ts-vs17-x64.zip
+imagick=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_imagick-3.7.0-8.4-ts-vs17-x64.zip
 memcache=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_memcache-8.2-8.4-ts-vs17-x64.zip
 xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_xdebug-3.5.1-8.4-ts-vs17-x86_64.dll
-zip = https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_zip-1.22.8-8.4-ts-vs17-x64.zip
+zip=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.4.18/php_zip-1.22.8-8.4-ts-vs17-x64.zip
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: Normalizing the key-value formatting by removing spaces around the = sign improves consistency and minimizes the risk of parser-specific bugs.

Low
  • More

Previous suggestions

Suggestions up to commit eea63fb
CategorySuggestion                                                                                                                                    Impact
Security
Harden CGI path handling

Set cgi.fix_pathinfo to 0 to enhance security.

bin/php8.4.20/php.ini [805]

-cgi.fix_pathinfo = 1
+cgi.fix_pathinfo = 0
Suggestion importance[1-10]: 8

__

Why: Disabling cgi.fix_pathinfo is a highly recommended security measure to prevent unintended script execution in CGI/FastCGI environments.

Medium
Strengthen session cookie security

Enable session.use_strict_mode, session.cookie_httponly, and set
session.cookie_samesite to Lax to strengthen session security.

bin/php8.4.20/php.ini [1346-1390]

-session.use_strict_mode = 0
+session.use_strict_mode = 1
 
 ; http://php.net/session.cookie-httponly
-session.cookie_httponly =
+session.cookie_httponly = 1
 
 ; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF)
 ; Current valid values are "Lax" or "Strict"
 ; https://tools.ietf.org/html/draft-west-first-party-cookies-07
-session.cookie_samesite =
+session.cookie_samesite = Lax
Suggestion importance[1-10]: 8

__

Why: Enabling strict session mode and secure cookie flags significantly improves application security by mitigating session fixation and CSRF vulnerabilities.

Medium
Disable PHP version exposure

Disable the expose_php directive to avoid leaking PHP version details.

bin/php8.4.20/php.ini [392]

-expose_php = On
+expose_php = Off
Suggestion importance[1-10]: 7

__

Why: Disabling expose_php prevents the server from broadcasting its PHP version, reducing the attack surface by hiding system details.

Medium
Possible issue
Normalize properties file formatting

Normalize the key-value assignment format by removing extra spaces around the
equals sign.

bin/php8.5.5/exts.properties [1-4]

 imagick=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_imagick-3.8.1-8.5-ts-vs17-x64.zip
 memcache=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_memcache-8.2-8.5-ts-vs17-x64.zip
 xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.4/php_xdebug-3.5.1-8.5-ts-vs17-x86_64.dll
-zip = https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.13/php_zip-1.22.8-8.5-ts-vs17-x64.zip
+zip=https://github.com/Bearsampp/modules-untouched/releases/download/php-2026.3.13/php_zip-1.22.8-8.5-ts-vs17-x64.zip
Suggestion importance[1-10]: 5

__

Why: Standardizing the format prevents potential parsing issues if the file is read by naive scripts that do not automatically trim whitespace.

Low

@@ -0,0 +1,9 @@
phpVersion = "8.5.5"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. Ci skips new versions 🐞 Bug ☼ Reliability

The repo’s PHP Extension Testing workflow filters detected /bin versions against
releases.properties, so the newly added 8.4.20/8.5.5 configs will be skipped and won’t be tested.
This also means the workflow’s download phase would fail if these versions were forced into the
matrix without adding releases.properties entries.
Agent Prompt
### Issue description
New PHP versions (8.4.20, 8.5.5) are added under `bin/`, but the CI workflow only tests versions present in `releases.properties`, so these versions will be skipped (and cannot be downloaded in the test job).

### Issue Context
The workflow validates versions against `releases.properties` and uses it to obtain the download URL.

### Fix Focus Areas
- releases.properties[1-200]
- .github/workflows/php-extension-test.yml[41-100]

### Expected fix
- Add `8.4.20 = <url>` and `8.5.5 = <url>` entries to `releases.properties` (once corresponding artifacts exist), **or** adjust the workflow logic so PRs that add new `bin/php<ver>/` folders can be tested without requiring the version to already exist in `releases.properties` from `origin/main`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Remove spaces around equals signs in exts.properties and update memcache and xdebug extension URLs to use php-2026.3.4 release
@jwaisner jwaisner merged commit f05d048 into main Apr 24, 2026
24 checks passed
@jwaisner jwaisner deleted the April branch April 24, 2026 03:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement ✨ Improve program

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants