Skip to content

Conversation

@N6REJ
Copy link
Collaborator

@N6REJ N6REJ commented Dec 7, 2025

User description

modifying files is no longer needed. Simply copy a folder from the nearest version and rename it to the current version.
all files should be updated upon build. You can test this behavior by deleting the urls that currently exist in those files and then to etst without releasing run "Gradle fetch"
gradle relase does this automatically
if a modules-untouched is missing some files, it will continue to use the existing files that were listed.


PR Type

Enhancement, Documentation


Description

  • Added support for three new PHP versions: 8.3.28, 8.4.15, and 8.5.0 with complete configuration files

  • Created comprehensive configuration files for each new PHP version including php.ini, bearsampp.conf, exts.properties, deps.properties, and pear.properties

  • Updated xdebug extension to version 3.5.0alpha2 for PHP 8.4.14

  • Updated bundle release version from 2025.10.31 to 2025.12.07 in build.properties

  • Enhanced README.md with documentation for the automatic fetch task that updates dependencies during release builds

  • Documented the process for creating new PHP version builds by copying configuration from the nearest version

  • Reformatted property files for consistency by removing spaces around equals signs in exts.properties and deps.properties

  • All new PHP versions configured with ImageMagick 7.1.2-8 and xdebug 3.5.0 extensions from php-2025.12.7 release


Diagram Walkthrough

flowchart LR
  A["New PHP Versions<br/>8.3.28, 8.4.15, 8.5.0"] -- "Configuration Files" --> B["php.ini<br/>bearsampp.conf"]
  A -- "Extension Config" --> C["exts.properties<br/>deps.properties<br/>pear.properties"]
  D["Fetch Task"] -- "Automatic Updates" --> E["Dependencies<br/>Extensions"]
  F["README.md"] -- "Documents" --> D
  G["build.properties"] -- "Version Update" --> H["2025.12.07"]
Loading

File Walkthrough

Relevant files
Configuration changes
16 files
php.ini
PHP 8.3.28 configuration file with extensions and settings

bin/php8.3.28/php.ini

  • Added complete PHP 8.3.28 configuration file with 1959 lines of
    settings
  • Configured PHP extensions including curl, fileinfo, gd, gettext, intl,
    imap, mbstring, mysqli, openssl, pdo_mysql, pdo_pgsql, pdo_sqlite,
    pgsql, sodium
  • Set memory limit to 512M, post_max_size to 32M, upload_max_filesize to
    32M
  • Configured error handling with display_errors and log_errors enabled
  • Set up session handling, date timezone (UTC), and xdebug extension
    with debug mode
  • Configured paths using ~BEARSAMPP_LIN_PATH~ placeholder for dynamic
    path resolution
+1959/-0
exts.properties
Extension properties for PHP 8.3.28                                           

bin/php8.3.28/exts.properties

  • Created new extension properties file for PHP 8.3.28
  • Configured imagick 3.8.0, memcache, and xdebug 3.5.0 extensions
  • All extensions point to php-2025.12.7 release from modules-untouched
+3/-0     
exts.properties
Extension properties for PHP 8.4.15                                           

bin/php8.4.15/exts.properties

  • Created new extension properties file for PHP 8.4.15
  • Configured imagick 3.8.0, memcache, and xdebug 3.5.0 extensions
  • All extensions point to php-2025.12.7 release from modules-untouched
+3/-0     
exts.properties
Extension properties for PHP 8.5.0                                             

bin/php8.5.0/exts.properties

  • Created new extension properties file for PHP 8.5.0
  • Configured imagick 3.8.0, memcache, and xdebug 3.5.0 extensions
  • All extensions point to php-2025.12.7 release from modules-untouched
+3/-0     
bearsampp.conf
Bearsampp configuration for PHP 8.3.28                                     

bin/php8.3.28/bearsampp.conf

  • Created new configuration file for PHP 8.3.28
  • Set phpVersion to "8.3.28"
  • Configured CLI executables, php.ini path, and PEAR executable
  • Set Apache 2.4 module name to php8apache2_4.dll
+9/-0     
bearsampp.conf
Bearsampp configuration for PHP 8.4.15                                     

bin/php8.4.15/bearsampp.conf

  • Created new configuration file for PHP 8.4.15
  • Set phpVersion to "8.4.15"
  • Configured CLI executables, php.ini path, and PEAR executable
  • Set Apache 2.4 module name to php8apache2_4.dll
+9/-0     
bearsampp.conf
Bearsampp configuration for PHP 8.5.0                                       

bin/php8.5.0/bearsampp.conf

  • Created new configuration file for PHP 8.5.0
  • Set phpVersion to "8.5.0"
  • Configured CLI executables, php.ini path, and PEAR executable
  • Set Apache 2.4 module name to php8apache2_4.dll
+9/-0     
deps.properties
Dependency properties for PHP 8.3.28                                         

bin/php8.3.28/deps.properties

  • Created new dependency properties file for PHP 8.3.28
  • Configured ImageMagick 7.1.2-8 portable Q16-HDRI x64 from
    php-2025.12.7 release
+1/-0     
deps.properties
Dependency properties for PHP 8.4.15                                         

bin/php8.4.15/deps.properties

  • Created new dependency properties file for PHP 8.4.15
  • Configured ImageMagick 7.1.2-8 portable Q16-HDRI x64 from
    php-2025.12.7 release
+1/-0     
deps.properties
Dependency properties for PHP 8.5.0                                           

bin/php8.5.0/deps.properties

  • Created new dependency properties file for PHP 8.5.0
  • Configured ImageMagick 7.1.2-8 portable Q16-HDRI x64 from
    php-2025.12.7 release
+1/-0     
pear.properties
PEAR properties for PHP 8.3.28                                                     

bin/php8.3.28/pear.properties

  • Created new PEAR properties file for PHP 8.3.28
  • Configured PEAR download URL pointing to pearweb_phars-1.10.24.tgz
    from php-2025.12.7 release
+1/-0     
pear.properties
PEAR properties for PHP 8.4.15                                                     

bin/php8.4.15/pear.properties

  • Created new PEAR properties file for PHP 8.4.15
  • Configured PEAR download URL pointing to pearweb_phars-1.10.24.tgz
    from php-2025.12.7 release
+1/-0     
pear.properties
PEAR properties for PHP 8.5.0                                                       

bin/php8.5.0/pear.properties

  • Created new PEAR properties file for PHP 8.5.0
  • Configured PEAR download URL pointing to pearweb_phars-1.10.24.tgz
    from php-2025.12.7 release
+1/-0     
build.properties
Updated bundle release version to 2025.12.07                         

build.properties

  • Updated bundle.release version from 2025.10.31 to 2025.12.07
  • Reflects the latest release date for the build bundle
+1/-1     
php.ini
PHP 8.4.15 configuration file initialization                         

bin/php8.4.15/php.ini

  • Added complete PHP 8.4.15 configuration file with 1925 lines of
    settings
  • Configured core PHP directives including memory limits (memory_limit =
    512M), execution time (max_execution_time = 60), and error reporting
    (error_reporting = E_ALL)
  • Set up extension directory path (extension_dir =
    "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext") and enabled multiple PHP
    extensions (curl, fileinfo, gd, intl, mbstring, mysqli, openssl,
    pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium)
  • Configured session handling, file uploads, paths, and
    development-focused settings including xdebug extension with debug
    mode enabled
+1925/-0
php.ini
Add PHP 8.5.0 initialization configuration file                   

bin/php8.5.0/php.ini

  • Added a complete PHP 8.5.0 configuration file with 1925 lines of
    settings
  • Configured core PHP directives including memory limits, error
    reporting, and execution timeouts
  • Enabled essential PHP extensions (curl, fileinfo, gd, intl, mbstring,
    mysqli, openssl, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sodium)
  • Set up paths and directories with ~BEARSAMPP_LIN_PATH~ placeholders
    for dynamic configuration
  • Configured session handling, file uploads, and OPcache settings with
    xdebug extension support
+1925/-0
Documentation
4 files
README.md
Documentation for PHP version builds and fetch task           

README.md

  • Added comprehensive documentation for creating new PHP version builds
  • Documented the automatic fetch task that updates dependencies during
    release builds
  • Added step-by-step guide for copying configuration files and building
    new PHP versions
  • Explained how the fetch task integrates with modules-untouched
    repository and queries GitHub API
  • Added fetch task to the task reference table
  • Clarified that release task automatically runs fetch for dependency
    updates
+68/-1   
README.txt
Dependencies directory README for PHP 8.3.28                         

bin/php8.3.28/deps/README.txt

  • Created README file for PHP 8.3.28 dependencies directory
  • Explains purpose of directory for PECL dependencies
  • Documents that dependencies are injected into PATH environment
    variable
+2/-0     
README.txt
Dependencies directory README for PHP 8.4.15                         

bin/php8.4.15/deps/README.txt

  • Created README file for PHP 8.4.15 dependencies directory
  • Explains purpose of directory for PECL dependencies
  • Documents that dependencies are injected into PATH environment
    variable
+2/-0     
README.txt
Dependencies directory README for PHP 8.5.0                           

bin/php8.5.0/deps/README.txt

  • Created README file for PHP 8.5.0 dependencies directory
  • Explains purpose of directory for PECL dependencies
  • Documents that dependencies are injected into PATH environment
    variable
+2/-0     
Formatting
2 files
exts.properties
Formatting consistency for extension properties                   

bin/php8.4.13/exts.properties

  • Reformatted property file by removing spaces around equals signs
  • Changed from key = value format to key=value format for consistency
  • URLs for imagick, memcache, and xdebug extensions remain unchanged
+3/-3     
deps.properties
Formatting consistency for dependency properties                 

bin/php8.4.14/deps.properties

  • Reformatted property file by removing spaces around equals sign
  • Changed from key = value format to key=value format for consistency
  • ImageMagick URL remains unchanged
+1/-1     
Enhancement
1 files
exts.properties
Updated xdebug extension to 3.5.0alpha2 for PHP 8.4.14     

bin/php8.4.14/exts.properties

  • Updated xdebug URL from php-2025.9.24 release to php-2025.10.31
    release
  • Changed xdebug version from 3.4.5 to 3.5.0alpha2
  • Reformatted xdebug property to remove spaces around equals sign
+1/-1     
Additional files
70 files
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   
bearsampp.conf [link]   
deps.properties [link]   
README.txt [link]   
exts.properties [link]   
pear.properties [link]   
php.ini [link]   
php.ini.ber [link]   

@qodo-code-review
Copy link

qodo-code-review bot commented Dec 7, 2025

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🔴
Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status:
Verbose errors: The configuration explicitly enables display_errors=On and display_startup_errors=On which
risks exposing internal details to end users contrary to secure error handling guidance.

Referred Code
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

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status:
Error visibility: The configuration enables error display (display_errors=On, display_startup_errors=On) but
does not configure structured or secured audit logging of critical actions, which may not
meet audit trail requirements.

Referred Code
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

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status:
Generic keys: Property keys like phpConf and phpPearExe are terse and may lack clarity without
surrounding context, though they could be established conventions in this codebase.

Referred Code
phpConf = "php.ini"
phpPearExe = "pear/pear.bat"

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status:
Dev error config: Enabling display_errors and display_startup_errors suggests development settings and lacks
safeguards or messaging strategy for production error handling within these new
configurations.

Referred Code
; 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

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status:
Log config gaps: While log_errors=On is set, no structured logging format or destination is enforced and
error_log is commented, requiring verification that logs are securely collected without
sensitive data exposure.

Referred Code
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



 ... (clipped 57 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
Liberal settings: Settings like allow_url_fopen=On and file_uploads=On with large post/upload limits may be
acceptable but warrant confirmation of upstream input validation and secure handling not
visible in this diff.

Referred Code
; http://php.net/allow-url-fopen
allow_url_fopen = On

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
; http://php.net/allow-url-include
allow_url_include = Off

; Define the anonymous ftp password (your email address). PHP's default setting
; for this is empty.
; http://php.net/from
;from="[email protected]"

; Define the User-Agent string. PHP's default setting for this is empty.
; http://php.net/user-agent
;user_agent="PHP"

; Default timeout for socket based streams (seconds)
; http://php.net/default-socket-timeout
default_socket_timeout = 90

Learn more about managing compliance generic rules or creating your own custom rules

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-code-review
Copy link

qodo-code-review bot commented Dec 7, 2025

PR Code Suggestions ✨

Latest suggestions up to d1473df

CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix invalid OPcache module path

Correct the OPcache zend_extension path to use the .so file for Linux instead of
the Windows .dll to prevent startup failures.

bin/php8.3.28/php.ini [1761-1768]

-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
+; On non-Windows platforms use .so, or remove if not available
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/opcache.so"
 
 [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

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a critical cross-platform configuration error where a Windows .dll is specified for a Linux path, which would cause PHP to fail on startup.

Medium
Correct and disable Xdebug loading

Specify the full path for the Xdebug extension and set xdebug.mode to off by
default to avoid performance degradation and loading issues.

bin/php8.3.28/php.ini [1950-1953]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
-xdebug.start_with_request = trigger
+; Provide absolute path to xdebug extension or disable by default
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/xdebug.so"
+xdebug.mode = off
+xdebug.start_with_request = default

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 7

__

Why: The suggestion correctly points out that loading xdebug without a full path is fragile and that having it enabled by default is a significant performance issue for production.

Medium
General
Enable OPcache for performance

Enable OPcache by setting opcache.enable=1 in php.ini to improve performance for
web server requests.

bin/php8.5.0/php.ini [1727-1734]

 zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.5.0/ext/php_opcache.dll"
 
 [opcache]
-opcache.enable=0
+opcache.enable=1
 opcache.enable_cli=0

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 7

__

Why: This is a valuable performance suggestion, as enabling OPcache significantly improves performance even in development environments without hindering the development workflow.

Medium
Security
Hide PHP signature header

Disable expose_php to hide the PHP version in HTTP headers, reducing the
server's fingerprint.

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

-expose_php = On
+expose_php = Off

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 5

__

Why: This is a valid security hardening suggestion that reduces information disclosure and applies to both development and production environments without hindering development work.

Low
Disable PHP version exposure

Disable expose_php in php.ini to avoid exposing the PHP version in headers for
security reasons.

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

-expose_php = On
+expose_php = Off

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 3

__

Why: The suggestion is valid for security hardening, but the php.ini file is explicitly for development, where the impact of exposing the PHP version is low.

Low
  • More

Previous suggestions

Suggestions up to commit 6d4489c
CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix OPcache loading and enablement

Change the OPcache extension from .dll to .so for Linux compatibility and enable
it to improve performance.

bin/php8.3.28/php.ini [1761-1768]

-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/opcache.so"
 
 [opcache]
 ; Determines if Zend OPCache is enabled
-opcache.enable=0
+opcache.enable=1
 
 ; Determines if Zend OPCache is enabled for the CLI version of PHP
 opcache.enable_cli=0
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies that a .dll file will not work on a Linux system (indicated by ~BEARSAMPP_LIN_PATH~) and that disabling OPcache (opcache.enable=0) causes a major performance degradation, making this a critical configuration fix.

High
Fix OPcache binary path

Correct the OPcache extension path to use .so for Linux instead of .dll, and
provide commented examples for both Linux and Windows to avoid loading errors.

bin/php8.4.15/php.ini [1725-1727]

 ; OPCache
 
-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/php_opcache.dll"
+; For Linux:
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/opcache.so"
 
+; For Windows:
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/php_opcache.dll"
+
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that a .dll extension for OPcache will not work on a Linux system (as implied by ~BEARSAMPP_LIN_PATH~), preventing a significant performance degradation.

Medium
General
Correct and disable Xdebug default

Correct the Xdebug configuration by using an absolute path for zend_extension
and setting xdebug.mode to off by default to ensure it loads correctly and to
avoid performance degradation.

bin/php8.5.0/php.ini [1916-1925]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
+; Use absolute path to ensure the correct binary is loaded
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.5.0/ext/php_xdebug.dll"
+; Disable by default; enable via XDEBUG_MODE or local dev ini
+xdebug.mode = off
 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"
Suggestion importance[1-10]: 9

__

Why: This is a critical suggestion that fixes a configuration error where xdebug is loaded incorrectly and improves performance by disabling it by default, which is essential for a distributable package.

High
Correct xdebug path and default mode

Specify the full path to the xdebug extension and set xdebug.mode to off by
default for better performance.

bin/php8.3.28/php.ini [1950-1959]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/xdebug.so"
+xdebug.mode = off
 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"
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly improves the robustness of loading the xdebug extension by providing a full path and changes xdebug.mode to off, which is the recommended default to avoid performance penalties when not actively debugging.

Medium
Enable configured OPcache

Enable OPcache by setting opcache.enable=1 in php.ini to improve performance and
resolve the inconsistency of loading a disabled extension.

bin/php8.5.0/php.ini [1727-1734]

 zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.5.0/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=1
 opcache.enable_cli=0
Suggestion importance[1-10]: 8

__

Why: This is a high-impact suggestion that corrects a logical inconsistency and enables OPcache, which provides a significant performance improvement.

Medium
Correct Xdebug load and default

Use an absolute path to load the Xdebug extension and set xdebug.mode to off by
default to improve reliability and performance.

bin/php8.4.15/php.ini [1916-1919]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
-xdebug.start_with_request = trigger
+; Use absolute path to the module and keep disabled by default
+; Linux:
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/xdebug.so"
+; Windows:
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/php_xdebug.dll"
+xdebug.mode = off
+xdebug.start_with_request = default
+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"
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that loading Xdebug by name can be unreliable and that having it enabled by default degrades performance, proposing a more robust and performant default configuration.

Medium
Security
Disable PHP version exposure

Disable expose_php to prevent leaking the PHP version in HTTP headers for
security reasons.

bin/php8.3.28/php.ini [397]

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

__

Why: The suggestion provides a valid security hardening recommendation by disabling expose_php, which helps prevent information leakage about the server's technology stack.

Medium
Hide PHP version exposure

Set expose_php to Off to prevent disclosing the PHP version in HTTP headers,
enhancing security.

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

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

__

Why: The suggestion correctly points out a security best practice to disable expose_php, which is a valid improvement even for a development configuration.

Low
Hide PHP version exposure

Set expose_php to Off in php.ini to prevent exposing the PHP version in HTTP
headers, enhancing security.

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

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

__

Why: The suggestion correctly recommends disabling expose_php as a security best practice, but its impact is moderate since the configuration file is for development environments.

Low
✅ Suggestions up to commit 2f23a77
CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix OPcache module filename

Replace the Windows-specific OPcache extension filename (.dll) with the correct
one for Unix-like systems (.so) to ensure OPcache loads correctly.

bin/php8.3.28/php.ini [1759-1761]

 ; OPCache
 
-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
+; Use the correct module for the target platform.
+; For Linux/macOS:
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/opcache.so"
+; For Windows (if applicable):
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies that a Windows .dll file is being referenced in a configuration file intended for a Linux environment, which would cause OPcache to fail to load.

High
Fix and enable OPcache

Correct the OPcache extension from .dll to .so for Linux compatibility and
enable it to improve performance.

bin/php8.5.0/php.ini [1727-1734]

-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.5.0/ext/php_opcache.dll"
-...
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.5.0/ext/opcache.so"
+
 [opcache]
-; Determines if Zend OPCache is enabled
-opcache.enable=0
-
-; Determines if Zend OPCache is enabled for the CLI version of PHP
+opcache.enable=1
 opcache.enable_cli=0
Suggestion importance[1-10]: 9

__

Why: This suggestion correctly identifies a critical error: the use of a .dll extension for a Linux environment (~BEARSAMPP_LIN_PATH~), which would prevent OPcache from loading. It also recommends enabling OPcache, which provides a major performance improvement.

High
Fix Xdebug file extension
Suggestion Impact:The commit updates the xdebug URL to use the .dll extension instead of .zip, matching the suggestion to ensure proper loading.

code diff:

-xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.4-ts-vs17-x86_64.zip
+xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.4-ts-vs17-x86_64.dll

Change the file extension for the xdebug URL in bin/php8.4.15/exts.properties
from .zip to .dll to ensure the extension can be loaded correctly.

bin/php8.4.15/exts.properties [3]

-xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.4-ts-vs17-x86_64.zip
+xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.4-ts-vs17-x86_64.dll
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that the xdebug extension URL points to a .zip file instead of the expected .dll, which would prevent the extension from loading.

Medium
Use correct Xdebug DLL
Suggestion Impact:The commit updated the xdebug URL from a .zip to a .dll file exactly as suggested.

code diff:

-xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.5-ts-vs17-x86_64.zip
+xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.5-ts-vs17-x86_64.dll

Change the file extension for the xdebug URL in bin/php8.5.0/exts.properties
from .zip to .dll to ensure the extension can be loaded correctly.

bin/php8.5.0/exts.properties [3]

-xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.5-ts-vs17-x86_64.zip
+xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.12.7/php_xdebug-3.5.0-8.5-ts-vs17-x86_64.dll
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that the xdebug extension URL points to a .zip file instead of the expected .dll, which would prevent the extension from loading.

Medium
Use absolute Xdebug module path

Load the Xdebug extension using an absolute path to the module file instead of
relying on extension_dir resolution to improve robustness and consistency.

bin/php8.3.28/php.ini [1950-1959]

 [xdebug]
-zend_extension = "xdebug"
+; For Linux/macOS:
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/xdebug.so"
+; For Windows (if applicable):
+; zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_xdebug.dll"
 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"
Suggestion importance[1-10]: 7

__

Why: The suggestion improves robustness by using an absolute path for the xdebug extension, which is consistent with how the opcache extension is loaded in the same file.

Medium
Security
Disable PHP version exposure

Set expose_php to Off to prevent leaking the PHP version in HTTP headers, which
is a security best practice.

bin/php8.3.28/php.ini [397]

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

__

Why: The suggestion provides a valid security hardening recommendation, but its impact is moderate as this appears to be a development configuration file, where information disclosure is less critical.

Low
Hide PHP version exposure

Disable the expose_php directive to prevent the PHP version from being exposed
in HTTP headers for security reasons.

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

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

__

Why: The suggestion provides a valid security hardening recommendation by disabling expose_php. While this is a development configuration file, making this change is still good practice and improves the security posture with no negative impact on development.

Low
Suggestions up to commit 0ec9a7c
CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix OPcache module filename

Correct the OPcache extension from .dll to .so to match the Linux path
placeholder and prevent fatal startup errors on non-Windows systems.

bin/php8.3.28/php.ini [1759-1768]

 ; OPCache
 
-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/opcache.so"
 
 [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
Suggestion importance[1-10]: 8

__

Why: This suggestion correctly identifies a critical configuration error where a Windows extension (.dll) is used with a Linux-style path, which would cause a fatal error and prevent OPcache from loading.

Medium
Use absolute Xdebug path

Correct the xdebug configuration by using an absolute path for zend_extension
instead of just the module name to ensure it loads correctly in a portable
environment.

bin/php8.5.0/php.ini [1916-1925]

 [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"
+; Use absolute path to the correct xdebug binary for this PHP build.
+; Comment this line to disable Xdebug in production builds.
+zend_extension="~BEARSAMPP_LIN_PATH~/bin/php/php8.5.0/ext/php_xdebug-3.5.0-8.5-ts-vs17-x86_64.dll"
+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"
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly points out that zend_extension = "xdebug" is incorrect and will likely fail. It proposes using an absolute path, which is consistent with how opcache is loaded in the same file, making the configuration correct and robust.

Medium
Use absolute Xdebug path

Use an absolute path for the Xdebug zend_extension and change the default
xdebug.mode from debug to develop to improve robustness and performance.

bin/php8.3.28/php.ini [1950-1959]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_xdebug.dll"
+xdebug.mode = develop
 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"
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly points out that using an absolute path for zend_extension is more robust and that xdebug.mode = develop is a better default for performance, which are both valid improvements for configuration reliability and efficiency.

Low
Configure explicit CA bundle

Explicitly configure openssl.cafile to point to a bundled CA certificate file to
ensure consistent TLS verification in portable environments.

bin/php8.4.15/php.ini [1888-1904]

 [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.cafile="~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/extras/cacert.pem"
 ;openssl.capath=
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies a potential issue with SSL certificate validation in portable environments and proposes a robust solution, though it assumes the existence of a cacert.pem file not present in the PR.

Low
Set explicit OpenSSL CA bundle

Explicitly set the openssl.cafile path in php.ini to a bundled CA certificate
file to prevent potential TLS verification failures in the portable environment.

bin/php8.5.0/php.ini [1888-1905]

 [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.
+; Use bundled CA bundle to ensure TLS verification works in portable builds.
+; Update path if cacert.pem is stored elsewhere in the package.
+openssl.cafile="~BEARSAMPP_LIN_PATH~/cacert.pem"
 ;openssl.capath=
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies that relying on the OS trust store can be unreliable in a portable application and proposes a robust solution by bundling a CA certificate file.

Low
Security
Disable PHP version exposure

Disable expose_php to prevent leaking the PHP version in HTTP headers, which is
a recommended security hardening practice.

bin/php8.3.28/php.ini [397]

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

__

Why: This is a valid security best practice to prevent information disclosure. While the php.ini file is for development, applying security hardening by default is a good habit.

Medium
Hide PHP version exposure

Disable PHP version exposure in HTTP headers for security reasons by setting
expose_php = Off.

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

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

__

Why: This is a valid security hardening suggestion that reduces the server's attack surface by not advertising the PHP version, which is a recommended best practice.

Medium
Suggestions up to commit a3880cf
CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix OPcache module path

Fix the OPcache module path by changing the hardcoded Windows .dll path to the
platform-agnostic zend_extension=opcache to ensure the extension loads correctly
across different operating systems.

bin/php8.3.28/php.ini [1759-1768]

 ; OPCache
 
-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
+; Prefer generic module name to allow PHP to resolve correct platform library
+zend_extension=opcache
 
 [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
Suggestion importance[1-10]: 9

__

Why: This is a critical correctness fix, as using a Windows .dll file with a Linux-style path placeholder will cause the OPcache extension to fail to load on any non-Windows system.

High
Fix platform-specific opcache module

Replace the Windows-specific php_opcache.dll with the correct shared object file
(opcache.so) for Unix-like systems to ensure OPCache loads correctly across
platforms.

bin/php8.4.15/php.ini [1727]

 ; OPCache
 
-zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/php_opcache.dll"
+; Use platform-appropriate extension filename:
+; On Windows:
+; zend_extension = "~BEARSAMPP_WIN_PATH~\bin\php\php8.4.15\ext\php_opcache.dll"
+; On Unix-like:
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/opcache.so"
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a critical platform incompatibility where a Windows .dll file is referenced with a Linux-style path, which would prevent OPCache from loading on Unix-like systems.

High
Use absolute Xdebug module path

Use an absolute, platform-correct path to load the Xdebug module instead of
relying on module lookup, which can be unreliable in bundled distributions.

bin/php8.4.15/php.ini [1916-1925]

 [xdebug]
-zend_extension = "xdebug"
+; On Windows:
+; zend_extension = "~BEARSAMPP_WIN_PATH~\bin\php\php8.4.15\ext\php_xdebug.dll"
+; On Unix-like:
+zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/xdebug.so"
 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"
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly points out that relying on module lookup for xdebug is fragile and inconsistent with how opcache is loaded, proposing a more robust absolute path which prevents potential loading failures.

Medium
General
Disable Xdebug by default

Disable Xdebug by default by setting xdebug.mode = off to prevent performance
degradation and information disclosure in production environments.

bin/php8.3.28/php.ini [1950-1959]

 [xdebug]
-zend_extension = "xdebug"
-xdebug.mode = debug
+; Disable by default to avoid perf and leakage in prod; enable per-env as needed
+; For CLI-only enabling, uncomment the next line:
+; xdebug.mode = off
+xdebug.mode = off
 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"
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that enabling Xdebug by default with xdebug.mode = debug is a significant performance and security risk for non-development environments.

Medium
Disable Xdebug by default

Disable the Xdebug extension by default by commenting out its configuration to
improve performance, allowing it to be enabled only when explicitly needed for
debugging.

bin/php8.5.0/php.ini [1916-1925]

 [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"
+;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"
Suggestion importance[1-10]: 7

__

Why: This is a valuable suggestion that improves performance in a development environment by disabling the resource-intensive Xdebug extension by default, which is a common and recommended practice.

Medium
Security
Disable PHP version exposure

Enhance security by disabling PHP version exposure in HTTP headers by setting
expose_php = Off.

bin/php8.3.28/php.ini [397]

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

__

Why: This is a valid security hardening suggestion that reduces information disclosure, which is a recommended best practice for production environments.

Medium
Disable PHP version exposure

Set expose_php to Off to avoid exposing the PHP version in HTTP headers,
reducing information disclosure.

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

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

__

Why: This is a valid security hardening suggestion to prevent version disclosure, which is good practice even for a development configuration that might be exposed or used as a base for production.

Low
Disable PHP version exposure

Disable expose_php in the configuration to prevent the PHP version from being
exposed in HTTP headers, reducing information disclosure risks.

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

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

__

Why: The suggestion provides a valid security hardening recommendation, although the file is explicitly for development, where exposing the PHP version is less critical but still good practice to disable.

Low
Suggestions up to commit c2867df
CategorySuggestion                                                                                                                                    Impact
High-level
Automate configuration generation to reduce duplication

To improve maintainability and reduce errors, replace the manual duplication of
PHP configuration files with an automated, template-based generation system.
This involves using a single template file to generate version-specific
configurations during the build process.

Examples:

bin/php8.3.28/php.ini [1-1959]
bin/php8.4.15/php.ini [1-1925]

Solution Walkthrough:

Before:

# In 'bin/php8.3.28/php.ini'
...
include_path=".;~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/pear/pear"
...
extension_dir = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext"
...
zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll"
...

# In 'bin/php8.4.15/php.ini'
...
include_path=".;~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/pear/pear"
...
extension_dir = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext"
...
zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/php8.4.15/ext/php_opcache.dll"
...

After:

# In a new 'templates/php.ini.tpl' file
...
include_path=".;~BEARSAMPP_LIN_PATH~/bin/php/@PHP_VERSION@/pear/pear"
...
extension_dir = "~BEARSAMPP_LIN_PATH~/bin/php/@PHP_VERSION@/ext"
...
zend_extension = "~BEARSAMPP_LIN_PATH~/bin/php/@PHP_VERSION@/ext/php_opcache.dll"
...

# Conceptual build process
# for each new_version:
#   read 'templates/php.ini.tpl'
#   replace '@PHP_VERSION@' with new_version
#   write to 'bin/php<new_version>/php.ini'
Suggestion importance[1-10]: 9

__

Why: The suggestion addresses a critical maintainability issue by proposing a template-based system to eliminate thousands of lines of duplicated configuration code, which is a significant architectural improvement.

High
Security
Enable session strict mode for security

Enable session.use_strict_mode by setting it to 1 to protect against session
fixation attacks.

bin/php8.3.28/php.ini [1359]

-session.use_strict_mode = 0
+session.use_strict_mode = 1
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a significant session fixation security vulnerability and provides the appropriate fix, which is a critical improvement.

High
Set session cookie to HttpOnly

Set session.cookie_httponly to 1 to prevent client-side scripts from accessing
the session cookie, mitigating XSS vulnerabilities.

bin/php8.3.28/php.ini [1398]

-session.cookie_httponly =
+session.cookie_httponly = 1
Suggestion importance[1-10]: 9

__

Why: The suggestion addresses a critical security risk by recommending the HttpOnly flag for session cookies, which helps prevent session hijacking via XSS attacks.

High
Enable strict session mode security

Enable session.use_strict_mode to protect against session fixation attacks by
preventing the use of uninitialized session IDs.

bin/php8.5.0/php.ini [1346]

-session.use_strict_mode = 0
+session.use_strict_mode = 1
Suggestion importance[1-10]: 9

__

Why: This is a critical security suggestion that correctly identifies and mitigates a session fixation vulnerability by enabling a recommended PHP setting.

High
Set session cookies to HttpOnly

Enable the HttpOnly flag for session cookies by setting session.cookie_httponly
to 1 to help mitigate XSS-based session hijacking.

bin/php8.5.0/php.ini [1385]

-session.cookie_httponly =
+session.cookie_httponly = 1
Suggestion importance[1-10]: 9

__

Why: This is a critical security suggestion that hardens the application against session hijacking via XSS by correctly recommending the HttpOnly flag for session cookies.

High
Enable session strict mode for security

Enable session.use_strict_mode to prevent session fixation attacks by rejecting
uninitialized session IDs.

bin/php8.4.15/php.ini [1346]

-session.use_strict_mode = 0
+session.use_strict_mode = 1
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a security risk (session fixation) and proposes enabling session.use_strict_mode as a mitigation, which is a recommended security best practice.

Medium
Make session cookies HTTP-only for security

Enable session.cookie_httponly to prevent client-side scripts from accessing the
session cookie, mitigating XSS-based session hijacking.

bin/php8.4.15/php.ini [1385]

-session.cookie_httponly =
+session.cookie_httponly = 1
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly points out a security vulnerability (XSS-based session hijacking) and recommends enabling session.cookie_httponly, which is a critical security best practice.

Medium
Set SameSite attribute to prevent CSRF

Set session.cookie_samesite to "Lax" to protect against Cross-Site Request
Forgery (CSRF) attacks by controlling when the session cookie is sent.

bin/php8.4.15/php.ini [1390]

-session.cookie_samesite =
+session.cookie_samesite = "Lax"
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a security risk (CSRF) and proposes setting session.cookie_samesite to "Lax", which is a modern and effective security control.

Medium
Enforce Phar archive signature validation

Enforce Phar archive signature validation by setting phar.require_hash to On to
prevent execution of tampered or malicious Phar files.

bin/php8.5.0/php.ini [1058]

-phar.require_hash = Off
+phar.require_hash = On
Suggestion importance[1-10]: 8

__

Why: This is a valid security suggestion that recommends enforcing signature validation for Phar archives, which prevents the execution of tampered files.

Medium
General
Enable OPCache for better performance

Enable OPCache by setting opcache.enable=1 to improve performance in the
development environment.

bin/php8.3.28/php.ini [1763-1765]

 [opcache]
 ; Determines if Zend OPCache is enabled
-opcache.enable=0
+opcache.enable=1
Suggestion importance[1-10]: 5

__

Why: The suggestion offers a valid performance optimization for a development environment, but enabling OPCache is a developer preference, and the default of being disabled is also a safe choice.

Low

@github-actions
Copy link

github-actions bot commented Dec 7, 2025

🐘 PHP Module Tests - Results

Test Date: 2025-12-10 02:03:25 UTC
Status: ❌ Some tests failed

📊 Test Results by Version

PHP 8.3.28

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

PHP 8.4.13

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

PHP 8.4.14

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

PHP 8.4.15

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

PHP 8.5.0

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

Results: 20 of 20 tests completed

📋 Detailed Test Results

PHP 8.3.28 - win10-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ❌ FAIL

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ imagick
  • ✅ imap
  • ✅ snmp
  • ✅ openssl
  • ✅ gmp
  • ✅ pdo_mysql
  • ✅ sqlite3
  • ✅ intl
  • ✅ gd
  • ✅ gettext
  • ✅ tidy
  • ✅ xdebug
  • ✅ zend_test
  • ✅ enchant
  • ✅ pdo_pgsql
  • ✅ zip
  • ✅ sysvshm
  • ✅ xsl
  • ✅ bz2
  • ✅ ftp
  • ✅ com_dotnet
  • ✅ sodium
  • ✅ opcache
  • ✅ pgsql
  • ✅ fileinfo
  • ✅ pdo_sqlite
  • ✅ curl
  • ✅ mysqli
  • ✅ ffi
  • ✅ dl_test
  • ✅ mbstring
  • ✅ sockets
  • ✅ oci8_19
  • ✅ exif
  • ✅ pdo_oci
  • ✅ memcache
  • ✅ shmop
  • ✅ pdo_odbc
  • ✅ ldap
  • ✅ pdo_firebird
  • ✅ soap
  • ✅ odbc
  • ✅ dba

Overall Status: ❌ SOME TESTS FAILED

💡 Click here for troubleshooting tips
  • Check the workflow logs for detailed error messages
  • Download the test artifacts for complete logs
  • Verify the .7z archive structure matches expected format
  • Ensure all required DLL dependencies are included
  • Check that extensions are compatible with PHP 8.3.28

PHP 8.3.28 - win10-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ❌ FAIL

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ sodium
  • ✅ intl
  • ✅ pdo_mysql
  • ✅ imap
  • ✅ ffi
  • ✅ oci8_19
  • ✅ openssl
  • ✅ gettext
  • ✅ pdo_sqlite
  • ✅ memcache
  • ✅ snmp
  • ✅ shmop
  • ✅ opcache
  • ✅ enchant
  • ✅ gd
  • ✅ mbstring
  • ✅ sysvshm
  • ✅ curl
  • ✅ pdo_pgsql
  • ✅ exif
  • ✅ mysqli
  • ✅ odbc
  • ✅ pdo_firebird
  • ✅ ldap
  • ✅ pgsql
  • ✅ sockets
  • ✅ bz2
  • ✅ soap
  • ✅ dl_test
  • ✅ pdo_oci
  • ✅ xsl
  • ✅ tidy
  • ✅ imagick
  • ✅ xdebug
  • ✅ pdo_odbc
  • ✅ zend_test
  • ✅ gmp
  • ✅ zip
  • ✅ fileinfo
  • ✅ com_dotnet
  • ✅ ftp
  • ✅ dba
  • ✅ sqlite3

Overall Status: ❌ SOME TESTS FAILED

💡 Click here for troubleshooting tips
  • Check the workflow logs for detailed error messages
  • Download the test artifacts for complete logs
  • Verify the .7z archive structure matches expected format
  • Ensure all required DLL dependencies are included
  • Check that extensions are compatible with PHP 8.3.28

PHP 8.3.28 - win11-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ❌ FAIL

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ openssl
  • ✅ gettext
  • ✅ sockets
  • ✅ ftp
  • ✅ bz2
  • ✅ com_dotnet
  • ✅ mbstring
  • ✅ soap
  • ✅ zend_test
  • ✅ exif
  • ✅ imap
  • ✅ dl_test
  • ✅ pdo_odbc
  • ✅ pdo_mysql
  • ✅ opcache
  • ✅ sqlite3
  • ✅ sodium
  • ✅ gd
  • ✅ xsl
  • ✅ dba
  • ✅ sysvshm
  • ✅ tidy
  • ✅ xdebug
  • ✅ enchant
  • ✅ gmp
  • ✅ shmop
  • ✅ pgsql
  • ✅ fileinfo
  • ✅ zip
  • ✅ odbc
  • ✅ ffi
  • ✅ intl
  • ✅ ldap
  • ✅ pdo_firebird
  • ✅ pdo_oci
  • ✅ curl
  • ✅ pdo_pgsql
  • ✅ snmp
  • ✅ pdo_sqlite
  • ✅ imagick
  • ✅ mysqli
  • ✅ memcache
  • ✅ oci8_19

Overall Status: ❌ SOME TESTS FAILED

💡 Click here for troubleshooting tips
  • Check the workflow logs for detailed error messages
  • Download the test artifacts for complete logs
  • Verify the .7z archive structure matches expected format
  • Ensure all required DLL dependencies are included
  • Check that extensions are compatible with PHP 8.3.28

PHP 8.3.28 - win11-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ❌ FAIL

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ gd
  • ✅ exif
  • ✅ shmop
  • ✅ ldap
  • ✅ imap
  • ✅ gettext
  • ✅ ffi
  • ✅ mysqli
  • ✅ sockets
  • ✅ mbstring
  • ✅ xsl
  • ✅ memcache
  • ✅ opcache
  • ✅ dba
  • ✅ imagick
  • ✅ ftp
  • ✅ gmp
  • ✅ enchant
  • ✅ xdebug
  • ✅ sqlite3
  • ✅ pdo_oci
  • ✅ zend_test
  • ✅ snmp
  • ✅ soap
  • ✅ curl
  • ✅ oci8_19
  • ✅ pdo_odbc
  • ✅ pdo_mysql
  • ✅ pgsql
  • ✅ com_dotnet
  • ✅ zip
  • ✅ pdo_pgsql
  • ✅ sysvshm
  • ✅ fileinfo
  • ✅ pdo_firebird
  • ✅ sodium
  • ✅ odbc
  • ✅ dl_test
  • ✅ pdo_sqlite
  • ✅ tidy
  • ✅ intl
  • ✅ openssl
  • ✅ bz2

Overall Status: ❌ SOME TESTS FAILED

💡 Click here for troubleshooting tips
  • Check the workflow logs for detailed error messages
  • Download the test artifacts for complete logs
  • Verify the .7z archive structure matches expected format
  • Ensure all required DLL dependencies are included
  • Check that extensions are compatible with PHP 8.3.28

PHP 8.4.13 - win10-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ dba
  • ✅ bz2
  • ✅ odbc
  • ✅ zend_test
  • ✅ pdo_mysql
  • ✅ mbstring
  • ✅ sqlite3
  • ✅ soap
  • ✅ pdo_firebird
  • ✅ opcache
  • ✅ tidy
  • ✅ sysvshm
  • ✅ memcache
  • ✅ pdo_pgsql
  • ✅ zip
  • ✅ snmp
  • ✅ openssl
  • ✅ xsl
  • ✅ enchant
  • ✅ intl
  • ✅ gmp
  • ✅ mysqli
  • ✅ ffi
  • ✅ pgsql
  • ✅ imagick
  • ✅ gd
  • ✅ shmop
  • ✅ exif
  • ✅ pdo_sqlite
  • ✅ sockets
  • ✅ curl
  • ✅ pdo_odbc
  • ✅ fileinfo
  • ✅ com_dotnet
  • ✅ gettext
  • ✅ ftp
  • ✅ ldap
  • ✅ sodium
  • ✅ xdebug
  • ✅ dl_test

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.13 - win10-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ fileinfo
  • ✅ opcache
  • ✅ dl_test
  • ✅ pdo_pgsql
  • ✅ snmp
  • ✅ shmop
  • ✅ sodium
  • ✅ com_dotnet
  • ✅ pdo_sqlite
  • ✅ xsl
  • ✅ odbc
  • ✅ ldap
  • ✅ soap
  • ✅ imagick
  • ✅ ffi
  • ✅ sockets
  • ✅ pdo_firebird
  • ✅ intl
  • ✅ curl
  • ✅ bz2
  • ✅ pgsql
  • ✅ pdo_odbc
  • ✅ pdo_mysql
  • ✅ mysqli
  • ✅ xdebug
  • ✅ sysvshm
  • ✅ tidy
  • ✅ zip
  • ✅ ftp
  • ✅ dba
  • ✅ enchant
  • ✅ openssl
  • ✅ sqlite3
  • ✅ mbstring
  • ✅ zend_test
  • ✅ gd
  • ✅ exif
  • ✅ gettext
  • ✅ memcache
  • ✅ gmp

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.13 - win11-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ bz2
  • ✅ fileinfo
  • ✅ intl
  • ✅ xsl
  • ✅ dl_test
  • ✅ memcache
  • ✅ odbc
  • ✅ com_dotnet
  • ✅ snmp
  • ✅ sysvshm
  • ✅ tidy
  • ✅ pdo_odbc
  • ✅ sodium
  • ✅ exif
  • ✅ sockets
  • ✅ imagick
  • ✅ shmop
  • ✅ pdo_mysql
  • ✅ ftp
  • ✅ zip
  • ✅ pgsql
  • ✅ sqlite3
  • ✅ curl
  • ✅ pdo_sqlite
  • ✅ gettext
  • ✅ opcache
  • ✅ dba
  • ✅ gmp
  • ✅ soap
  • ✅ xdebug
  • ✅ mysqli
  • ✅ mbstring
  • ✅ pdo_pgsql
  • ✅ ffi
  • ✅ ldap
  • ✅ openssl
  • ✅ pdo_firebird
  • ✅ enchant
  • ✅ gd
  • ✅ zend_test

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.13 - win11-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ intl
  • ✅ zip
  • ✅ sodium
  • ✅ ldap
  • ✅ pgsql
  • ✅ curl
  • ✅ odbc
  • ✅ gmp
  • ✅ imagick
  • ✅ dl_test
  • ✅ opcache
  • ✅ zend_test
  • ✅ tidy
  • ✅ sockets
  • ✅ enchant
  • ✅ exif
  • ✅ pdo_firebird
  • ✅ xsl
  • ✅ com_dotnet
  • ✅ fileinfo
  • ✅ mysqli
  • ✅ ffi
  • ✅ ftp
  • ✅ pdo_sqlite
  • ✅ pdo_pgsql
  • ✅ bz2
  • ✅ soap
  • ✅ xdebug
  • ✅ sysvshm
  • ✅ dba
  • ✅ gd
  • ✅ sqlite3
  • ✅ openssl
  • ✅ shmop
  • ✅ pdo_odbc
  • ✅ snmp
  • ✅ pdo_mysql
  • ✅ mbstring
  • ✅ memcache
  • ✅ gettext

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.14 - win10-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ fileinfo
  • ✅ openssl
  • ✅ pdo_pgsql
  • ✅ zip
  • ✅ com_dotnet
  • ✅ intl
  • ✅ xsl
  • ✅ dl_test
  • ✅ mbstring
  • ✅ ftp
  • ✅ mysqli
  • ✅ pgsql
  • ✅ bz2
  • ✅ zend_test
  • ✅ pdo_mysql
  • ✅ gd
  • ✅ soap
  • ✅ memcache
  • ✅ sysvshm
  • ✅ imagick
  • ✅ pdo_odbc
  • ✅ sodium
  • ✅ sqlite3
  • ✅ sockets
  • ✅ shmop
  • ✅ snmp
  • ✅ exif
  • ✅ gettext
  • ✅ ldap
  • ✅ pdo_firebird
  • ✅ opcache
  • ✅ enchant
  • ✅ tidy
  • ✅ xdebug
  • ✅ pdo_sqlite
  • ✅ dba
  • ✅ gmp
  • ✅ curl
  • ✅ odbc
  • ✅ ffi

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.14 - win10-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ gmp
  • ✅ pdo_odbc
  • ✅ sodium
  • ✅ xdebug
  • ✅ sockets
  • ✅ enchant
  • ✅ shmop
  • ✅ ldap
  • ✅ openssl
  • ✅ dl_test
  • ✅ xsl
  • ✅ intl
  • ✅ tidy
  • ✅ soap
  • ✅ bz2
  • ✅ exif
  • ✅ zend_test
  • ✅ snmp
  • ✅ sqlite3
  • ✅ memcache
  • ✅ ffi
  • ✅ curl
  • ✅ odbc
  • ✅ mysqli
  • ✅ pgsql
  • ✅ mbstring
  • ✅ imagick
  • ✅ dba
  • ✅ pdo_pgsql
  • ✅ pdo_mysql
  • ✅ gettext
  • ✅ zip
  • ✅ pdo_sqlite
  • ✅ com_dotnet
  • ✅ sysvshm
  • ✅ ftp
  • ✅ gd
  • ✅ fileinfo
  • ✅ opcache
  • ✅ pdo_firebird

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.14 - win11-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ dl_test
  • ✅ sysvshm
  • ✅ snmp
  • ✅ com_dotnet
  • ✅ soap
  • ✅ ftp
  • ✅ exif
  • ✅ pdo_pgsql
  • ✅ xsl
  • ✅ mysqli
  • ✅ sqlite3
  • ✅ odbc
  • ✅ sockets
  • ✅ zip
  • ✅ mbstring
  • ✅ gd
  • ✅ curl
  • ✅ openssl
  • ✅ fileinfo
  • ✅ ffi
  • ✅ gettext
  • ✅ dba
  • ✅ sodium
  • ✅ imagick
  • ✅ pdo_mysql
  • ✅ pdo_odbc
  • ✅ intl
  • ✅ zend_test
  • ✅ xdebug
  • ✅ memcache
  • ✅ shmop
  • ✅ gmp
  • ✅ pdo_firebird
  • ✅ pgsql
  • ✅ opcache
  • ✅ bz2
  • ✅ ldap
  • ✅ pdo_sqlite
  • ✅ tidy
  • ✅ enchant

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.14 - win11-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ curl
  • ✅ ffi
  • ✅ odbc
  • ✅ ldap
  • ✅ pdo_mysql
  • ✅ dl_test
  • ✅ sodium
  • ✅ snmp
  • ✅ exif
  • ✅ bz2
  • ✅ fileinfo
  • ✅ gd
  • ✅ mysqli
  • ✅ pgsql
  • ✅ memcache
  • ✅ gettext
  • ✅ gmp
  • ✅ pdo_odbc
  • ✅ zend_test
  • ✅ xdebug
  • ✅ com_dotnet
  • ✅ sysvshm
  • ✅ sqlite3
  • ✅ tidy
  • ✅ imagick
  • ✅ pdo_pgsql
  • ✅ mbstring
  • ✅ pdo_firebird
  • ✅ dba
  • ✅ zip
  • ✅ pdo_sqlite
  • ✅ openssl
  • ✅ ftp
  • ✅ soap
  • ✅ enchant
  • ✅ xsl
  • ✅ sockets
  • ✅ intl
  • ✅ shmop
  • ✅ opcache

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.15 - win10-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ ldap
  • ✅ pdo_sqlite
  • ✅ imagick
  • ✅ intl
  • ✅ gd
  • ✅ ffi
  • ✅ sqlite3
  • ✅ sysvshm
  • ✅ dl_test
  • ✅ pdo_mysql
  • ✅ shmop
  • ✅ opcache
  • ✅ soap
  • ✅ pdo_odbc
  • ✅ pgsql
  • ✅ gettext
  • ✅ dba
  • ✅ pdo_pgsql
  • ✅ exif
  • ✅ curl
  • ✅ zip
  • ✅ pdo_firebird
  • ✅ enchant
  • ✅ zend_test
  • ✅ xdebug
  • ✅ memcache
  • ✅ sockets
  • ✅ com_dotnet
  • ✅ gmp
  • ✅ tidy
  • ✅ mysqli
  • ✅ snmp
  • ✅ bz2
  • ✅ fileinfo
  • ✅ sodium
  • ✅ mbstring
  • ✅ odbc
  • ✅ ftp
  • ✅ xsl
  • ✅ openssl

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.15 - win10-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ gd
  • ✅ gmp
  • ✅ pdo_sqlite
  • ✅ mysqli
  • ✅ pgsql
  • ✅ enchant
  • ✅ ldap
  • ✅ exif
  • ✅ odbc
  • ✅ com_dotnet
  • ✅ pdo_pgsql
  • ✅ sqlite3
  • ✅ ffi
  • ✅ intl
  • ✅ shmop
  • ✅ memcache
  • ✅ bz2
  • ✅ imagick
  • ✅ zend_test
  • ✅ gettext
  • ✅ tidy
  • ✅ pdo_firebird
  • ✅ pdo_mysql
  • ✅ sockets
  • ✅ sodium
  • ✅ dl_test
  • ✅ openssl
  • ✅ mbstring
  • ✅ fileinfo
  • ✅ pdo_odbc
  • ✅ xsl
  • ✅ ftp
  • ✅ dba
  • ✅ curl
  • ✅ soap
  • ✅ snmp
  • ✅ sysvshm
  • ✅ opcache
  • ✅ xdebug
  • ✅ zip

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.15 - win11-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ gettext
  • ✅ mbstring
  • ✅ pdo_firebird
  • ✅ sqlite3
  • ✅ ffi
  • ✅ zend_test
  • ✅ gmp
  • ✅ curl
  • ✅ sysvshm
  • ✅ memcache
  • ✅ gd
  • ✅ exif
  • ✅ ftp
  • ✅ pgsql
  • ✅ enchant
  • ✅ dl_test
  • ✅ com_dotnet
  • ✅ imagick
  • ✅ sockets
  • ✅ xsl
  • ✅ soap
  • ✅ zip
  • ✅ bz2
  • ✅ xdebug
  • ✅ dba
  • ✅ pdo_sqlite
  • ✅ snmp
  • ✅ tidy
  • ✅ openssl
  • ✅ odbc
  • ✅ ldap
  • ✅ sodium
  • ✅ pdo_pgsql
  • ✅ pdo_mysql
  • ✅ shmop
  • ✅ intl
  • ✅ pdo_odbc
  • ✅ mysqli
  • ✅ fileinfo
  • ✅ opcache

Overall Status: ✅ ALL TESTS PASSED

PHP 8.4.15 - win11-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ opcache
  • ✅ sodium
  • ✅ sockets
  • ✅ sqlite3
  • ✅ soap
  • ✅ odbc
  • ✅ zip
  • ✅ pdo_sqlite
  • ✅ curl
  • ✅ ftp
  • ✅ pdo_odbc
  • ✅ intl
  • ✅ sysvshm
  • ✅ snmp
  • ✅ ffi
  • ✅ zend_test
  • ✅ exif
  • ✅ tidy
  • ✅ mysqli
  • ✅ pdo_pgsql
  • ✅ pdo_firebird
  • ✅ fileinfo
  • ✅ gettext
  • ✅ gd
  • ✅ gmp
  • ✅ bz2
  • ✅ dl_test
  • ✅ mbstring
  • ✅ openssl
  • ✅ imagick
  • ✅ xdebug
  • ✅ pgsql
  • ✅ memcache
  • ✅ shmop
  • ✅ pdo_mysql
  • ✅ enchant
  • ✅ xsl
  • ✅ com_dotnet
  • ✅ ldap
  • ✅ dba

Overall Status: ✅ ALL TESTS PASSED

PHP 8.5.0 - win10-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ sockets
  • ✅ xsl
  • ✅ sysvshm
  • ✅ curl
  • ✅ sqlite3
  • ✅ ldap
  • ✅ dl_test
  • ✅ pdo_mysql
  • ✅ enchant
  • ✅ zend_test
  • ✅ imagick
  • ✅ soap
  • ✅ memcache
  • ✅ zip
  • ✅ pdo_odbc
  • ✅ pdo_pgsql
  • ✅ mysqli
  • ✅ fileinfo
  • ✅ pdo_sqlite
  • ✅ gmp
  • ✅ shmop
  • ✅ pgsql
  • ✅ exif
  • ✅ dba
  • ✅ openssl
  • ✅ mbstring
  • ✅ sodium
  • ✅ snmp
  • ✅ com_dotnet
  • ✅ tidy
  • ✅ pdo_firebird
  • ✅ bz2
  • ✅ intl
  • ✅ ffi
  • ✅ ftp
  • ✅ odbc
  • ✅ gettext
  • ✅ xdebug
  • ✅ gd

Overall Status: ✅ ALL TESTS PASSED

PHP 8.5.0 - win10-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ odbc
  • ✅ imagick
  • ✅ bz2
  • ✅ shmop
  • ✅ pdo_pgsql
  • ✅ com_dotnet
  • ✅ enchant
  • ✅ intl
  • ✅ ffi
  • ✅ openssl
  • ✅ dl_test
  • ✅ gettext
  • ✅ gd
  • ✅ mbstring
  • ✅ dba
  • ✅ pdo_sqlite
  • ✅ sqlite3
  • ✅ zend_test
  • ✅ snmp
  • ✅ pdo_mysql
  • ✅ pgsql
  • ✅ fileinfo
  • ✅ curl
  • ✅ memcache
  • ✅ pdo_firebird
  • ✅ exif
  • ✅ gmp
  • ✅ sodium
  • ✅ xsl
  • ✅ ftp
  • ✅ pdo_odbc
  • ✅ sockets
  • ✅ ldap
  • ✅ sysvshm
  • ✅ xdebug
  • ✅ tidy
  • ✅ soap
  • ✅ mysqli
  • ✅ zip

Overall Status: ✅ ALL TESTS PASSED

PHP 8.5.0 - win11-amd

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ dl_test
  • ✅ xsl
  • ✅ mysqli
  • ✅ ftp
  • ✅ xdebug
  • ✅ gettext
  • ✅ intl
  • ✅ sockets
  • ✅ pdo_odbc
  • ✅ pdo_firebird
  • ✅ memcache
  • ✅ pdo_pgsql
  • ✅ gmp
  • ✅ fileinfo
  • ✅ gd
  • ✅ enchant
  • ✅ bz2
  • ✅ soap
  • ✅ imagick
  • ✅ mbstring
  • ✅ snmp
  • ✅ openssl
  • ✅ sysvshm
  • ✅ exif
  • ✅ ldap
  • ✅ pdo_sqlite
  • ✅ dba
  • ✅ com_dotnet
  • ✅ sqlite3
  • ✅ zend_test
  • ✅ pgsql
  • ✅ sodium
  • ✅ tidy
  • ✅ ffi
  • ✅ pdo_mysql
  • ✅ shmop
  • ✅ odbc
  • ✅ zip
  • ✅ curl

Overall Status: ✅ ALL TESTS PASSED

PHP 8.5.0 - win11-intel

Phase 1: Basic PHP Validation

  • Download & Extract: ✅ PASS
  • Verify Executable: ✅ PASS

Phase 2: Extension Validation

  • Locate Extensions: ✅ PASS
  • Validate Architecture: ✅ PASS
  • Test Loading: ✅ PASS

Phase 3: Dependency Validation

  • Download Dependencies: ✅ PASS
  • Test with Dependencies: ✅ PASS

Phase 4: Functional Testing

  • Extension Functionality: ✅ PASS

Extensions Tested: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • ✅ pdo_pgsql
  • ✅ fileinfo
  • ✅ sysvshm
  • ✅ intl
  • ✅ zip
  • ✅ zend_test
  • ✅ ftp
  • ✅ gd
  • ✅ xsl
  • ✅ pdo_mysql
  • ✅ tidy
  • ✅ gmp
  • ✅ pdo_sqlite
  • ✅ snmp
  • ✅ xdebug
  • ✅ curl
  • ✅ bz2
  • ✅ soap
  • ✅ exif
  • ✅ sodium
  • ✅ memcache
  • ✅ com_dotnet
  • ✅ pgsql
  • ✅ pdo_odbc
  • ✅ pdo_firebird
  • ✅ dl_test
  • ✅ imagick
  • ✅ dba
  • ✅ openssl
  • ✅ sockets
  • ✅ shmop
  • ✅ mbstring
  • ✅ mysqli
  • ✅ odbc
  • ✅ enchant
  • ✅ sqlite3
  • ✅ gettext
  • ✅ ldap
  • ✅ ffi

Overall Status: ✅ ALL TESTS PASSED


📋 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.

@qodo-code-review
Copy link

qodo-code-review bot commented Dec 7, 2025

PR Reviewer Guide 🔍

(Review updated until commit d1473df)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

Potential Misconfig

OPCache is explicitly disabled (opcache.enable/opcache.enable_cli set to 0). Verify if this is intentional for production builds; enabling OPCache typically improves performance.

opcache.enable=0

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

Doc Consistency

README shows adding a new version by copying a previous folder, but newly added configs rely on version-specific paths/placeholders. Ensure instructions emphasize updating these paths or relying on the fetch task to rewrite them, and reconcile capitalization of release tags (2025.12.7 vs 2025.12.07 across docs/links).

### Creating a New PHP Version Build

When a new PHP version is released, follow these steps:

1. **Create version directory structure**:
   ```bash
   mkdir bin/php8.4.16
  1. Copy configuration files from a similar version:

    # Copy from previous version
    cp bin/php8.4.15/* bin/php8.4.16/
  2. Build the release (fetch is automatic):

    gradle release -PbundleVersion=8.4.16

    The release task automatically runs fetch which will:

    • ✅ Update build.properties with today's date
    • ✅ Fetch the latest release tag from modules-untouched repository
    • ✅ Find and update ImageMagick, php_imagick, memcache, xdebug, and PEAR URLs
    • ✅ Update bearsampp.conf with the new PHP version
    • ✅ Update deps.properties, exts.properties, and pear.properties
    • ✅ Update version-specific paths in php.ini
    • ✅ Download PHP binaries and dependencies
    • ✅ Build and package the release
  3. Review the updated files in bin/php8.4.16/:

    • bearsampp.conf - PHP version updated
    • exts.properties - Extension URLs updated
    • deps.properties - Dependency URLs updated
    • pear.properties - PEAR URL updated
    • php.ini - Version-specific paths updated
  4. Commit the changes to git:

    git add bin/php8.4.16/
    git commit -m "Add PHP 8.4.16 configuration"

Note: The fetch task is automatically included in the release build process. You only need to run gradle fetch separately if you want to update dependency URLs without building a release.

How the Fetch Task Works

The fetch task integrates with the Bearsampp modules-untouched repository:

  1. Reads php.properties from modules-untouched to get the PHP download URL
  2. Extracts the release tag (e.g., php-2025.12.7) from the URL
  3. Queries GitHub API to get all assets from that release
  4. Pattern matches to find the latest versions of:
    • ImageMagick (portable Q16-HDRI x64)
    • php_imagick (matching PHP major.minor version)
    • php_memcache (matching PHP major.minor version)
    • php_xdebug (matching PHP major.minor version)
    • PEAR (pearweb_phars)
  5. Updates configuration files with the new URLs
  6. Updates version-specific paths in php.ini

This ensures all dependencies are automatically synchronized with the latest compatible versions from the modules-untouched releases.

Prerequisites


</details>

<details><summary><a href='https://github.com/Bearsampp/module-php/pull/60/files#diff-6cb9da596b72aa889f8aaad7e3c35495d0a4d0e60fc574cc93b2b374ea3cd608R1-R3'><strong>Formatting Inconsistency</strong></a>

Property formatting changed to remove spaces around equals; confirm all tooling/tasks parsing these files expect this format consistently across all versions.
</summary>

```ini
imagick = https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.9.24/php_imagick-3.7.0-8.4-ts-vs17-x64.zip
memcache = https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.9.24/php-8.4.x_memcache.dll
xdebug=https://github.com/Bearsampp/modules-untouched/releases/download/php-2025.10.31/php_xdebug-3.5.0alpha2-8.4-ts-vs17-x86_64.dll

@jwaisner
Copy link
Contributor

jwaisner commented Dec 7, 2025

@N6REJ , this works great. The modules however seem to cause the status page for localhost to show memcached as stopped even when it is actually started in all versions in this release.

image

Also 8.3.28 throws an error (still starts) but looks like a problem with Xdebug.

image

@N6REJ
Copy link
Collaborator Author

N6REJ commented Dec 8, 2025

I see it failed some ci test also. I'll double check the fetch routine and the source files. Glad you like the new fetch task.
We had this memcache behavior before but I don't remember whats caused it.
is the memcached issue with all versions of php?

@jwaisner
Copy link
Contributor

jwaisner commented Dec 8, 2025

Only impacts the new versions of this release.

@qodo-code-review
Copy link

qodo-code-review bot commented Dec 10, 2025

CI Feedback 🧐

(Feedback updated until commit d1473df)

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Test PHP 8.3.28 on win10-intel

Failed stage: Generate Test Summary [❌]

Failed test name: Test with Dependencies (Phase 3.2)

Failure summary:

The action failed because the final summary marked "Phase 3: Dependency Validation - Test with
Dependencies" as ❌ FAIL, which set overall status to failure and exited with code 1.
- All earlier
phases passed (download/extract, PHP verification, locating/validating/loading extensions, and
downloading dependencies).
- In Phase 3.2, testing extensions with their dependencies resulted in
overall success=false (e.g., Imagick/memcache/xdebug dependency tests did not all pass), leading to:

- $phase3_2 = "False" -eq "true" → false
- $allPassed evaluated to false
- Logged
##[error]Tests failed for PHP 8.3.28 on win10-intel and exited 1.
- Notably, the PHP startup showed
many missing extensions due to placeholder paths like BEARSAMPP_LIN_PATH/..., indicating
misconfigured php.ini paths; although basic execution succeeded, this misconfiguration likely
contributed to dependency test failures.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

100:  If you want to create a new branch to retain commits you create, you may
101:  do so (now or later) by using -c with the switch command. Example:
102:  git switch -c <new-branch-name>
103:  Or undo this operation with:
104:  git switch -
105:  Turn off this advice by setting config variable advice.detachedHead to false
106:  HEAD is now at 08017d0 Merge d1473df2391f2a621bf96a64a839dc4e3e68c282 into 7041683f813826650eceed852b2c74dfefc460b5
107:  ##[endgroup]
108:  [command]"C:\Program Files\Git\bin\git.exe" log -1 --format=%H
109:  08017d015321bde41f4b078045da7dd5d973aa30
110:  ##[group]Run New-Item -ItemType Directory -Force -Path "test-php-8.3.28" | Out-Null
111:  �[36;1mNew-Item -ItemType Directory -Force -Path "test-php-8.3.28" | Out-Null�[0m
112:  �[36;1mNew-Item -ItemType Directory -Force -Path "test-results" | Out-Null�[0m
113:  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
114:  ##[endgroup]
115:  ##[group]Run $ErrorActionPreference = "Stop"
116:  �[36;1m$ErrorActionPreference = "Stop"�[0m
117:  �[36;1m$version = "8.3.28"�[0m
...

136:  �[36;1m  �[0m
137:  �[36;1m  try {�[0m
138:  �[36;1m    # Check if URL is a GitHub release URL and if we have a token�[0m
139:  �[36;1m    $headers = @{}�[0m
140:  �[36;1m    if ($url -match "github.com" -and $env:GH_TOKEN) {�[0m
141:  �[36;1m      Write-Host "Using GitHub authentication token for download"�[0m
142:  �[36;1m      $headers["Authorization"] = "token $env:GH_TOKEN"�[0m
143:  �[36;1m    }�[0m
144:  �[36;1m    �[0m
145:  �[36;1m    if ($headers.Count -gt 0) {�[0m
146:  �[36;1m      Invoke-WebRequest -Uri $url -OutFile $archivePath -Headers $headers -UseBasicParsing -TimeoutSec 300�[0m
147:  �[36;1m    } else {�[0m
148:  �[36;1m      Invoke-WebRequest -Uri $url -OutFile $archivePath -UseBasicParsing -TimeoutSec 300�[0m
149:  �[36;1m    }�[0m
150:  �[36;1m  } catch {�[0m
151:  �[36;1m    Write-Host "❌ ERROR: Download failed!"�[0m
152:  �[36;1m    Write-Host "Error details: $($_.Exception.Message)"�[0m
153:  �[36;1m    Write-Host "Status Code: $($_.Exception.Response.StatusCode.value__)"�[0m
154:  �[36;1m    Write-Host "URL attempted: $url"�[0m
155:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
156:  �[36;1m    echo "error=Download failed: $($_.Exception.Message)" >> $env:GITHUB_OUTPUT�[0m
157:  �[36;1m    exit 1�[0m
158:  �[36;1m  }�[0m
159:  �[36;1m  �[0m
160:  �[36;1m  if (-not (Test-Path $archivePath)) {�[0m
161:  �[36;1m    Write-Host "❌ ERROR: Download file not found at expected path: $archivePath"�[0m
162:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
163:  �[36;1m    echo "error=Download file not found after download attempt" >> $env:GITHUB_OUTPUT�[0m
164:  �[36;1m    exit 1�[0m
165:  �[36;1m  }�[0m
166:  �[36;1m  �[0m
167:  �[36;1m  $fileSize = (Get-Item $archivePath).Length / 1MB�[0m
168:  �[36;1m  Write-Host "✅ Downloaded: $archivePath ($([math]::Round($fileSize, 2)) MB)"�[0m
169:  �[36;1m  �[0m
170:  �[36;1m  # Verify file is not empty or too small�[0m
171:  �[36;1m  if ($fileSize -lt 0.1) {�[0m
172:  �[36;1m    Write-Host "❌ ERROR: Downloaded file is too small ($([math]::Round($fileSize, 2)) MB), likely corrupted"�[0m
173:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
174:  �[36;1m    echo "error=Downloaded file is too small or corrupted" >> $env:GITHUB_OUTPUT�[0m
175:  �[36;1m    exit 1�[0m
176:  �[36;1m  }�[0m
177:  �[36;1m  �[0m
178:  �[36;1m  Write-Host "📦 Extracting PHP archive..."�[0m
179:  �[36;1m  $extractPath = "test-php-$version"�[0m
180:  �[36;1m  �[0m
181:  �[36;1m  if (Get-Command 7z -ErrorAction SilentlyContinue) {�[0m
182:  �[36;1m    $extractOutput = & 7z x $archivePath -o"$extractPath" -y 2>&1�[0m
183:  �[36;1m    �[0m
184:  �[36;1m    if ($LASTEXITCODE -eq 0) {�[0m
185:  �[36;1m      Write-Host "✅ Extraction successful"�[0m
186:  �[36;1m    } else {�[0m
187:  �[36;1m      Write-Host "❌ ERROR: Extraction failed with exit code: $LASTEXITCODE"�[0m
188:  �[36;1m      Write-Host "7z output:"�[0m
189:  �[36;1m      Write-Host $extractOutput�[0m
190:  �[36;1m      echo "success=false" >> $env:GITHUB_OUTPUT�[0m
191:  �[36;1m      echo "error=Extraction failed with exit code $LASTEXITCODE" >> $env:GITHUB_OUTPUT�[0m
192:  �[36;1m      exit 1�[0m
193:  �[36;1m    }�[0m
194:  �[36;1m  } else {�[0m
195:  �[36;1m    Write-Host "❌ ERROR: 7-Zip is required to extract .7z files"�[0m
196:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
197:  �[36;1m    echo "error=7-Zip not found" >> $env:GITHUB_OUTPUT�[0m
198:  �[36;1m    exit 1�[0m
199:  �[36;1m  }�[0m
200:  �[36;1m  �[0m
201:  �[36;1m  # Find php.exe in the extracted directory (may be nested)�[0m
202:  �[36;1m  $phpExe = Get-ChildItem -Path $extractPath -Filter "php.exe" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1�[0m
203:  �[36;1m  �[0m
204:  �[36;1m  if (-not $phpExe) {�[0m
205:  �[36;1m    Write-Host "❌ ERROR: php.exe not found after extraction"�[0m
206:  �[36;1m    Write-Host "Directory structure after extraction:"�[0m
207:  �[36;1m    Get-ChildItem -Path $extractPath -Recurse | Select-Object -First 20 | ForEach-Object { Write-Host "  $($_.FullName)" }�[0m
208:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
209:  �[36;1m    echo "error=php.exe not found after extraction" >> $env:GITHUB_OUTPUT�[0m
210:  �[36;1m    exit 1�[0m
211:  �[36;1m  }�[0m
212:  �[36;1m  �[0m
213:  �[36;1m  $phpExe = $phpExe.FullName�[0m
214:  �[36;1m  Write-Host "✅ Found php.exe: $phpExe"�[0m
215:  �[36;1m  �[0m
216:  �[36;1m  Write-Host "✅ PHP extracted successfully"�[0m
217:  �[36;1m  echo "success=true" >> $env:GITHUB_OUTPUT�[0m
218:  �[36;1m  echo "php-path=$phpExe" >> $env:GITHUB_OUTPUT�[0m
219:  �[36;1m  �[0m
220:  �[36;1m} catch {�[0m
221:  �[36;1m  Write-Host "❌ ERROR: Unexpected error occurred"�[0m
222:  �[36;1m  Write-Host "Error message: $($_.Exception.Message)"�[0m
223:  �[36;1m  Write-Host "Stack trace: $($_.ScriptStackTrace)"�[0m
224:  �[36;1m  echo "success=false" >> $env:GITHUB_OUTPUT�[0m
225:  �[36;1m  echo "error=$($_.Exception.Message)" >> $env:GITHUB_OUTPUT�[0m
226:  �[36;1m  exit 1�[0m
227:  �[36;1m}�[0m
228:  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
229:  env:
230:  GH_TOKEN: ***
231:  ##[endgroup]
232:  === Phase 1.1: Download and Extract PHP 8.3.28 ===
233:  Platform: win10-intel
234:  📥 Download URL: https://github.com/Bearsampp/module-php/releases/download/2025.12.7/bearsampp-php-8.3.28-2025.12.07.7z
235:  ⏳ Downloading PHP archive...
236:  Using GitHub authentication token for download
237:  ✅ Downloaded: php-8.3.28.7z (58.98 MB)
238:  📦 Extracting PHP archive...
239:  ✅ Extraction successful
240:  ✅ Found php.exe: D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\php.exe
241:  ✅ PHP extracted successfully
242:  ##[group]Run $ErrorActionPreference = "Stop"
243:  �[36;1m$ErrorActionPreference = "Stop"�[0m
244:  �[36;1m$version = "8.3.28"�[0m
245:  �[36;1m$phpExe = "D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\php.exe"�[0m
246:  �[36;1m�[0m
247:  �[36;1mWrite-Host "`n=== Phase 1.2: Verify PHP Executable ==="�[0m
248:  �[36;1m�[0m
249:  �[36;1mtry {�[0m
250:  �[36;1m  Write-Host "🔍 Testing PHP version command..."�[0m
251:  �[36;1m  $versionOutput = & $phpExe -v 2>&1�[0m
252:  �[36;1m  �[0m
253:  �[36;1m  if ($LASTEXITCODE -ne 0) {�[0m
254:  �[36;1m    Write-Host "❌ ERROR: PHP executable returned error code: $LASTEXITCODE"�[0m
255:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
256:  �[36;1m    echo "error=PHP executable returned error code: $LASTEXITCODE" >> $env:GITHUB_OUTPUT�[0m
257:  �[36;1m    exit 1�[0m
...

259:  �[36;1m  �[0m
260:  �[36;1m  Write-Host $versionOutput�[0m
261:  �[36;1m  �[0m
262:  �[36;1m  if ($versionOutput -match "PHP\s+$version") {�[0m
263:  �[36;1m    Write-Host "✅ PHP version matches: $version"�[0m
264:  �[36;1m  } else {�[0m
265:  �[36;1m    Write-Host "⚠️  Warning: Version string mismatch"�[0m
266:  �[36;1m  }�[0m
267:  �[36;1m  �[0m
268:  �[36;1m  Write-Host "`n🔍 Testing PHP code execution..."�[0m
269:  �[36;1m  $testOutput = & $phpExe -r "echo 'PHP is working';" 2>&1�[0m
270:  �[36;1m  �[0m
271:  �[36;1m  if ($testOutput -match "PHP is working") {�[0m
272:  �[36;1m    Write-Host "✅ PHP executes code successfully"�[0m
273:  �[36;1m  } else {�[0m
274:  �[36;1m    Write-Host "❌ ERROR: PHP failed to execute test code"�[0m
275:  �[36;1m    Write-Host "Output: $testOutput"�[0m
276:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
277:  �[36;1m    echo "error=PHP failed to execute test code" >> $env:GITHUB_OUTPUT�[0m
278:  �[36;1m    exit 1�[0m
279:  �[36;1m  }�[0m
280:  �[36;1m  �[0m
281:  �[36;1m  echo "success=true" >> $env:GITHUB_OUTPUT�[0m
282:  �[36;1m  �[0m
283:  �[36;1m} catch {�[0m
284:  �[36;1m  Write-Host "❌ ERROR: Unexpected error occurred"�[0m
285:  �[36;1m  Write-Host "Error message: $($_.Exception.Message)"�[0m
286:  �[36;1m  echo "success=false" >> $env:GITHUB_OUTPUT�[0m
287:  �[36;1m  echo "error=$($_.Exception.Message)" >> $env:GITHUB_OUTPUT�[0m
288:  �[36;1m  exit 1�[0m
289:  �[36;1m}�[0m
290:  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
291:  ##[endgroup]
292:  === Phase 1.2: Verify PHP Executable ===
293:  🔍 Testing PHP version command...
294:  PHP Warning:  Failed loading Zend extension '~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  Failed loading Zend extension 'xdebug' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\xdebug (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_xdebug.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\curl (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_curl.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'fileinfo' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\fileinfo (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_fileinfo.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'gd' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\gd (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_gd.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'gettext' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\gettext (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_gettext.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'intl' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\intl (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_intl.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'imap' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\imap (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_imap.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'mbstring' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\mbstring (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_mbstring.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\mysqli (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_mysqli.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'openssl' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\openssl (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_openssl.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pdo_mysql (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pdo_mysql.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pdo_pgsql (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pdo_pgsql.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pdo_sqlite (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pdo_sqlite.dll (The specified module could not be found)) in Unknown on line 0  Warning: Failed loading Zend extension '~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext/php_opcache.dll.dll (The specified module could not be found)) in Unknown on line 0  Warning: Failed loading Zend extension 'xdebug' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\xdebug (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_xdebug.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\curl (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_curl.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'fileinfo' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\fileinfo (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_fileinfo.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'gd' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\gd (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_gd.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'gettext' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\gettext (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_gettext.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'intl' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\intl (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_intl.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'imap' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\imap (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_imap.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'mbstring' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\mbstring (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_mbstring.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\mysqli (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_mysqli.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'openssl' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\openssl (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_openssl.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pdo_mysql (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pdo_mysql.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pdo_pgsql (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pdo_pgsql.dll (The specified module could not be found)) in Unknown on line 0  PHP Warning:  PHP Startup: Unable to load dynamic library 'pgsql' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pgsql (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pgsql.dll (The specified module could not be found)) in Unknown on line 0 PHP Warning:  PHP Startup: Unable to load dynamic library 'sodium' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\sodium (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_sodium.dll (The specified module could not be found)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pdo_sqlite (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pdo_sqlite.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'pgsql' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\pgsql (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_pgsql.dll (The specified module could not be found)) in Unknown on line 0  Warning: PHP Startup: Unable to load dynamic library 'sodium' (tried: ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\sodium (The specified module could not be found), ~BEARSAMPP_LIN_PATH~/bin/php/php8.3.28/ext\php_sodium.dll (The specified module could not be found)) in Unknown on line 0 PHP 8.3.28 (cli) (built: Nov 18 2025 23:45:22) (ZTS Visual C++ 2019 x64) Copyright (c) The PHP Group Zend Engine v4.3.28, Copyright (c) Zend Technologies
295:  ✅ PHP version matches: 8.3.28
296:  🔍 Testing PHP code execution...
297:  ✅ PHP executes code successfully
298:  ##[group]Run $ErrorActionPreference = "Stop"
299:  �[36;1m$ErrorActionPreference = "Stop"�[0m
300:  �[36;1m$phpExe = "D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\php.exe"�[0m
301:  �[36;1m�[0m
302:  �[36;1mWrite-Host "`n=== Phase 2.1: Locate Bundled Extensions ==="�[0m
303:  �[36;1m�[0m
304:  �[36;1mtry {�[0m
305:  �[36;1m  # Get PHP directory and ext subdirectory�[0m
306:  �[36;1m  $phpDir = Split-Path -Parent $phpExe�[0m
307:  �[36;1m  $extDir = Join-Path $phpDir "ext"�[0m
308:  �[36;1m  �[0m
309:  �[36;1m  Write-Host "PHP Directory: $phpDir"�[0m
310:  �[36;1m  Write-Host "Extensions Directory: $extDir"�[0m
311:  �[36;1m  �[0m
312:  �[36;1m  if (-not (Test-Path $extDir)) {�[0m
313:  �[36;1m    Write-Host "❌ ERROR: ext directory not found at: $extDir"�[0m
314:  �[36;1m    Write-Host "Directory contents:"�[0m
315:  �[36;1m    Get-ChildItem -Path $phpDir | ForEach-Object { Write-Host "  $($_.Name)" }�[0m
316:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
317:  �[36;1m    echo "error=ext directory not found" >> $env:GITHUB_OUTPUT�[0m
318:  �[36;1m    exit 1�[0m
319:  �[36;1m  }�[0m
320:  �[36;1m  �[0m
321:  �[36;1m  $dllFiles = Get-ChildItem -Path $extDir -Filter "*.dll" -ErrorAction SilentlyContinue�[0m
322:  �[36;1m  �[0m
323:  �[36;1m  if (-not $dllFiles -or $dllFiles.Count -eq 0) {�[0m
324:  �[36;1m    Write-Host "❌ ERROR: No DLL files found in ext directory"�[0m
325:  �[36;1m    echo "success=false" >> $env:GITHUB_OUTPUT�[0m
326:  �[36;1m    echo "error=No extension DLLs found in ext directory" >> $env:GITHUB_OUTPUT�[0m
327:  �[36;1m    exit 1�[0m
...

335:  �[36;1m    $extResults[$extName] = @{ �[0m
336:  �[36;1m      success = $true�[0m
337:  �[36;1m      path = $dll.FullName�[0m
338:  �[36;1m      name = $dll.Name�[0m
339:  �[36;1m      size = [math]::Round($dll.Length / 1KB, 2)�[0m
340:  �[36;1m    }�[0m
341:  �[36;1m  }�[0m
342:  �[36;1m  �[0m
343:  �[36;1m  $extResults | ConvertTo-Json -Depth 10 | Out-File "test-results/extensions.json"�[0m
344:  �[36;1m  �[0m
345:  �[36;1m  Write-Host "`n✅ Successfully located bundled extensions"�[0m
346:  �[36;1m  echo "success=true" >> $env:GITHUB_OUTPUT�[0m
347:  �[36;1m  echo "ext-dir=$extDir" >> $env:GITHUB_OUTPUT�[0m
348:  �[36;1m  �[0m
349:  �[36;1m} catch {�[0m
350:  �[36;1m  Write-Host "❌ ERROR: $($_.Exception.Message)"�[0m
351:  �[36;1m  echo "success=false" >> $env:GITHUB_OUTPUT�[0m
352:  �[36;1m  echo "error=$($_.Exception.Message)" >> $env:GITHUB_OUTPUT�[0m
353:  �[36;1m  exit 1�[0m
...

390:  - php_pdo_sqlite.dll (28.5 KB)
391:  - php_pgsql.dll (102 KB)
392:  - php_shmop.dll (17.5 KB)
393:  - php_snmp.dll (422 KB)
394:  - php_soap.dll (258 KB)
395:  - php_sockets.dll (80 KB)
396:  - php_sodium.dll (93.5 KB)
397:  - php_sqlite3.dll (57.5 KB)
398:  - php_sysvshm.dll (18.5 KB)
399:  - php_tidy.dll (737.5 KB)
400:  - php_xdebug.dll (364 KB)
401:  - php_xsl.dll (282 KB)
402:  - php_zend_test.dll (79 KB)
403:  - php_zip.dll (373.5 KB)
404:  ✅ Successfully located bundled extensions
405:  ##[group]Run $ErrorActionPreference = "Continue"
406:  �[36;1m$ErrorActionPreference = "Continue"�[0m
407:  �[36;1m$extDir = "D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\ext"�[0m
...

421:  �[36;1m    $fs.Seek($peOffset, [System.IO.SeekOrigin]::Begin) | Out-Null�[0m
422:  �[36;1m    $peSignature = $br.ReadBytes(4)�[0m
423:  �[36;1m    �[0m
424:  �[36;1m    $machine = $br.ReadUInt16()�[0m
425:  �[36;1m    �[0m
426:  �[36;1m    $fs.Close()�[0m
427:  �[36;1m    �[0m
428:  �[36;1m    $arch = switch ($machine) {�[0m
429:  �[36;1m      0x014c { "I386" }�[0m
430:  �[36;1m      0x8664 { "AMD64" }�[0m
431:  �[36;1m      default { "UNKNOWN" }�[0m
432:  �[36;1m    }�[0m
433:  �[36;1m    �[0m
434:  �[36;1m    return @{ Success = $true; Architecture = $arch }�[0m
435:  �[36;1m  } catch {�[0m
436:  �[36;1m    return @{ Success = $false; Error = $_.Exception.Message }�[0m
437:  �[36;1m  }�[0m
...

446:  �[36;1m  Write-Host "`n🔍 Validating: $($dll.Name)"�[0m
447:  �[36;1m  $result = Test-DllArchitecture -DllPath $dll.FullName�[0m
448:  �[36;1m  �[0m
449:  �[36;1m  if ($result.Success) {�[0m
450:  �[36;1m    Write-Host "   Architecture: $($result.Architecture)"�[0m
451:  �[36;1m    �[0m
452:  �[36;1m    if ($result.Architecture -eq "AMD64") {�[0m
453:  �[36;1m      Write-Host "   ✅ Correct architecture (x64)"�[0m
454:  �[36;1m      $archResults[$dll.Name] = @{ valid = $true; arch = $result.Architecture }�[0m
455:  �[36;1m    } else {�[0m
456:  �[36;1m      Write-Host "   ❌ Invalid architecture: Expected AMD64, got $($result.Architecture)"�[0m
457:  �[36;1m      $archResults[$dll.Name] = @{ valid = $false; arch = $result.Architecture }�[0m
458:  �[36;1m      $allValid = $false�[0m
459:  �[36;1m    }�[0m
460:  �[36;1m  } else {�[0m
461:  �[36;1m    Write-Host "   ❌ Failed to read DLL: $($result.Error)"�[0m
462:  �[36;1m    $archResults[$dll.Name] = @{ valid = $false; error = $result.Error }�[0m
463:  �[36;1m    $allValid = $false�[0m
...

586:  🔍 Validating: php_tidy.dll
587:  Architecture: AMD64
588:  ✅ Correct architecture (x64)
589:  🔍 Validating: php_xdebug.dll
590:  Architecture: AMD64
591:  ✅ Correct architecture (x64)
592:  🔍 Validating: php_xsl.dll
593:  Architecture: AMD64
594:  ✅ Correct architecture (x64)
595:  🔍 Validating: php_zend_test.dll
596:  Architecture: AMD64
597:  ✅ Correct architecture (x64)
598:  🔍 Validating: php_zip.dll
599:  Architecture: AMD64
600:  ✅ Correct architecture (x64)
601:  ##[group]Run $ErrorActionPreference = "Continue"
602:  �[36;1m$ErrorActionPreference = "Continue"�[0m
603:  �[36;1m$phpExe = "D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\php.exe"�[0m
...

617:  �[36;1m  try {�[0m
618:  �[36;1m    $isZend = $extName -match 'xdebug'�[0m
619:  �[36;1m    $directive = if ($isZend) { "zend_extension" } else { "extension" }�[0m
620:  �[36;1m    �[0m
621:  �[36;1m    $output = & $phpExe -d "$directive=$($dll.FullName)" -m 2>&1 | Out-String�[0m
622:  �[36;1m    �[0m
623:  �[36;1m    if ($output -match $extName) {�[0m
624:  �[36;1m      Write-Host "   �� Extension loaded successfully"�[0m
625:  �[36;1m      $loadResults[$extName] = @{ loaded = $true; type = $directive }�[0m
626:  �[36;1m    } else {�[0m
627:  �[36;1m      Write-Host "   ❌ Extension not found in module list"�[0m
628:  �[36;1m      $loadResults[$extName] = @{ loaded = $false }�[0m
629:  �[36;1m      $allLoaded = $false�[0m
630:  �[36;1m    }�[0m
631:  �[36;1m  } catch {�[0m
632:  �[36;1m    Write-Host "   ❌ Error loading extension: $_"�[0m
633:  �[36;1m    $loadResults[$extName] = @{ loaded = $false; error = $_.Exception.Message }�[0m
634:  �[36;1m    $allLoaded = $false�[0m
...

714:  �� Extension loaded successfully
715:  🔌 Testing: sqlite3
716:  �� Extension loaded successfully
717:  🔌 Testing: sysvshm
718:  �� Extension loaded successfully
719:  🔌 Testing: tidy
720:  �� Extension loaded successfully
721:  🔌 Testing: xdebug
722:  �� Extension loaded successfully
723:  🔌 Testing: xsl
724:  �� Extension loaded successfully
725:  🔌 Testing: zend_test
726:  �� Extension loaded successfully
727:  🔌 Testing: zip
728:  �� Extension loaded successfully
729:  ##[group]Run $ErrorActionPreference = "Continue"
730:  �[36;1m$ErrorActionPreference = "Continue"�[0m
731:  �[36;1m$version = "8.3.28"�[0m
...

757:  �[36;1m    �[0m
758:  �[36;1m    try {�[0m
759:  �[36;1m      $fileName = [System.IO.Path]::GetFileName($depUrl)�[0m
760:  �[36;1m      $downloadPath = Join-Path "test-dependencies" $fileName�[0m
761:  �[36;1m      �[0m
762:  �[36;1m      Invoke-WebRequest -Uri $depUrl -OutFile $downloadPath -UseBasicParsing�[0m
763:  �[36;1m      �[0m
764:  �[36;1m      if (Test-Path $downloadPath) {�[0m
765:  �[36;1m        $fileSize = (Get-Item $downloadPath).Length / 1MB�[0m
766:  �[36;1m        Write-Host "✅ Downloaded: $fileName ($([math]::Round($fileSize, 2)) MB)"�[0m
767:  �[36;1m        �[0m
768:  �[36;1m        if ($fileName -match '\.(7z|zip)$') {�[0m
769:  �[36;1m          $extractPath = Join-Path "test-dependencies" $depName�[0m
770:  �[36;1m          �[0m
771:  �[36;1m          if ($fileName -match '\.7z$') {�[0m
772:  �[36;1m            if (Get-Command 7z -ErrorAction SilentlyContinue) {�[0m
773:  �[36;1m              & 7z x $downloadPath -o"$extractPath" -y | Out-Null�[0m
774:  �[36;1m              Write-Host "✅ Extracted to: $extractPath"�[0m
775:  �[36;1m            } else {�[0m
776:  �[36;1m              Write-Host "⚠️  7z not available, skipping extraction"�[0m
777:  �[36;1m            }�[0m
778:  �[36;1m          } else {�[0m
779:  �[36;1m            Expand-Archive -Path $downloadPath -DestinationPath $extractPath -Force�[0m
780:  �[36;1m            Write-Host "✅ Extracted to: $extractPath"�[0m
781:  �[36;1m          }�[0m
782:  �[36;1m          �[0m
783:  �[36;1m          $depResults[$depName] = @{ success = $true; path = $extractPath }�[0m
784:  �[36;1m        } else {�[0m
785:  �[36;1m          $depResults[$depName] = @{ success = $true; path = $downloadPath }�[0m
786:  �[36;1m        }�[0m
787:  �[36;1m      } else {�[0m
788:  �[36;1m        throw "Download failed"�[0m
789:  �[36;1m      }�[0m
790:  �[36;1m    } catch {�[0m
791:  �[36;1m      Write-Host "❌ Failed to download $depName : $_"�[0m
792:  �[36;1m      $depResults[$depName] = @{ success = $false; error = $_.Exception.Message }�[0m
793:  �[36;1m      $allSuccess = $false�[0m
794:  �[36;1m    }�[0m
795:  �[36;1m  }�[0m
796:  �[36;1m}�[0m
797:  �[36;1m�[0m
798:  �[36;1m$depResults | ConvertTo-Json -Depth 10 | Out-File "test-results/dependencies.json"�[0m
799:  �[36;1mecho "success=$allSuccess" >> $env:GITHUB_OUTPUT�[0m
800:  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
801:  ##[endgroup]
802:  === Phase 3.1: Download Dependencies ===
803:  📦 Downloading imagemagick...
804:  ✅ Downloaded: ImageMagick-7.1.2-8-portable-Q16-HDRI-x64.7z (20.35 MB)
805:  ✅ Extracted to: test-dependencies\imagemagick
806:  ##[group]Run $ErrorActionPreference = "Continue"
807:  �[36;1m$ErrorActionPreference = "Continue"�[0m
808:  �[36;1m$phpExe = "D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\php.exe"�[0m
809:  �[36;1m$extDir = "D:\a\module-php\module-php\test-php-8.3.28\php8.3.28\ext"�[0m
810:  �[36;1m�[0m
811:  �[36;1mWrite-Host "`n=== Phase 3.2: Test Extensions with Dependencies ==="�[0m
812:  �[36;1m�[0m
813:  �[36;1m$depDirs = Get-ChildItem -Path "test-dependencies" -Directory -ErrorAction SilentlyContinue�[0m
814:  �[36;1mforeach ($dir in $depDirs) {�[0m
...

823:  �[36;1mif ($imagickDll) {�[0m
824:  �[36;1m  Write-Host "`n🖼️  Testing imagick with ImageMagick..."�[0m
825:  �[36;1m  try {�[0m
826:  �[36;1m    $testCode = "echo class_exists('Imagick') ? 'OK' : 'FAIL';"�[0m
827:  �[36;1m    $output = & $phpExe -d "extension=$($imagickDll.FullName)" -r $testCode 2>&1�[0m
828:  �[36;1m    �[0m
829:  �[36;1m    if ($output -match 'OK') {�[0m
830:  �[36;1m      Write-Host "✅ Imagick class is available"�[0m
831:  �[36;1m      $depTestResults['imagick'] = @{ success = $true }�[0m
832:  �[36;1m    } else {�[0m
833:  �[36;1m      Write-Host "❌ Imagick class not available"�[0m
834:  �[36;1m      $depTestResults['imagick'] = @{ success = $false }�[0m
835:  �[36;1m      $allSuccess = $false�[0m
836:  �[36;1m    }�[0m
837:  �[36;1m  } catch {�[0m
838:  �[36;1m    Write-Host "❌ Error testing imagick: $_"�[0m
839:  �[36;1m    $depTestResults['imagick'] = @{ success = $false; error = $_.Exception.Message }�[0m
840:  �[36;1m    $allSuccess = $false�[0m
...

844:  �[36;1m$memcacheDll = Get-ChildItem -Path $extDir -Filter "*memcache*.dll" | Select-Object -First 1�[0m
845:  �[36;1mif ($memcacheDll) {�[0m
846:  �[36;1m  Write-Host "`n💾 Testing memcache..."�[0m
847:  �[36;1m  try {�[0m
848:  �[36;1m    $testCode = "echo function_exists('memcache_connect') ? 'OK' : 'FAIL';"�[0m
849:  �[36;1m    $output = & $phpExe -d "extension=$($memcacheDll.FullName)" -r $testCode 2>&1�[0m
850:  �[36;1m    �[0m
851:  �[36;1m    if ($output -match 'OK') {�[0m
852:  �[36;1m      Write-Host "✅ Memcache functions are available"�[0m
853:  �[36;1m      $depTestResults['memcache'] = @{ success = $true }�[0m
854:  �[36;1m    } else {�[0m
855:  �[36;1m      Write-Host "⚠️  Memcache check inconclusive"�[0m
856:  �[36;1m      $depTestResults['memcache'] = @{ success = $true; note = "Function check inconclusive" }�[0m
857:  �[36;1m    }�[0m
858:  �[36;1m  } catch {�[0m
859:  �[36;1m    Write-Host "❌ Error testing memcache: $_"�[0m
860:  �[36;1m    $depTestResults['memcache'] = @{ success = $false; error = $_.Exception.Message }�[0m
861:  �[36;1m  }�[0m
...

865:  �[36;1mif ($xdebugDll) {�[0m
866:  �[36;1m  Write-Host "`n🐛 Testing xdebug..."�[0m
867:  �[36;1m  try {�[0m
868:  �[36;1m    $testCode = "echo extension_loaded('xdebug') ? 'OK' : 'FAIL';"�[0m
869:  �[36;1m    $output = & $phpExe -d "zend_extension=$($xdebugDll.FullName)" -r $testCode 2>&1�[0m
870:  �[36;1m    �[0m
871:  �[36;1m    if ($output -match 'OK') {�[0m
872:  �[36;1m      Write-Host "✅ Xdebug is loaded"�[0m
873:  �[36;1m      $depTestResults['xdebug'] = @{ success = $true }�[0m
874:  �[36;1m    } else {�[0m
875:  �[36;1m      Write-Host "❌ Xdebug not loaded"�[0m
876:  �[36;1m      $depTestResults['xdebug'] = @{ success = $false }�[0m
877:  �[36;1m      $allSuccess = $false�[0m
878:  �[36;1m    }�[0m
879:  �[36;1m  } catch {�[0m
880:  �[36;1m    Write-Host "❌ Error testing xdebug: $_"�[0m
881:  �[36;1m    $depTestResults['xdebug'] = @{ success = $false; error = $_.Exception.Message }�[0m
882:  �[36;1m    $allSuccess = $false�[0m
...

898:  ##[group]Run $version = "8.3.28"
899:  �[36;1m$version = "8.3.28"�[0m
900:  �[36;1m$platform = "win10-intel"�[0m
901:  �[36;1m�[0m
902:  �[36;1mWrite-Host "`n=== Test Summary for PHP $version on $platform ==="�[0m
903:  �[36;1m�[0m
904:  �[36;1m$phase1_1 = "true" -eq "true"�[0m
905:  �[36;1m$phase1_2 = "true" -eq "true"�[0m
906:  �[36;1m$phase2_1 = "true" -eq "true"�[0m
907:  �[36;1m$phase2_2 = "True" -eq "true"�[0m
908:  �[36;1m$phase2_3 = "True" -eq "true"�[0m
909:  �[36;1m$phase3_1 = "True" -eq "true"�[0m
910:  �[36;1m$phase3_2 = "False" -eq "true"�[0m
911:  �[36;1m$phase4 = "" -eq "true"�[0m
912:  �[36;1m�[0m
913:  �[36;1m# Get error messages if any�[0m
914:  �[36;1m$error1_1 = ""�[0m
915:  �[36;1m$error1_2 = ""�[0m
916:  �[36;1m�[0m
917:  �[36;1m$summary = "### PHP $version - $platform`n`n"�[0m
918:  �[36;1m�[0m
919:  �[36;1m$summary += "**Phase 1: Basic PHP Validation**`n"�[0m
920:  �[36;1m$summary += "- Download & Extract: $(if ($phase1_1) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
921:  �[36;1mif (-not $phase1_1 -and $error1_1) {�[0m
922:  �[36;1m  $summary += "  - Error: $error1_1`n"�[0m
923:  �[36;1m}�[0m
924:  �[36;1m$summary += "- Verify Executable: $(if ($phase1_2) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
925:  �[36;1mif (-not $phase1_2 -and $error1_2) {�[0m
926:  �[36;1m  $summary += "  - Error: $error1_2`n"�[0m
927:  �[36;1m}�[0m
928:  �[36;1m$summary += "`n"�[0m
929:  �[36;1m�[0m
930:  �[36;1mif ($phase1_2) {�[0m
931:  �[36;1m  $summary += "**Phase 2: Extension Validation**`n"�[0m
932:  �[36;1m  $summary += "- Locate Extensions: $(if ($phase2_1) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
933:  �[36;1m  if ($phase2_1) {�[0m
934:  �[36;1m    $summary += "- Validate Architecture: $(if ($phase2_2) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
935:  �[36;1m    if ($phase2_2) {�[0m
936:  �[36;1m      $summary += "- Test Loading: $(if ($phase2_3) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
937:  �[36;1m    }�[0m
938:  �[36;1m  }�[0m
939:  �[36;1m  $summary += "`n"�[0m
940:  �[36;1m}�[0m
941:  �[36;1m�[0m
942:  �[36;1mif ($phase2_3) {�[0m
943:  �[36;1m  $summary += "**Phase 3: Dependency Validation**`n"�[0m
944:  �[36;1m  $summary += "- Download Dependencies: $(if ($phase3_1) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
945:  �[36;1m  if ($phase3_1) {�[0m
946:  �[36;1m    $summary += "- Test with Dependencies: $(if ($phase3_2) { '✅ PASS' } else { '❌ FAIL' })`n"�[0m
947:  �[36;1m  }�[0m
...

959:  �[36;1m    $summary += "**Extensions Tested:** $($extData.PSObject.Properties.Count)`n"�[0m
960:  �[36;1m    foreach ($ext in $extData.PSObject.Properties) {�[0m
961:  �[36;1m      $status = if ($ext.Value.success) { "✅" } else { "❌" }�[0m
962:  �[36;1m      $summary += "- $status $($ext.Name)`n"�[0m
963:  �[36;1m    }�[0m
964:  �[36;1m    $summary += "`n"�[0m
965:  �[36;1m  }�[0m
966:  �[36;1m}�[0m
967:  �[36;1m�[0m
968:  �[36;1m# Overall status�[0m
969:  �[36;1m$allPassed = $phase1_1 -and $phase1_2 -and $phase2_1 -and $phase2_2 -and $phase2_3 -and $phase3_1 -and $phase3_2 -and $phase4�[0m
970:  �[36;1m�[0m
971:  �[36;1mif ($allPassed) {�[0m
972:  �[36;1m  $summary += "**Overall Status:** ✅ ALL TESTS PASSED`n"�[0m
973:  �[36;1m} else {�[0m
974:  �[36;1m  $summary += "**Overall Status:** ❌ SOME TESTS FAILED`n"�[0m
975:  �[36;1m  $summary += "`n"�[0m
976:  �[36;1m  $summary += "<details>`n"�[0m
977:  �[36;1m  $summary += "<summary>💡 Click here for troubleshooting tips</summary>`n`n"�[0m
978:  �[36;1m  $summary += "- Check the workflow logs for detailed error messages`n"�[0m
979:  �[36;1m  $summary += "- Download the test artifacts for complete logs`n"�[0m
980:  �[36;1m  $summary += "- Verify the .7z archive structure matches expected format`n"�[0m
981:  �[36;1m  $summary += "- Ensure all required DLL dependencies are included`n"�[0m
982:  �[36;1m  $summary += "- Check that extensions are compatible with PHP $version`n"�[0m
983:  �[36;1m  $summary += "</details>`n"�[0m
984:  �[36;1m}�[0m
985:  �[36;1m�[0m
986:  �[36;1mWrite-Host $summary�[0m
987:  �[36;1m$summary | Out-File "test-results/summary-$platform.md"�[0m
988:  �[36;1m�[0m
989:  �[36;1m# Set job outcome based on test results�[0m
990:  �[36;1mif (-not $allPassed) {�[0m
991:  �[36;1m  Write-Host "##[error]Tests failed for PHP $version on $platform"�[0m
992:  �[36;1m  exit 1�[0m
993:  �[36;1m}�[0m
994:  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
995:  ##[endgroup]
996:  === Test Summary for PHP 8.3.28 on win10-intel ===
997:  ### PHP 8.3.28 - win10-intel
998:  **Phase 1: Basic PHP Validation**
999:  - Download & Extract: ✅ PASS
1000:  - Verify Executable: ✅ PASS
1001:  **Phase 2: Extension Validation**
1002:  - Locate Extensions: ✅ PASS
1003:  - Validate Architecture: ✅ PASS
1004:  - Test Loading: ✅ PASS
1005:  **Phase 3: Dependency Validation**
1006:  - Download Dependencies: ✅ PASS
1007:  - Test with Dependencies: ❌ FAIL
1008:  **Extensions Tested:** 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
...

1037:  - ✅ dl_test
1038:  - ✅ pdo_oci
1039:  - ✅ xsl
1040:  - ✅ tidy
1041:  - ✅ imagick
1042:  - ✅ xdebug
1043:  - ✅ pdo_odbc
1044:  - ✅ zend_test
1045:  - ✅ gmp
1046:  - ✅ zip
1047:  - ✅ fileinfo
1048:  - ✅ com_dotnet
1049:  - ✅ ftp
1050:  - ✅ dba
1051:  - ✅ sqlite3
1052:  **Overall Status:** ❌ SOME TESTS FAILED
1053:  <details>
1054:  <summary>💡 Click here for troubleshooting tips</summary>
1055:  - Check the workflow logs for detailed error messages
1056:  - Download the test artifacts for complete logs
1057:  - Verify the .7z archive structure matches expected format
1058:  - Ensure all required DLL dependencies are included
1059:  - Check that extensions are compatible with PHP 8.3.28
1060:  </details>
1061:  ##[error]Tests failed for PHP 8.3.28 on win10-intel
1062:  ##[error]Process completed with exit code 1.
1063:  ##[group]Run actions/upload-artifact@v4

@N6REJ
Copy link
Collaborator Author

N6REJ commented Dec 10, 2025

testing now added to verify extensions work. Some extensions aren't test able ( xdebug ) so those are skipped.
image
8.4.15 and 8.5.0 introduce memcache failure and other issues. 8.3.28 works as expected, should we release that seperately?

========================================================================================
[09-Dec-2025 20:05:16 America/Chicago] PHP Fatal error:  memcache_connect(): Too many open file descriptors: 2920 in E:\Bearsampp-development\sandbox\core\classes\bins\class.bin.memcached.php on line 212
Stack trace:
#0 E:\Bearsampp-development\sandbox\core\classes\bins\class.bin.memcached.php(212): memcache_connect('127.0.0.1', 11211)
#1 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax\ajax.memcached.php(41): BinMemcached->checkPort(11211)
#2 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax.php(54): include('E:\\Bearsampp-de...')
#3 {main}
========================================================================================
[2025-12-09 20:05:16] E_DEPRECATED Constant PDO::MYSQL_ATTR_INIT_COMMAND is deprecated since 8.5, use Pdo\Mysql::ATTR_INIT_COMMAND instead in /core/classes/bins/class.bin.mysql.php on line 258
  #-1 E:\Bearsampp-development\sandbox\core\classes\class.root.php(573): Root::debugStringBacktrace()
  #0 E:\Bearsampp-development\sandbox\core\classes\bins\class.bin.mysql.php(258): Root->errorHandler(8192, 'Constant PDO::M...', '/core/classes/b...', 258)
  #1 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax\ajax.mysql.php(38): BinMysql->checkPort('3306')
  #2 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax.php(54): include('E:\\Bearsampp-de...')

========================================================================================
[2025-12-09 20:05:16] E_DEPRECATED Constant PDO::MYSQL_ATTR_INIT_COMMAND is deprecated since 8.5, use Pdo\Mysql::ATTR_INIT_COMMAND instead in /core/classes/bins/class.bin.mysql.php on line 258
  #-1 E:\Bearsampp-development\sandbox\core\classes\class.root.php(573): Root::debugStringBacktrace()
  #0 E:\Bearsampp-development\sandbox\core\classes\bins\class.bin.mysql.php(258): Root->errorHandler(8192, 'Constant PDO::M...', '/core/classes/b...', 258)
  #1 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax\ajax.summary.php(134): BinMysql->checkPort('3306')
  #2 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax.php(54): include('E:\\Bearsampp-de...')

[09-Dec-2025 20:05:16 America/Chicago] PHP Fatal error:  memcache_connect(): Too many open file descriptors: 3052 in E:\Bearsampp-development\sandbox\core\classes\bins\class.bin.memcached.php on line 212
Stack trace:
#0 E:\Bearsampp-development\sandbox\core\classes\bins\class.bin.memcached.php(212): memcache_connect('127.0.0.1', 11211)
#1 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax\ajax.summary.php(176): BinMemcached->checkPort(11211)
#2 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax.php(54): include('E:\\Bearsampp-de...')
#3 {main}
[2025-12-09 20:05:16] E_DEPRECATED Function curl_close() is deprecated since 8.5, as it has no effect since PHP 8.0 in /core/classes/class.util.php on line 1574
  #-1 E:\Bearsampp-development\sandbox\core\classes\class.root.php(573): Root::debugStringBacktrace()
  #0 E:\Bearsampp-development\sandbox\core\classes\class.util.php(1574): Root->errorHandler(8192, 'Function curl_c...', '/core/classes/c...', 1574)
  #1 E:\Bearsampp-development\sandbox\core\classes\class.util.php(1268): Util::getApiJson('https://api.git...')
  #2 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax\ajax.latestversion.php(39): Util::getLatestVersion('https://api.git...')
  #3 E:\Bearsampp-development\sandbox\core\resources\homepage\ajax.php(54): include('E:\\Bearsampp-de...')

@jwaisner jwaisner merged commit a930c4c into main Dec 10, 2025
20 of 24 checks passed
@jwaisner jwaisner deleted the fetch branch December 10, 2025 04:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement ✨ Improve program good first issue 🐣 Should be easy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants