Author: Patrick Allaert (patrickallaert)
Date: 2021-11-25T18:55:41+01:00
Commit:
https://github.com/php/web-php/commit/70d91087d73012f49b5e66b6d2ca218b4dd3e66c
Raw diff:
https://github.com/php/web-php/commit/70d91087d73012f49b5e66b6d2ca218b4dd3e66c.diff
Announce 8.1.0
Changed paths:
A archive/entries/2021-11-25-1.xml
A releases/8_1_0.php
M ChangeLog-8.php
M archive/archive.xml
M include/version.inc
Diff:
diff --git a/ChangeLog-8.php b/ChangeLog-8.php
index ad5feb7ad..2a2955c94 100644
--- a/ChangeLog-8.php
+++ b/ChangeLog-8.php
@@ -3,9 +3,306 @@
include_once __DIR__ . '/include/prepend.inc';
include_once __DIR__ . '/include/changelogs.inc';
-$MINOR_VERSIONS = ['8.0'];
+$MINOR_VERSIONS = ['8.1', '8.0'];
changelog_header(8, $MINOR_VERSIONS);
?>
+<a id="PHP_8_1"></a>
+
+<section class="version" id="8.1.0"><!-- {{{ 8.1.0 -->
+<h3>Version 8.1.0</h3>
+<b><?php release_date('25-Nov-2021'); ?></b>
+<ul><li>Core:
+<ul>
+ <li>Fixed inclusion order for phpize builds on Windows.</li>
+ <li>Added missing hashtable insertion APIs for arr/obj/ref.</li>
+ <li><?php implemented(77372); ?> (Relative file path is removed from
uploaded file).</li>
+ <li><?php bugfix(81607); ?> (CE_CACHE allocation with concurrent
access).</li>
+ <li><?php bugfix(81507); ?> (Fiber does not compile on AIX).</li>
+ <li><?php bugfix(78647); ?> (SEGFAULT in
zend_do_perform_implementation_check).</li>
+ <li><?php bugfix(81518); ?> (Header injection via default_mimetype /
default_charset).</li>
+ <li><?php bugfix(75941); ?> (Fix compile failure on Solaris with clang).</li>
+ <li><?php bugfix(81380); ?> (Observer may not be initialized properly).</li>
+ <li><?php bugfix(81514); ?> (Using Enum as key in WeakMap triggers GC +
SegFault).</li>
+ <li><?php bugfix(81520); ?> (TEST_PHP_CGI_EXECUTABLE badly set in
run-tests.php).</li>
+ <li><?php bugfix(81377); ?> (unset() of $GLOBALS sub-key yields
warning).</li>
+ <li><?php bugfix(81342); ?> (New ampersand token parsing depends on new line
after it).</li>
+ <li><?php bugfix(81280); ?> (Unicode characters in cli.prompt causes
segfault).</li>
+ <li><?php bugfix(81192); ?> ("Declaration should be compatible with" gives
incorrect line number with traits).</li>
+ <li><?php bugfix(78919); ?> (CLI server: insufficient cleanup if request
startup fails).</li>
+ <li><?php bugfix(81303); ?> (match error message improvements).</li>
+ <li><?php bugfix(81238); ?> (Fiber support missing for Solaris Sparc).</li>
+ <li><?php bugfix(81237); ?> (Comparison of fake closures doesn't work).</li>
+ <li><?php bugfix(81202); ?> (powerpc64 build fails on fibers).</li>
+ <li><?php bugfix(80072); ?> (Cyclic unserialize in TMPVAR operand may
leak).</li>
+ <li><?php bugfix(81163); ?> (__sleep allowed to return non-array).</li>
+ <li><?php bugfix(75474); ?> (function scope static variables are not bound
to a unique function).</li>
+ <li><?php bugfix(53826); ?> (__callStatic fired in base class through a
parent call if the method is private).</li>
+</ul></li>
+<li>FPM:
+<ul>
+ <li>Added openmetrics status format.</li>
+ <li>Enable process renaming on macOS.</li>
+ <li>Added pm.max_spawn_rate option to configure max spawn child processes
rate.</li>
+ <li><?php bugfix(81513); ?> (Future possibility for heap overflow in FPM
zlog).</li>
+ <li><?php bugfix(81026); ?> (PHP-FPM oob R/W in root process leading to
privilege escalation) (CVE-2021-21703).</li>
+ <li><?php bugfix(65800); ?> (Events port mechanism).</li>
+</ul></li>
+<li>Reflection:
+<ul>
+ <li>Implement ReflectionFunctionAbstract::getClosureUsedVariables
(krakjoe)</li>
+ <li><?php bugfix(81611); ?> (ArgumentCountError when getting default value
from ReflectionParameter with new).</li>
+ <li><?php bugfix(81630); ?> (PHP 8.1: ReflectionClass->getTraitAliases()
crashes with Internal error).</li>
+ <li><?php bugfix(81457); ?> (Enum: ReflectionMethod->getDeclaringClass()
return a ReflectionClass).</li>
+ <li><?php bugfix(81474); ?> (Make ReflectionEnum and related class
non-final).</li>
+ <li><?php bugfix(80821); ?> (ReflectionProperty::getDefaultValue() returns
current value for statics).</li>
+ <li><?php bugfix(80564); ?> (ReflectionProperty::__toString() renders
current value, not default value).</li>
+ <li><?php bugfix(80097); ?> (ReflectionAttribute is not a Reflector).</li>
+ <li><?php bugfix(81200); ?> (no way to determine if Closure is static).</li>
+</ul></li>
+<li>XML:
+<ul>
+ <li><?php bugfix(79971); ?> (special character is breaking the path in xml
function). (CVE-2021-21707)</li>
+ <li><?php bugfix(70962); ?> (XML_OPTION_SKIP_WHITE strips embedded
whitespace).</li>
+</ul></li>
+<li>Date:
+<ul>
+ <li>Speed up finding timezone offset information.</li>
+ <li><?php bugfix(81458); ?> (Regression Incorrect difference after timezone
change).</li>
+ <li><?php bugfix(81500); ?> (Interval serialization regression since 7.3.14
/ 7.4.2).</li>
+ <li><?php bugfix(81504); ?> (Incorrect timezone transition details for POSIX
data).</li>
+ <li><?php bugfix(80998); ?> (Missing second with inverted interval).</li>
+ <li><?php bugfix(79580); ?> (date_create_from_format misses leap year).</li>
+ <li><?php bugfix(80963); ?> (DateTimeZone::getTransitions() truncated).</li>
+ <li><?php bugfix(80974); ?> (Wrong diff between 2 dates in different
timezones).</li>
+ <li><?php bugfix(80998); ?> (Missing second with inverted interval).</li>
+ <li><?php bugfix(81097); ?> (DateTimeZone silently falls back to UTC when
providing an offset with seconds).</li>
+ <li><?php bugfix(81106); ?> (Regression in 8.1: add() now truncate
->f).</li>
+ <li><?php bugfix(81273); ?> (Date interval calculation not correct).</li>
+ <li><?php bugfix(52480); ?> (Incorrect difference using DateInterval)</li>
+ <li><?php bugfix(62326); ?> (date_diff() function returns false result).</li>
+ <li><?php bugfix(64992); ?> (dst not handled past 2038).</li>
+ <li><?php bugfix(65003); ?> (Wrong date diff).</li>
+ <li><?php bugfix(66545); ?> (DateTime. diff returns negative values).</li>
+ <li><?php bugfix(68503); ?> (date_diff on two dates with timezone set
localised returns wrong results).</li>
+ <li><?php bugfix(69806); ?> (Incorrect date from timestamp).</li>
+ <li><?php bugfix(71700); ?> (Extra day on diff between begin and end of
march 2016).</li>
+ <li><?php bugfix(71826); ?> (DateTime::diff confuse on timezone
'Asia/Tokyo').</li>
+ <li><?php bugfix(73460); ?> (Datetime add not realising it already applied
DST change).</li>
+ <li><?php bugfix(74173); ?> (DateTimeImmutable::getTimestamp() triggers DST
switch in incorrect time).</li>
+ <li><?php bugfix(74274); ?> (Handling DST transitions correctly).</li>
+ <li><?php bugfix(74524); ?> (Date diff is bad calculated, in same time
zone).</li>
+ <li><?php bugfix(75167); ?> (DateTime::add does only care about backward DST
transition, not forward).</li>
+ <li><?php bugfix(76032); ?> (DateTime->diff having issues with leap days
for timezones ahead of UTC).</li>
+ <li><?php bugfix(76374); ?> (Date difference varies according day time).</li>
+ <li><?php bugfix(77571); ?> (DateTime's diff DateInterval incorrect in
timezones from UTC+01:00 to UTC+12:00.</li>
+ <li><?php bugfix(78452); ?> (diff makes wrong in hour for Asia/Tehran).</li>
+ <li><?php bugfix(79452); ?> (DateTime::diff() generates months differently
between time zones).</li>
+ <li><?php bugfix(79698); ?> (timelib mishandles future timestamps (triggered
by 'zic -b slim')).</li>
+ <li><?php bugfix(79716); ?> (Invalid date time created (with day "00")).</li>
+ <li><?php bugfix(80610); ?> (DateTime calculate wrong with
DateInterval).</li>
+ <li><?php bugfix(80664); ?> (DateTime objects behave incorrectly around DST
transition).</li>
+ <li><?php bugfix(80913); ?> (DateTime(Immutable)::sub around DST yield
incorrect time).</li>
+</ul></li>
+<li>GD:
+<ul>
+ <li>Convert resource<gd font> to object \GdFont.</li>
+ <li><?php bugfix(71316); ?> (libpng warning from imagecreatefromstring).</li>
+</ul></li>
+<li>Standard:
+<ul>
+ <li><?php bugfix(81076); ?> (incorrect debug info on Closures with implicit
binds).</li>
+ <li><?php bugfix(81441); ?> (gethostbyaddr('::1') returns ip instead of name
after calling some other method).</li>
+ <li><?php bugfix(81491); ?> (Incorrectly using libsodium for argon2
hashing).</li>
+ <li><?php bugfix(66588); ?> (SplFileObject::fgetcsv incorrectly returns a
row on premature EOF).</li>
+ <li><?php bugfix(81142); ?> (PHP 7.3+ memory leak when unserialize() is used
on an associative array).</li>
+ <li><?php bugfix(81111); ?> (Serialization is unexpectedly allowed on
anonymous classes with __serialize()).</li>
+ <li><?php bugfix(81137); ?> (hrtime breaks build on OSX before Sierra).</li>
+</ul></li>
+<li>DBA:
+<ul>
+ <li><?php bugfix(81588); ?> (TokyoCabinet driver leaks memory).</li>
+</ul></li>
+<li>JSON:
+<ul>
+ <li><?php bugfix(81532); ?> (Change of $depth behaviour in json_encode() on
PHP 8.1).</li>
+</ul></li>
+<li>MBString:
+<ul>
+ <li><?php bugfix(76167); ?> (mbstring may use pointer from some previous
request).</li>
+ <li><?php bugfix(81390); ?> (mb_detect_encoding() regression).</li>
+</ul></li>
+<li>CLI:
+<ul>
+ <li><?php bugfix(81496); ?> (Server logs incorrect request method).</li>
+</ul></li>
+<li>PCRE:
+<ul>
+ <li><?php bugfix(81424); ?> (PCRE2 10.35 JIT performance regression).</li>
+ <li>Bundled PCRE2 is 10.37.</li>
+</ul></li>
+<li>PgSQL:
+<ul>
+ <li>Convert resource<pgsql link> to object \PgSql\Connection.</li>
+ <li>Convert resource<pgsql result> to object \PgSql\Result.</li>
+ <li>Convert resource<pgsql large object> to object \PgSql\Lob.</li>
+ <li><?php bugfix(81509); ?> (pg_end_copy still expects a resource).</li>
+</ul></li>
+<li>OpenSSL:
+<ul>
+ <li>Bump minimal OpenSSL version to 1.0.2.</li>
+ <li><?php bugfix(81502); ?> ($tag argument of openssl_decrypt() should
accept null/empty string).</li>
+</ul></li>
+<li>Streams:
+<ul>
+ <li><?php bugfix(81475); ?> (stream_isatty emits warning with attached
stream wrapper).</li>
+</ul></li>
+<li>Zip:
+<ul>
+ <li><?php bugfix(81490); ?> (ZipArchive::extractTo() may leak memory).</li>
+ <li><?php bugfix(77978); ?> (Dirname ending in colon unzips to wrong
dir).</li>
+ <li><?php bugfix(81420); ?> (ZipArchive::extractTo extracts outside of
destination). (CVE-2021-21706)</li>
+ <li><?php bugfix(80833); ?> (ZipArchive::getStream doesn't use
setPassword).</li>
+</ul></li>
+<li>Filter:
+<ul>
+ <li><?php bugfix(61700); ?> (FILTER_FLAG_IPV6/FILTER_FLAG_NO_PRIV|RES_RANGE
failing).</li>
+</ul></li>
+<li>SPL:
+<ul>
+ <li><?php bugfix(80663); ?> (Recursive SplFixedArray::setSize() may cause
double-free).</li>
+ <li><?php bugfix(81477); ?> (LimitIterator + SplFileObject regression in
8.0.1).</li>
+ <li><?php bugfix(81112); ?> (Special json_encode behavior for
SplFixedArray).</li>
+ <li><?php bugfix(80945); ?> ("Notice: Undefined index" on unset()
ArrayObject non-existing key).</li>
+ <li><?php bugfix(80724); ?> (FilesystemIterator::FOLLOW_SYMLINKS remove
KEY_AS_FILE from bitmask).</li>
+</ul></li>
+<li>DOM:
+<ul>
+ <li><?php bugfix(81433); ?> (DOMElement::setIdAttribute() called twice may
remove ID).</li>
+</ul></li>
+<li>FFI:
+<ul>
+ <li><?php bugfix(79576); ?> ("TYPE *" shows unhelpful message when type is
not defined).</li>
+</ul></li>
+<li>Shmop:
+<ul>
+ <li><?php bugfix(81407); ?> (shmop_open won't attach and causes php to
crash).</li>
+</ul></li>
+<li>Opcache:
+<ul>
+ <li><?php bugfix(81409); ?> (Incorrect JIT code for ADD with a reference to
array).</li>
+ <li><?php bugfix(81255); ?> (Memory leak in PHPUnit with functional JIT)</li>
+ <li><?php bugfix(80959); ?> (infinite loop in building cfg during JIT
compilation).</li>
+ <li><?php bugfix(81225); ?> (Wrong result with pow operator with JIT
enabled).</li>
+ <li><?php bugfix(81249); ?> (Intermittent property assignment failure with
JIT enabled).</li>
+ <li><?php bugfix(81256); ?> (Assertion `zv != ((void *)0)' failed for
"preload" with JIT).</li>
+ <li><?php bugfix(81133); ?> (building opcache with phpize fails).</li>
+ <li><?php bugfix(81136); ?> (opcache header not installed).</li>
+</ul></li>
+<li>COM:
+<ul>
+ <li>Dispatch using LANG_NEUTRAL instead of LOCALE_SYSTEM_DEFAULT.</li>
+</ul></li>
+<li>Mbstring:
+<ul>
+ <li><?php bugfix(81349); ?> (mb_detect_encoding misdetcts ASCII in some
cases).</li>
+ <li><?php bugfix(81298); ?> (mb_detect_encoding() segfaults when 7bit
encoding is specified).</li>
+</ul></li>
+<li>Phar:
+<ul>
+ <li>Use SHA256 by default for signature.</li>
+ <li>Add support for OpenSSL_SHA256 and OpenSSL_SHA512 signature.</li>
+</ul></li>
+<li>SNMP:
+<ul>
+ <li>Implement SHA256 and SHA512 for security protocol.</li>
+</ul></li>
+<li>MySQLnd:
+<ul>
+ <li><?php bugfix(63327); ?> (Crash (Bus Error) in mysqlnd due to wrong
alignment).</li>
+</ul></li>
+<li>SimpleXML:
+<ul>
+ <li><?php bugfix(81325); ?> (Segfault in zif_simplexml_import_dom).</li>
+</ul></li>
+<li>Curl:
+<ul>
+ <li><?php bugfix(81085); ?> (Support CURLOPT_SSLCERT_BLOB for cert
strings).</li>
+</ul></li>
+<li>phpdbg:
+<ul>
+ <li><?php bugfix(81135); ?> (unknown help topic causes assertion
failure).</li>
+</ul></li>
+<li>FTP:
+<ul>
+ <li>Convert resource<ftp> to object \FTP\Connection.</li>
+</ul></li>
+<li>hash:
+<ul>
+ <li><?php implemented(68109); ?> (Add MurmurHash V3).</li>
+ <li><?php implemented(73385); ?> (Add xxHash support).</li>
+</ul></li>
+<li>LDAP:
+<ul>
+ <li>Convert resource<ldap link> to object \LDAP\Connection.</li>
+ <li>Convert resource<ldap result> to object \LDAP\Result.</li>
+ <li>Convert resource<ldap result entry> to object
\LDAP\ResultEntry.</li>
+</ul></li>
+<li>MySQLi:
+<ul>
+ <li><?php bugfix(70372); ?> (Emulate mysqli_fetch_all() for
libmysqlclient).</li>
+ <li><?php bugfix(80330); ?> (Replace language in APIs and source
code/docs).</li>
+ <li><?php bugfix(80329); ?> (Add option to specify LOAD DATA LOCAL white
list folder (including libmysql)).</li>
+</ul></li>
+<li>OPcache:
+<ul>
+ <li>Added inheritance cache.</li>
+</ul></li>
+<li>PDO:
+<ul>
+ <li><?php bugfix(80908); ?> (PDO::lastInsertId() return wrong).</li>
+</ul></li>
+<li>PDO MySQL:
+<ul>
+ <li><?php bugfix(40913); ?> (PDO_MYSQL: PDO::PARAM_LOB does not bind to a
stream for fetching a BLOB).</li>
+ <li><?php bugfix(77627); ?> (method_exists on Closure::__invoke
inconsistency).</li>
+ <li><?php bugfix(80761); ?> (PDO uses too much memory).</li>
+</ul></li>
+<li>PDO PgSQL:
+<ul>
+ <li><?php bugfix(81343); ?> (pdo_pgsql: Inconsitent boolean conversion after
calling closeCursor()).</li>
+</ul></li>
+<li>PDO OCI:
+<ul>
+ <li><?php bugfix(77120); ?> (Support 'success with info' at connection).</li>
+</ul></li>
+<li>PDO ODBC:
+<ul>
+ <li><?php bugfix(81037); ?> (PDO discards error message text from prepared
statement).</li>
+</ul></li>
+<li>PDO SQLite:
+<ul>
+ <li>Implement PDO_ATTR_SERVER_VERSION and PDO_ATTR_SERVER_INFO for
PDO::getAttribute().</li>
+ <li><?php bugfix(38334); ?> (Proper data-type support for PDO_SQLITE).</li>
+</ul></li>
+<li>PSpell:
+<ul>
+ <li>Convert resource<pspell> to object \PSpell\Dictionary.</li>
+ <li>Convert resource<pspell config> to object \PSpell\Config.</li>
+</ul></li>
+<li>readline:
+<ul>
+ <li><?php bugfix(72998); ?> (invalid read in readline completion).</li>
+</ul></li>
+<li>Sodium:
+<ul>
+ <li>Added the XChaCha20 stream cipher functions.</li>
+ <li>Added the Ristretto255 functions, which are available in libsodium
1.0.18.</li>
+</ul></li>
+</ul>
+<!-- }}} --></section>
+
+
+
<a id="PHP_8_0"></a>
<section class="version" id="8.0.13"><!-- {{{ 8.0.13 -->
diff --git a/archive/archive.xml b/archive/archive.xml
index 66a56e4fa..ef9783796 100644
--- a/archive/archive.xml
+++ b/archive/archive.xml
@@ -9,6 +9,7 @@
<uri>http://php.net/contact</uri>
<email>[email protected]</email>
</author>
+ <xi:include href="entries/2021-11-25-1.xml"/>
<xi:include href="entries/2021-11-22-1.xml"/>
<xi:include href="entries/2021-11-19-1.xml"/>
<xi:include href="entries/2021-11-18-2.xml"/>
diff --git a/archive/entries/2021-11-25-1.xml b/archive/entries/2021-11-25-1.xml
new file mode 100644
index 000000000..bf17e79ea
--- /dev/null
+++ b/archive/entries/2021-11-25-1.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<entry xmlns="http://www.w3.org/2005/Atom">
+ <title>PHP 8.1.0 Released!</title>
+ <id>https://www.php.net/archive/2021.php#2021-11-25-1</id>
+ <published>2021-11-25T17:43:08+01:00</published>
+ <updated>2021-11-25T17:43:08+01:00</updated>
+ <link href="https://www.php.net/index.php#id2021-11-25-1" rel="alternate"
type="text/html"/>
+ <link href="https://www.php.net/archive/2021.php#2021-11-25-1" rel="via"
type="text/html"/>
+ <category term="releases" label="New PHP release"/>
+ <category term="frontpage" label="PHP.net frontpage news"/>
+ <content type="xhtml">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+<p>The PHP development team announces the immediate availability of PHP 8.1.0.
This release marks the latest major release of the PHP language.</p>
+
+<p>PHP 8.1 comes with numerous improvements and new features such as:</p>
+
+<p>Take a look at the <a href="https://www.php.net/releases/8.1/">PHP 8.1
Announcement Addendum</a> for more information.</p>
+<ul>
+ <li><a
href="https://www.php.net/manual/en/language.enumerations.php">Enumerations</a></li>
+ <li><a href="https://wiki.php.net/rfc/readonly_properties_v2">Readonly
properties</a></li>
+ <li><a href="https://wiki.php.net/rfc/fibers">Fibers</a></li>
+ <li><a href="https://wiki.php.net/rfc/pure-intersection-types">Pure
Intersection Types</a></li>
+ <li><a
href="https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.never-type">never</a>
return type</li>
+ <li><a
href="https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.callable-syntax">First-class
Callable Syntax</a></li>
+ <li>"final" modifier for class constants</li>
+ <li>New <a href="https://www.php.net/manual/en/function.fsync.php">fsync</a>
and <a
href="https://www.php.net/manual/en/function.fdatasync.php">fdatasync</a>
functions</li>
+ <li>New <a
href="https://www.php.net/manual/en/function.array-is-list.php">array_is_list</a>
function</li>
+ <li>Explicit <a
href="https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.octal-literal-prefix">Octal
numeral notation</a></li>
+ <li>And much much more...</li>
+</ul>
+
+<p>For source downloads of PHP 8.1.0 please visit our <a
href="https://www.php.net/downloads.php">downloads page</a>,
+Windows source and binaries can be found on <a
href="https://windows.php.net/download/">windows.php.net/download/</a>.
+The list of changes is recorded in the <a
href="https://www.php.net/ChangeLog-8.php#8.1.0">ChangeLog</a>.
+</p>
+
+<p>The <a href="http://php.net/manual/en/migration81.php">migration guide</a>
is available in the PHP Manual.
+Please consult it for the detailed list of new features and backward
incompatible changes.</p>
+
+<p>Many thanks to all the contributors and supporters!</p>
+ </div>
+ </content>
+</entry>
diff --git a/include/version.inc b/include/version.inc
index c94568ecf..4d72d0a1d 100644
--- a/include/version.inc
+++ b/include/version.inc
@@ -18,6 +18,18 @@
$RELEASES = (function() {
$data = [];
+ /* PHP 8.1 Release */
+ $data['8.1'] = [
+ 'version' => '8.1.0',
+ 'date' => '25 Nov 2021',
+ 'tags' => [], // Set to ['security'] for security releases.
+ 'sha256' => [
+ 'tar.gz' =>
'848705043ea4a6e022246ae12a1bff6afcf5c73ea98c6ac4d2108d6028c5c125',
+ 'tar.bz2' =>
'0725ed2baea125496a898455d501a77460218b2a0cfad773fa9322f491b82b61',
+ 'tar.xz' =>
'a1317eff0723a2b3d3122bbfe107a1158570ea2822dc35a5fb360086db0f6bbc',
+ ]
+ ];
+
/* PHP 8.0 Release */
$data['8.0'] = [
'version' => '8.0.13',
diff --git a/releases/8_1_0.php b/releases/8_1_0.php
new file mode 100644
index 000000000..9813c56c8
--- /dev/null
+++ b/releases/8_1_0.php
@@ -0,0 +1,35 @@
+<?php
+$_SERVER['BASE_PAGE'] = 'releases/8_1_0.php';
+include_once __DIR__ . '/../include/prepend.inc';
+site_header('PHP 8.1.0 Release Announcement');
+?>
+<h1>PHP 8.1.0 Release Announcement</h1>
+
+<p>The PHP development team announces the immediate availability of PHP 8.1.0.
This release marks the latest major release of the PHP language.</p>
+
+<p>PHP 8.1 comes with numerous improvements and new features such as:</p>
+<ul>
+ <li><a
href="https://www.php.net/manual/en/language.enumerations.php">Enumerations</a></li>
+ <li><a href="https://wiki.php.net/rfc/readonly_properties_v2">Readonly
properties</a></li>
+ <li><a href="https://wiki.php.net/rfc/fibers">Fibers</a></li>
+ <li><a href="https://wiki.php.net/rfc/pure-intersection-types">Pure
Intersection Types</a></li>
+ <li><a
href="https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.never-type">never</a>
return type</li>
+ <li><a
href="https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.callable-syntax">First-class
Callable Syntax</a></li>
+ <li>"final" modifier for class constants</li>
+ <li>New <a href="https://www.php.net/manual/en/function.fsync.php">fsync</a>
and <a
href="https://www.php.net/manual/en/function.fdatasync.php">fdatasync</a>
functions</li>
+ <li>New <a
href="https://www.php.net/manual/en/function.array-is-list.php">array_is_list</a>
function</li>
+ <li>Explicit <a
href="https://www.php.net/manual/en/migration81.new-features.php#migration81.new-features.core.octal-literal-prefix">Octal
numeral notation</a></li>
+ <li>And much much more...</li>
+</ul>
+
+<p>For source downloads of PHP 8.1.0 please visit our <a
href="https://www.php.net/downloads.php">downloads page</a>,
+Windows source and binaries can be found on <a
href="https://windows.php.net/download/">windows.php.net/download/</a>.
+The list of changes is recorded in the <a
href="https://www.php.net/ChangeLog-8.php#8.1.0">ChangeLog</a>.
+</p>
+
+<p>The <a href="http://php.net/manual/en/migration81.php">migration guide</a>
is available in the PHP Manual.
+Please consult it for the detailed list of new features and backward
incompatible changes.</p>
+
+<p>Many thanks to all the contributors and supporters!</p>
+
+<?php site_footer();
--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php