Skip to content

Commit ca7120a

Browse files
committed
Merge branch 'master' into perf/uri-rfc3986-reads
2 parents 05b9aa2 + 56d1ffc commit ca7120a

1,789 files changed

Lines changed: 82139 additions & 50169 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616

1717
/.github @TimWolla
1818
/build/gen_stub.php @kocsismate
19-
/ext/bcmath @ndossche @SakiTakamachi
19+
/ext/bcmath @SakiTakamachi
2020
/ext/curl @adoy
2121
/ext/date @derickr
2222
/ext/dba @Girgias
23-
/ext/dom @ndossche
23+
/ext/dom @devnexen
2424
/ext/ffi @dstogov
2525
/ext/gd @devnexen
2626
/ext/gettext @devnexen
2727
/ext/gmp @Girgias
2828
/ext/intl @devnexen
29+
/ext/libxml @devnexen
2930
/ext/json @bukka
30-
/ext/lexbor @kocsismate @ndossche
31-
/ext/libxml @ndossche
31+
/ext/lexbor @kocsismate
3232
/ext/mbstring @alexdowad @youkidearitai
3333
/ext/mysqli @bukka @kamil-tekiela
3434
/ext/mysqlnd @bukka @kamil-tekiela @SakiTakamachi
@@ -47,17 +47,16 @@
4747
/ext/random @TimWolla @zeriyoshi
4848
/ext/reflection @DanielEScherzer
4949
/ext/session @Girgias
50-
/ext/simplexml @ndossche
51-
/ext/soap @ndossche
50+
/ext/simplexml @devnexen
51+
/ext/soap @devnexen
5252
/ext/sockets @devnexen
5353
/ext/spl @Girgias
5454
/ext/standard @bukka
55-
/ext/tidy @ndossche
5655
/ext/uri @kocsismate @TimWolla
57-
/ext/xml @ndossche
58-
/ext/xmlreader @ndossche
59-
/ext/xmlwriter @ndossche
60-
/ext/xsl @ndossche
56+
/ext/xml @devnexen
57+
/ext/xmlreader @devnexen
58+
/ext/xmlwriter @devnexen
59+
/ext/xsl @devnexen
6160
/main @bukka
6261
/sapi/fpm @bukka
6362
/Zend/Optimizer @dstogov

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ body:
3131
Please make sure that the used PHP version [is a supported version](https://www.php.net/supported-versions.php).
3232
placeholder: |
3333
PHP 8.5.2 (cli) (built: Jan 21 2026 17:35:28) (NTS)
34-
Copyright (c) The PHP Group
34+
Copyright © The PHP Group and Contributors
3535
Built by Ubuntu
36-
Zend Engine v4.5.2, Copyright (c) Zend Technologies
37-
with Zend OPcache v8.5.2, Copyright (c), by Zend Technologies
36+
Zend Engine v4.5.2, Copyright © Zend by Perforce
37+
with Zend OPcache v8.5.2, Copyright ©, Zend by Perforce
3838
render: plain
3939
validations:
4040
required: true

.github/actions/setup-windows/action.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ runs:
1616
- name: Setup PostgreSQL
1717
shell: pwsh
1818
run: |
19-
Set-Service -Name "postgresql-x64-14" -StartupType manual -Status Running
19+
$postgresService = if ($env:PHP_BUILD_CRT -eq "vs18") { "postgresql-x64-17" } else { "postgresql-x64-14" }
20+
Set-Service -Name $postgresService -StartupType manual -Status Running
2021
pwsh -Command { $env:PGPASSWORD="root"; & "$env:PGBIN\psql" -U postgres -c "ALTER USER postgres WITH PASSWORD 'Password12!';" }

.github/matrix.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re
6161
$test_macos = in_array('CI: macOS', $labels, true);
6262
$test_msan = in_array('CI: MSAN', $labels, true);
6363
$test_opcache_variation = in_array('CI: Opcache Variation', $labels, true);
64-
$test_pecl = in_array('CI: PECL', $labels, true);
6564
$test_solaris = in_array('CI: Solaris', $labels, true);
6665
$test_windows = in_array('CI: Windows', $labels, true);
6766

@@ -137,22 +136,24 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re
137136
if ($all_jobs || $test_opcache_variation) {
138137
$jobs['OPCACHE_VARIATION'] = true;
139138
}
140-
if (($all_jobs && $ref === 'master') || $test_pecl) {
141-
$jobs['PECL'] = true;
142-
}
143139
if (version_compare($php_version, '8.6', '>=') && ($all_jobs || $test_solaris)) {
144140
$jobs['SOLARIS'] = true;
145141
}
146142
if ($all_jobs || !$no_jobs || $test_windows) {
147-
$jobs['WINDOWS']['matrix'] = $all_variations
148-
? ['include' => [
149-
['asan' => true, 'opcache' => true, 'x64' => true, 'zts' => true],
150-
['asan' => false, 'opcache' => false, 'x64' => false, 'zts' => false],
151-
]]
152-
: ['include' => [['asan' => false, 'opcache' => true, 'x64' => true, 'zts' => true]]];
153-
$jobs['WINDOWS']['config'] = version_compare($php_version, '8.4', '>=')
154-
? ['vs_crt_version' => 'vs17']
155-
: ['vs_crt_version' => 'vs16'];
143+
$matrix = [['asan' => false, 'opcache' => true, 'x64' => true, 'zts' => true]];
144+
if ($all_variations) {
145+
$matrix[] = ['asan' => true, 'opcache' => true, 'x64' => true, 'zts' => true];
146+
$matrix[] = ['asan' => false, 'opcache' => false, 'x64' => false, 'zts' => false];
147+
if (version_compare($php_version, '8.6', '>=')) {
148+
$matrix[] = ['asan' => false, 'opcache' => true, 'x64' => true, 'zts' => true, 'clang' => true];
149+
}
150+
}
151+
$jobs['WINDOWS']['matrix'] = ['include' => $matrix];
152+
$jobs['WINDOWS']['config'] = match (true) {
153+
version_compare($php_version, '8.6', '>=') => ['vs_crt_version' => 'vs18', 'runs_on' => 'windows-2025-vs2026'],
154+
version_compare($php_version, '8.4', '>=') => ['vs_crt_version' => 'vs17', 'runs_on' => 'windows-2022'],
155+
default => ['vs_crt_version' => 'vs16', 'runs_on' => 'windows-2022'],
156+
};
156157
}
157158
if ($all_jobs || !$no_jobs || $test_freebsd) {
158159
$jobs['FREEBSD']['matrix'] = $all_variations && version_compare($php_version, '8.3', '>=')

.github/scripts/download-bundled/uriparser.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ cd "$(dirname "$0")/../../.."
55
tmp_dir=/tmp/php-src-download-bundled/uriparser
66
rm -rf "$tmp_dir"
77

8-
revision=refs/tags/uriparser-1.0.0
8+
revision=refs/tags/uriparser-1.0.2
99

1010
git clone --depth 1 --revision="$revision" https://github.com/uriparser/uriparser.git "$tmp_dir"
1111

.github/scripts/windows/build_task.bat

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,18 @@ if %errorlevel% neq 0 exit /b 3
2626
if "%THREAD_SAFE%" equ "0" set ADD_CONF=%ADD_CONF% --disable-zts
2727
if "%INTRINSICS%" neq "" set ADD_CONF=%ADD_CONF% --enable-native-intrinsics=%INTRINSICS%
2828
if "%ASAN%" equ "1" set ADD_CONF=%ADD_CONF% --enable-sanitizer --enable-debug-pack
29+
if "%CLANG_TOOLSET%" equ "1" set ADD_CONF=%ADD_CONF% --with-toolset=clang
2930

3031
rem C4018: comparison: signed/unsigned mismatch
3132
rem C4146: unary minus operator applied to unsigned type
3233
rem C4244: type conversion, possible loss of data
3334
rem C4267: 'size_t' type conversion, possible loss of data
34-
set CFLAGS=/W3 /WX /wd4018 /wd4146 /wd4244 /wd4267
35+
if "%CLANG_TOOLSET%" equ "1" (
36+
rem Clang is much stricter than MSVC, produces too many warnings that would fail the build with /WX
37+
set CFLAGS=/W3 /wd4018 /wd4146 /wd4244 /wd4267
38+
) else (
39+
set CFLAGS=/W3 /WX /wd4018 /wd4146 /wd4244 /wd4267
40+
)
3541

3642
cmd /c configure.bat ^
3743
--enable-snapshot-build ^

.github/scripts/windows/find-vs-toolset.bat

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
setlocal enabledelayedexpansion
44

55
if "%~1"=="" (
6-
echo ERROR: Usage: %~nx0 [vc14^|vc15^|vs16^|vs17]
6+
echo ERROR: Usage: %~nx0 [vc14^|vc15^|vs16^|vs17^|vs18]
77
exit /b 1
88
)
99

1010
set "toolsets_vc14=14.0"
1111
set "toolsets_vc15="
1212
set "toolsets_vs16="
1313
set "toolsets_vs17="
14+
set "toolsets_vs18="
1415

1516

1617
for /f "usebackq tokens=*" %%I in (`vswhere.exe -latest -find "VC\Tools\MSVC"`) do set "MSVCDIR=%%I"
@@ -30,8 +31,10 @@ for /f "delims=" %%D in ('dir /b /ad "%MSVCDIR%"') do (
3031
set "toolsets_vc15=%%D"
3132
) else if !min! LEQ 29 (
3233
set "toolsets_vs16=%%D"
33-
) else (
34+
) else if !min! LEQ 49 (
3435
set "toolsets_vs17=%%D"
36+
) else (
37+
set "toolsets_vs18=%%D"
3538
)
3639
)
3740
)

.github/workflows/test-suite.yml

Lines changed: 4 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -827,133 +827,26 @@ jobs:
827827
uses: ./.github/actions/test-libmysqlclient
828828
- name: Verify generated files are up to date
829829
uses: ./.github/actions/verify-generated-files
830-
PECL:
831-
if: ${{ fromJson(inputs.branch).jobs.PECL }}
832-
runs-on: ubuntu-24.04
833-
steps:
834-
- name: git checkout PHP
835-
uses: actions/checkout@v6
836-
with:
837-
path: php
838-
ref: ${{ fromJson(inputs.branch).ref }}
839-
# Used for ccache action
840-
- name: Move .github
841-
run: mv php/.github .
842-
- name: git checkout apcu
843-
uses: actions/checkout@v6
844-
with:
845-
repository: krakjoe/apcu
846-
path: apcu
847-
- name: git checkout imagick
848-
uses: actions/checkout@v6
849-
with:
850-
repository: Imagick/imagick
851-
path: imagick
852-
- name: git checkout memcached
853-
uses: actions/checkout@v6
854-
with:
855-
repository: php-memcached-dev/php-memcached
856-
path: memcached
857-
- name: git checkout redis
858-
if: ${{ false }}
859-
uses: actions/checkout@v6
860-
with:
861-
repository: phpredis/phpredis
862-
path: redis
863-
- name: git checkout xdebug
864-
uses: actions/checkout@v6
865-
with:
866-
repository: xdebug/xdebug
867-
path: xdebug
868-
- name: git checkout yaml
869-
uses: actions/checkout@v6
870-
with:
871-
repository: php/pecl-file_formats-yaml
872-
path: yaml
873-
- name: apt
874-
run: |
875-
sudo apt-get update
876-
sudo apt-get install -y --no-install-recommends \
877-
ccache \
878-
libmemcached-dev \
879-
imagemagick \
880-
libmagickwand-dev \
881-
bison \
882-
re2c
883-
- name: ccache
884-
uses: ./.github/actions/ccache
885-
with:
886-
name: "${{ github.job }}"
887-
php_directory: php
888-
- name: build PHP
889-
run: |
890-
cd php
891-
./buildconf --force
892-
./configure \
893-
--enable-option-checking=fatal \
894-
--prefix=/opt/php \
895-
--enable-cli \
896-
--disable-all \
897-
--enable-session \
898-
--enable-werror
899-
make -j$(/usr/bin/nproc)
900-
sudo make install
901-
- name: build apcu
902-
run: |
903-
cd apcu
904-
/opt/php/bin/phpize
905-
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
906-
make -j$(/usr/bin/nproc)
907-
- name: build imagick
908-
run: |
909-
cd imagick
910-
/opt/php/bin/phpize
911-
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
912-
make -j$(/usr/bin/nproc)
913-
- name: build memcached
914-
run: |
915-
cd memcached
916-
/opt/php/bin/phpize
917-
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
918-
make -j$(/usr/bin/nproc)
919-
- name: build redis
920-
if: ${{ false }}
921-
run: |
922-
cd redis
923-
/opt/php/bin/phpize
924-
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
925-
make -j$(/usr/bin/nproc)
926-
- name: build xdebug
927-
run: |
928-
cd xdebug
929-
/opt/php/bin/phpize
930-
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
931-
make -j$(/usr/bin/nproc)
932-
- name: build yaml
933-
run: |
934-
cd yaml
935-
/opt/php/bin/phpize
936-
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
937-
make -j$(/usr/bin/nproc)
938830
WINDOWS:
939831
if: ${{ fromJson(inputs.branch).jobs.WINDOWS }}
940832
strategy:
941833
fail-fast: false
942834
matrix: ${{ fromJson(inputs.branch).jobs.WINDOWS.matrix }}
943-
name: "WINDOWS_${{ matrix.x64 && 'X64' || 'X86' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}${{ matrix.asan && '_ASAN' || ''}}"
944-
runs-on: windows-2022
835+
name: "WINDOWS_${{ matrix.x64 && 'X64' || 'X86' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}${{ matrix.asan && '_ASAN' || ''}}${{ matrix.clang && '_CLANG' || ''}}"
836+
runs-on: ${{ fromJson(inputs.branch).jobs.WINDOWS.config.runs_on }}
945837
env:
946838
PHP_BUILD_CACHE_BASE_DIR: C:\build-cache
947839
PHP_BUILD_OBJ_DIR: C:\obj
948840
PHP_BUILD_CACHE_SDK_DIR: C:\build-cache\sdk
949-
PHP_BUILD_SDK_BRANCH: php-sdk-2.5.0
841+
PHP_BUILD_SDK_BRANCH: php-sdk-2.7.1
950842
PHP_BUILD_CRT: ${{ fromJson(inputs.branch).jobs.WINDOWS.config.vs_crt_version }}
951843
PLATFORM: ${{ matrix.x64 && 'x64' || 'x86' }}
952844
THREAD_SAFE: "${{ matrix.zts && '1' || '0' }}"
953845
INTRINSICS: "${{ matrix.zts && 'AVX2' || '' }}"
954846
PARALLEL: -j2
955847
OPCACHE: "${{ matrix.opcache && '1' || '0' }}"
956848
ASAN: "${{ matrix.asan && '1' || '0' }}"
849+
CLANG_TOOLSET: "${{ matrix.clang && '1' || '0' }}"
957850
steps:
958851
- name: git config
959852
run: git config --global core.autocrlf false && git config --global core.eol lf

.github/workflows/test.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ name: Test
22
on:
33
push:
44
paths-ignore: &ignore_paths
5+
- .circleci/**
6+
- .github/CODEOWNERS
7+
- .github/ISSUE_TEMPLATE/**
8+
- '**/*.md'
9+
- '**/*.rst'
510
- docs/**
11+
- EXTENSIONS
12+
- LICENSE
613
- NEWS
714
- UPGRADING
815
- UPGRADING.INTERNALS
9-
- '**/README.*'
10-
- CONTRIBUTING.md
11-
- CODING_STANDARDS.md
12-
- .cirrus.yml
13-
- .circleci/**
1416
branches:
1517
- PHP-8.2
1618
- PHP-8.3

CODING_STANDARDS.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,16 @@ rewritten to comply with these rules.
7979
return value for functions that perform some operation that may
8080
succeed or fail.
8181

82+
1. When throwing a `ValueError` or emitting a warning, use consistent
83+
phrasing for error messages. Common patterns are:
84+
85+
* Type errors: `must be of type int` (use the type name, not e.g. `must be an integer`)
86+
* Range/boundary: `must be between X and Y` / `must be greater than [or equal to] X` / `must be less than X` / `must be finite`
87+
* String constraints: `must not contain any null bytes` / `must not be empty` / `must be a single character`
88+
* Valid value: `must be a valid X` (e.g. `must be a valid encoding`, `must be a valid calendar ID`)
89+
* Enum-like: `must be one of X, Y, or Z`
90+
* Structural: `must have X` / `must have key X` / `must have N elements`
91+
8292
## User functions/methods naming conventions
8393

8494
1. Function names for user-level functions should be enclosed with in the

0 commit comments

Comments
 (0)