Test Releases
The downloads on this page are not meant to be run in production. They are for testing only.
If you find a problem when running your library or application with these builds, please file a report on GitHub Issues.

QA Releases API

The QA API is based on the query string.

Pass in the format parameter, with serialize or json as value to obtain all information:

To only try dev version numbers, add only=dev_versions:

'; site_header("Pre-Release Builds", [ 'current' => 'downloads', ]); ?>

Pre-Release Builds

This page contains links to the Pre-release builds that the release managers create before each actual release. These builds are meant for the community to test whether no inadvertent changes have been made, and whether no regressions have been introduced.

Source Builds

1 ? 's' : ''; ?> $info) : ?>

PHP

There are no QA releases available at the moment to test.

Windows Builds

= 2) { $branchKey = $parts[0] . '.' . $parts[1]; $allowedBranches[$branchKey] = true; } } } $buildLabel = static function (string $key, array $entry): string { $tool = 'VS'; if (strpos($key, 'vs17') !== false) { $tool .= '17'; } elseif (strpos($key, 'vs16') !== false) { $tool .= '16'; } elseif (strpos($key, 'vc15') !== false) { $tool = 'VC15'; } $arch = (strpos($key, 'x64') !== false) ? 'x64' : ((strpos($key, 'x86') !== false) ? 'x86' : ''); $ts = (strpos($key, 'nts') !== false) ? 'Non Thread Safe' : 'Thread Safe'; if (strncmp($key, 'nts-', 4) === 0) { $ts = 'Non Thread Safe'; } elseif (strncmp($key, 'ts-', 3) === 0) { $ts = 'Thread Safe'; } return trim(($tool ? $tool . ' ' : '') . ($arch ? $arch . ' ' : '') . $ts); }; $packageNames = [ 'zip' => 'Zip', 'debug_pack' => 'Debug Pack', 'devel_pack' => 'Development package (SDK to develop PHP extensions)', ]; $makeListItem = static function (string $label, array $fileInfo, ?string $mtime, bool $includeSha) use ($winQaBase): ?string { $path = $fileInfo['path'] ?? ''; if ($path === '') { return null; } $href = $winQaBase . ltrim($path, '/'); $size = $fileInfo['size'] ?? ''; $sha = $fileInfo['sha256'] ?? ''; $hrefAttr = htmlspecialchars($href, ENT_QUOTES, 'UTF-8'); $labelText = htmlspecialchars($label, ENT_QUOTES, 'UTF-8'); $parts = ['' . $labelText . '']; if ($size !== '') { $parts[] = '' . htmlspecialchars($size, ENT_QUOTES, 'UTF-8') . ''; } if ($mtime) { $timestamp = strtotime($mtime); if ($timestamp) { $parts[] = '' . gmdate('d M Y', $timestamp) . ''; } } if ($includeSha && $sha !== '') { $parts[] = '' . htmlspecialchars($sha, ENT_QUOTES, 'UTF-8') . ''; } return '
  • ' . implode(' ', $parts) . '
  • '; }; foreach ($decoded as $branch => $info) { if (!is_array($info) || empty($info['version'])) { continue; } if ($branch === 'comment') { continue; } if (!empty($allowedBranches) && empty($allowedBranches[$branch])) { continue; } $topItems = []; if (!empty($info['source']) && is_array($info['source'])) { $item = $makeListItem('Download source code', $info['source'], $info['source']['mtime'] ?? null, false); if ($item !== null) { $topItems[] = $item; } } if (!empty($info['test_pack']) && is_array($info['test_pack'])) { $item = $makeListItem('Download tests package (phpt)', $info['test_pack'], $info['test_pack']['mtime'] ?? null, false); if ($item !== null) { $topItems[] = $item; } } $builds = []; foreach ($info as $buildKey => $entry) { if (!is_array($entry) || in_array($buildKey, ['version', 'source', 'test_pack'], true)) { continue; } $label = $buildLabel($buildKey, $entry); if ($label === '') { continue; } $packageItems = []; foreach ($packageNames as $pkgKey => $pkgLabel) { if (empty($entry[$pkgKey]) || !is_array($entry[$pkgKey])) { continue; } $rendered = $makeListItem($pkgLabel, $entry[$pkgKey], $entry['mtime'] ?? null, true); if ($rendered !== null) { $packageItems[] = $rendered; } } if (empty($packageItems)) { continue; } $builds[] = [ 'label' => $label, 'items' => $packageItems, ]; } if (empty($topItems) && empty($builds)) { continue; } $winQaReleases[] = [ 'version_label' => $info['version'], 'top_items' => $topItems, 'builds' => $builds, ]; } if (!empty($winQaReleases)) { usort($winQaReleases, static function ($a, $b) { return version_compare($b['version_label'], $a['version_label']); }); } } else { $winQaMessage = 'Windows QA release index could not be parsed.'; } } else { $winQaMessage = 'Windows QA release index is unavailable.'; } if ($winQaMessage !== '') { echo '

    ', htmlspecialchars($winQaMessage), '

    '; } elseif (empty($winQaReleases)) { echo "

    No Windows QA builds match the currently active QA releases.

    "; } else { foreach ($winQaReleases as $release) { $versionLabel = $release['version_label']; echo '

    PHP ', htmlspecialchars($versionLabel), '

    '; echo '
    '; if (!empty($release['top_items'])) { echo ''; } foreach ($release['builds'] as $build) { echo '
    ' . $build['label'] . '
    '; echo ''; } echo '
    '; } } ?> $SIDEBAR_DATA]);