From e691c1c4d5bcee43f1e76f184fb45e3ba892a8d4 Mon Sep 17 00:00:00 2001 From: PangLARS Date: Fri, 24 Apr 2026 16:25:15 +0800 Subject: [PATCH 1/2] SPECS: add php-{curl,gd,openssl,pcntl,zip,zlib} Signed-off-by: PangLARS --- ...x-SNI-tests-for-bugs-80770-and-74796.patch | 168 ++++++++++++++++++ SPECS/php/php.spec | 112 +++++++++++- 2 files changed, 278 insertions(+), 2 deletions(-) create mode 100644 SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch diff --git a/SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch b/SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch new file mode 100644 index 0000000000..50e2e9d050 --- /dev/null +++ b/SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch @@ -0,0 +1,168 @@ +From 178a30b9e700d32a8aac4f49864838829bedd389 Mon Sep 17 00:00:00 2001 +From: Jakub Zelenka +Date: Sat, 4 Apr 2026 00:28:29 +0200 +Subject: [PATCH] Fix SNI tests for bugs #80770 and #74796 + +Upstream: https://github.com/php/php-src/commit/178a30b9e700d32a8aac4f49864838829bedd389 + +--- + ext/openssl/tests/bug74796.phpt | 29 ++++++++++++++++++++------ + ext/openssl/tests/bug80770.phpt | 31 ++++++++++++++++------------ + 2 files changed, 41 insertions(+), 19 deletions(-) + +diff --git a/ext/openssl/tests/bug74796.phpt b/ext/openssl/tests/bug74796.phpt +index b3f594d5e60f..8ec5590c064f 100644 +--- a/ext/openssl/tests/bug74796.phpt ++++ b/ext/openssl/tests/bug74796.phpt +@@ -12,13 +12,24 @@ if (substr(PHP_OS, 0, 3) == 'WIN') { + --FILE-- + saveCaCert($caFile); ++$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile); ++$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile); ++$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile); ++ + $serverCode = <<<'CODE' + $serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN; + $ctx = stream_context_create(['ssl' => [ + 'SNI_server_certs' => [ +- "cs.php.net" => __DIR__ . "/sni_server_cs.pem", +- "uk.php.net" => __DIR__ . "/sni_server_uk.pem", +- "us.php.net" => __DIR__ . "/sni_server_us.pem" ++ "cs.php.net" => '%s', ++ "uk.php.net" => '%s', ++ "us.php.net" => '%s', + ] + ]]); + +@@ -33,6 +44,7 @@ $serverCode = <<<'CODE' + + phpt_wait(); + CODE; ++$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile); + + $proxyCode = <<<'CODE' + function parse_sni_from_client_hello($data) { +@@ -134,7 +146,7 @@ CODE; + $clientCode = <<<'CODE' + $clientCtx = stream_context_create([ + 'ssl' => [ +- 'cafile' => __DIR__ . '/sni_server_ca.pem', ++ 'cafile' => '%s', + 'verify_peer' => true, + 'verify_peer_name' => true, + ], +@@ -155,16 +167,21 @@ $clientCode = <<<'CODE' + + phpt_notify('server'); + CODE; ++$clientCode = sprintf($clientCode, $caFile); + + include 'ServerClientTestCase.inc'; + ServerClientTestCase::getInstance()->run($clientCode, [ +- 'server' => $serverCode, +- 'proxy' => $proxyCode, ++ 'server' => $serverCode, ++ 'proxy' => $proxyCode, + ]); + ?> + --CLEAN-- + + --EXPECT-- + string(19) "Hello from server 0" +diff --git a/ext/openssl/tests/bug80770.phpt b/ext/openssl/tests/bug80770.phpt +index 9100aaa5aa18..21860dc78eb7 100644 +--- a/ext/openssl/tests/bug80770.phpt ++++ b/ext/openssl/tests/bug80770.phpt +@@ -11,14 +11,25 @@ if (OPENSSL_VERSION_NUMBER < 0x10101000) die("skip OpenSSL v1.1.1 required"); + saveCaCert($caCertFile); ++$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile); ++$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile); ++$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile); ++$certificateGenerator->saveNewCertAsFileWithKey('Bug80770 Test Client', $clientCertFile); + + $serverCode = <<<'CODE' + $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN; + $ctx = stream_context_create(['ssl' => [ + 'SNI_server_certs' => [ +- "cs.php.net" => __DIR__ . "/sni_server_cs.pem", +- "uk.php.net" => __DIR__ . "/sni_server_uk.pem", +- "us.php.net" => __DIR__ . "/sni_server_us.pem" ++ "cs.php.net" => '%s', ++ "uk.php.net" => '%s', ++ "us.php.net" => '%s', + ], + 'verify_peer' => true, + 'cafile' => '%s', +@@ -28,7 +39,6 @@ $serverCode = <<<'CODE' + ]]); + $server = stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr, $flags, $ctx); + phpt_notify_server_start($server); +- + $client = stream_socket_accept($server, 30); + if ($client) { + $success = stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_SERVER); +@@ -43,7 +53,7 @@ $serverCode = <<<'CODE' + phpt_notify(message: "ACCEPT_FAILED"); + } + CODE; +-$serverCode = sprintf($serverCode, $caCertFile); ++$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile, $caCertFile); + + $clientCode = <<<'CODE' + $flags = STREAM_CLIENT_CONNECT; +@@ -58,19 +68,11 @@ $clientCode = <<<'CODE' + if ($client) { + stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); + } +- + $result = phpt_wait(); + echo trim($result); + CODE; + $clientCode = sprintf($clientCode, $clientCertFile); + +-include 'CertificateGenerator.inc'; +- +-// Generate CA and client certificate signed by that CA +-$certificateGenerator = new CertificateGenerator(); +-$certificateGenerator->saveCaCert($caCertFile); +-$certificateGenerator->saveNewCertAsFileWithKey('Bug80770 Test Client', $clientCertFile); +- + include 'ServerClientTestCase.inc'; + ServerClientTestCase::getInstance()->run($clientCode, $serverCode); + ?> +@@ -78,6 +80,9 @@ ServerClientTestCase::getInstance()->run($clientCode, $serverCode); + + --EXPECTF-- + CLIENT_CERT_CAPTURED +-- +2.51.0 + diff --git a/SPECS/php/php.spec b/SPECS/php/php.spec index bfb3b8d20b..3e9fa122ad 100644 --- a/SPECS/php/php.spec +++ b/SPECS/php/php.spec @@ -1,6 +1,7 @@ # SPDX-FileCopyrightText: (C) 2026 Institute of Software, Chinese Academy of Sciences (ISCAS) # SPDX-FileCopyrightText: (C) 2026 openRuyi Project Contributors # SPDX-FileContributor: Zephyr Du +# SPDX-FileContributor: panglars # # SPDX-License-Identifier: MulanPSL-2.0 @@ -20,11 +21,23 @@ URL: https://www.php.net VCS: git:https://github.com/php/php-src #!RemoteAsset: sha256:e5eba93fd6dd3241d0e61e932eb99a3783b40568553fb0e511b660ecd863a049 Source0: https://www.php.net/distributions/%{name}-%{version}.tar.gz +# Upstream fix for expired SNI certificates in bug74796 and bug80770 tests. +# This patch will merge in future version +Patch0001: 0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch BuildSystem: autotools BuildOption(conf): --enable-re2c-cgoto BuildOption(conf): --with-config-file-path=%{_sysconfdir}/php -BuildOption(conf): --with-config-file-scan-dir=%{_sysconfdir}/php.d +BuildOption(conf): --with-config-file-scan-dir=%{_sysconfdir}/php/conf.d +BuildOption(conf): --with-curl=shared +BuildOption(conf): --enable-gd=shared +BuildOption(conf): --with-freetype +BuildOption(conf): --with-jpeg +BuildOption(conf): --with-openssl=shared +BuildOption(conf): --enable-pcntl=shared +BuildOption(conf): --with-zip=shared +BuildOption(conf): --with-zlib=shared +BuildOption(conf): EXTENSION_DIR=%{_libdir}/php/extensions BuildOption(build): CFLAGS="$RPM_OPT_FLAGS" BuildOption(build): LDFLAGS="$RPM_LD_FLAGS" BuildOption(install): PREFIX=%{_prefix} @@ -36,11 +49,19 @@ BuildOption(check): REPORT_EXIT_STATUS=1 BuildOption(check): NO_INTERACTION=1 BuildOption(check): SKIP_ONLINE_TESTS=1 BuildOption(check): SKIP_SLOW_TESTS=1 +BuildOption(check): TESTS="-r php-test-list" BuildRequires: re2c BuildRequires: bison +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(libjpeg) +BuildRequires: pkgconfig(libcurl) +BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(libzip) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(zlib) %description PHP is a popular general-purpose scripting language that is especially suited @@ -54,16 +75,79 @@ Requires: %{name}%{?_isa} = %{version}-%{release} %description devel Includes and definitions for developing with php. +%package curl +Summary: PHP libcurl integration +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description curl +This package provides the PHP extension for libcurl. + +%package gd +Summary: PHP GD graphics extension +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description gd +This package provides the PHP extension for creating and manipulating images +using the GD graphics library. + +%package openssl +Summary: PHP OpenSSL integration +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description openssl +This package provides the PHP extension for OpenSSL cryptography and TLS +stream support. + +%package pcntl +Summary: PHP process control extension +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description pcntl +This package provides the PHP extension for Unix process control functions. + +%package zip +Summary: PHP ZIP archive extension +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description zip +This package provides the PHP extension for reading and writing ZIP archives. + +%package zlib +Summary: PHP zlib compression extension +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description zlib +This package provides the PHP extension for zlib compression support. + +%check -p +# Reason: these tests depend on OBS worker environment details, unavailable +# optional extensions, or file-cache paths rather than extension build success. +find . -type f -name '*.phpt' \ + ! -path './ext/curl/tests/curl_setopt_ssl.phpt' \ + ! -path './ext/opcache/tests/bug78185.phpt' \ + ! -path './ext/opcache/tests/gh16979_check_file_cache_function.phpt' \ + ! -path './ext/openssl/tests/sni_server.phpt' \ + ! -path './ext/openssl/tests/sni_server_key_cert.phpt' \ + ! -path './ext/pcntl/tests/pcntl_cpuaffinity.phpt' \ + ! -path './ext/pcntl/tests/pcntl_getcpu.phpt' \ + ! -path './ext/pdo_pgsql/tests/transations_deprecations.phpt' \ + | sort > php-test-list + %install -a install -D -m644 "php.ini-production" "%{buildroot}/etc/php/php.ini" install -d -m755 "%{buildroot}/etc/php/conf.d/" +for ext in curl gd openssl pcntl zip zlib; do + echo "extension=${ext}.so" > "%{buildroot}%{_sysconfdir}/php/conf.d/20-${ext}.ini" +done rm -r %{buildroot}%{_libdir}/build %files -%license LICENSE %doc README.md NEWS +%license LICENSE %{_bindir}/* %{_datadir}/man/* +%dir %{_libdir}/php +%dir %{_libdir}/php/extensions # main configuration file %{_sysconfdir}/php/php.ini # main configuration directory @@ -73,5 +157,29 @@ rm -r %{buildroot}%{_libdir}/build %files devel %{_includedir}/php/* +%files curl +%config(noreplace) %{_sysconfdir}/php/conf.d/20-curl.ini +%{_libdir}/php/extensions/curl.so + +%files gd +%config(noreplace) %{_sysconfdir}/php/conf.d/20-gd.ini +%{_libdir}/php/extensions/gd.so + +%files openssl +%config(noreplace) %{_sysconfdir}/php/conf.d/20-openssl.ini +%{_libdir}/php/extensions/openssl.so + +%files pcntl +%config(noreplace) %{_sysconfdir}/php/conf.d/20-pcntl.ini +%{_libdir}/php/extensions/pcntl.so + +%files zip +%config(noreplace) %{_sysconfdir}/php/conf.d/20-zip.ini +%{_libdir}/php/extensions/zip.so + +%files zlib +%config(noreplace) %{_sysconfdir}/php/conf.d/20-zlib.ini +%{_libdir}/php/extensions/zlib.so + %changelog %autochangelog From 1f1ab8b09914644b1d10620b5c450fa8ce96ae56 Mon Sep 17 00:00:00 2001 From: PangLARS Date: Sun, 26 Apr 2026 23:27:49 +0800 Subject: [PATCH 2/2] SPECS: add php-fpdf Signed-off-by: PangLARS --- SPECS/php-fpdf/php-fpdf.spec | 53 ++++++ ...x-SNI-tests-for-bugs-80770-and-74796.patch | 168 ------------------ SPECS/php/php.spec | 6 +- 3 files changed, 54 insertions(+), 173 deletions(-) create mode 100644 SPECS/php-fpdf/php-fpdf.spec delete mode 100644 SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch diff --git a/SPECS/php-fpdf/php-fpdf.spec b/SPECS/php-fpdf/php-fpdf.spec new file mode 100644 index 0000000000..decd5dd626 --- /dev/null +++ b/SPECS/php-fpdf/php-fpdf.spec @@ -0,0 +1,53 @@ +# SPDX-FileCopyrightText: (C) 2026 Institute of Software, Chinese Academy of Sciences (ISCAS) +# SPDX-FileCopyrightText: (C) 2026 openRuyi Project Contributors +# SPDX-FileContributor: panglars +# +# SPDX-License-Identifier: MulanPSL-2.0 + +%global fpdf_dir %{_datadir}/php/fpdf + +Name: php-fpdf +Version: 1.8.6 +Release: %autorelease +Summary: PHP class to generate PDF files +License: MIT +URL: http://www.fpdf.org +VCS: git:https://github.com/Setasign/FPDF.git +#!RemoteAsset: sha256:7f09cdfc9ef75d53d79bb4d56fc7baefc80a9d87b38284f058fefe845dfe5414 +Source: https://github.com/Setasign/FPDF/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz +BuildArch: noarch +# upstream ships a plain PHP library, no build system + +BuildRequires: php + +Requires: php +Requires: php-gd +Requires: php-zlib + +%description +FPDF is a PHP class that generates PDF files with pure PHP, without using +the PDFlib library. It provides high-level functions for page layout, text, +images, colors, links, font handling, and page compression. + +%prep +%autosetup -n FPDF-%{version} + +%install +install -d -m0755 %{buildroot}%{fpdf_dir} +cp -a fpdf.php composer.json font makefont %{buildroot}%{fpdf_dir}/ + +%check +php -l fpdf.php + +%files +%doc README.md FAQ.htm changelog.htm install.txt doc fpdf.css +%license license.txt +%dir %{_datadir}/php +%dir %{fpdf_dir} +%{fpdf_dir}/composer.json +%{fpdf_dir}/fpdf.php +%{fpdf_dir}/font/ +%{fpdf_dir}/makefont/ + +%changelog +%autochangelog diff --git a/SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch b/SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch deleted file mode 100644 index 50e2e9d050..0000000000 --- a/SPECS/php/0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 178a30b9e700d32a8aac4f49864838829bedd389 Mon Sep 17 00:00:00 2001 -From: Jakub Zelenka -Date: Sat, 4 Apr 2026 00:28:29 +0200 -Subject: [PATCH] Fix SNI tests for bugs #80770 and #74796 - -Upstream: https://github.com/php/php-src/commit/178a30b9e700d32a8aac4f49864838829bedd389 - ---- - ext/openssl/tests/bug74796.phpt | 29 ++++++++++++++++++++------ - ext/openssl/tests/bug80770.phpt | 31 ++++++++++++++++------------ - 2 files changed, 41 insertions(+), 19 deletions(-) - -diff --git a/ext/openssl/tests/bug74796.phpt b/ext/openssl/tests/bug74796.phpt -index b3f594d5e60f..8ec5590c064f 100644 ---- a/ext/openssl/tests/bug74796.phpt -+++ b/ext/openssl/tests/bug74796.phpt -@@ -12,13 +12,24 @@ if (substr(PHP_OS, 0, 3) == 'WIN') { - --FILE-- - saveCaCert($caFile); -+$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile); -+$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile); -+$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile); -+ - $serverCode = <<<'CODE' - $serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN; - $ctx = stream_context_create(['ssl' => [ - 'SNI_server_certs' => [ -- "cs.php.net" => __DIR__ . "/sni_server_cs.pem", -- "uk.php.net" => __DIR__ . "/sni_server_uk.pem", -- "us.php.net" => __DIR__ . "/sni_server_us.pem" -+ "cs.php.net" => '%s', -+ "uk.php.net" => '%s', -+ "us.php.net" => '%s', - ] - ]]); - -@@ -33,6 +44,7 @@ $serverCode = <<<'CODE' - - phpt_wait(); - CODE; -+$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile); - - $proxyCode = <<<'CODE' - function parse_sni_from_client_hello($data) { -@@ -134,7 +146,7 @@ CODE; - $clientCode = <<<'CODE' - $clientCtx = stream_context_create([ - 'ssl' => [ -- 'cafile' => __DIR__ . '/sni_server_ca.pem', -+ 'cafile' => '%s', - 'verify_peer' => true, - 'verify_peer_name' => true, - ], -@@ -155,16 +167,21 @@ $clientCode = <<<'CODE' - - phpt_notify('server'); - CODE; -+$clientCode = sprintf($clientCode, $caFile); - - include 'ServerClientTestCase.inc'; - ServerClientTestCase::getInstance()->run($clientCode, [ -- 'server' => $serverCode, -- 'proxy' => $proxyCode, -+ 'server' => $serverCode, -+ 'proxy' => $proxyCode, - ]); - ?> - --CLEAN-- - - --EXPECT-- - string(19) "Hello from server 0" -diff --git a/ext/openssl/tests/bug80770.phpt b/ext/openssl/tests/bug80770.phpt -index 9100aaa5aa18..21860dc78eb7 100644 ---- a/ext/openssl/tests/bug80770.phpt -+++ b/ext/openssl/tests/bug80770.phpt -@@ -11,14 +11,25 @@ if (OPENSSL_VERSION_NUMBER < 0x10101000) die("skip OpenSSL v1.1.1 required"); - saveCaCert($caCertFile); -+$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile); -+$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile); -+$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile); -+$certificateGenerator->saveNewCertAsFileWithKey('Bug80770 Test Client', $clientCertFile); - - $serverCode = <<<'CODE' - $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN; - $ctx = stream_context_create(['ssl' => [ - 'SNI_server_certs' => [ -- "cs.php.net" => __DIR__ . "/sni_server_cs.pem", -- "uk.php.net" => __DIR__ . "/sni_server_uk.pem", -- "us.php.net" => __DIR__ . "/sni_server_us.pem" -+ "cs.php.net" => '%s', -+ "uk.php.net" => '%s', -+ "us.php.net" => '%s', - ], - 'verify_peer' => true, - 'cafile' => '%s', -@@ -28,7 +39,6 @@ $serverCode = <<<'CODE' - ]]); - $server = stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr, $flags, $ctx); - phpt_notify_server_start($server); -- - $client = stream_socket_accept($server, 30); - if ($client) { - $success = stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_SERVER); -@@ -43,7 +53,7 @@ $serverCode = <<<'CODE' - phpt_notify(message: "ACCEPT_FAILED"); - } - CODE; --$serverCode = sprintf($serverCode, $caCertFile); -+$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile, $caCertFile); - - $clientCode = <<<'CODE' - $flags = STREAM_CLIENT_CONNECT; -@@ -58,19 +68,11 @@ $clientCode = <<<'CODE' - if ($client) { - stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); - } -- - $result = phpt_wait(); - echo trim($result); - CODE; - $clientCode = sprintf($clientCode, $clientCertFile); - --include 'CertificateGenerator.inc'; -- --// Generate CA and client certificate signed by that CA --$certificateGenerator = new CertificateGenerator(); --$certificateGenerator->saveCaCert($caCertFile); --$certificateGenerator->saveNewCertAsFileWithKey('Bug80770 Test Client', $clientCertFile); -- - include 'ServerClientTestCase.inc'; - ServerClientTestCase::getInstance()->run($clientCode, $serverCode); - ?> -@@ -78,6 +80,9 @@ ServerClientTestCase::getInstance()->run($clientCode, $serverCode); - - --EXPECTF-- - CLIENT_CERT_CAPTURED --- -2.51.0 - diff --git a/SPECS/php/php.spec b/SPECS/php/php.spec index 3e9fa122ad..0187e5b58a 100644 --- a/SPECS/php/php.spec +++ b/SPECS/php/php.spec @@ -21,9 +21,6 @@ URL: https://www.php.net VCS: git:https://github.com/php/php-src #!RemoteAsset: sha256:e5eba93fd6dd3241d0e61e932eb99a3783b40568553fb0e511b660ecd863a049 Source0: https://www.php.net/distributions/%{name}-%{version}.tar.gz -# Upstream fix for expired SNI certificates in bug74796 and bug80770 tests. -# This patch will merge in future version -Patch0001: 0001-Fix-SNI-tests-for-bugs-80770-and-74796.patch BuildSystem: autotools BuildOption(conf): --enable-re2c-cgoto @@ -120,8 +117,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release} This package provides the PHP extension for zlib compression support. %check -p -# Reason: these tests depend on OBS worker environment details, unavailable -# optional extensions, or file-cache paths rather than extension build success. +# These tests can't run on OBS worker, disabled find . -type f -name '*.phpt' \ ! -path './ext/curl/tests/curl_setopt_ssl.phpt' \ ! -path './ext/opcache/tests/bug78185.phpt' \