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>php-webmaster@lists.php.net</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