Synchronized bundled GD library with GD 2.0.15. (Ilia)
-
Upgraded the bundled Expat library to version 1.95.6. (Jani)
-
Upgraded the bundled PCRE library to version 4.3. (Andrei)
-
Improved the engine to use POSIX/socket IO where feasible. (Sascha)
-
Improved the NSAPI SAPI module (Uwe Schindler)
-
-
php4_init (magnus.conf): new parameter to set alternate path to php.ini. (php_ini="/path/to/php.ini")
-
php4_execute (obj.conf): support for additional php.ini values. Allows different settings per virtual server. (See sapi/nsapi/nsapi-readme.txt for more information)
-
Added support for virtual().
-
Added nsapi_request_headers() and nsapi_response_headers() with aliases for apache compatibility.
-
Added "nsapi.read_timeout" php.ini option.
-
Synced $_SERVER variables to be similar to Apache variables.
-
Added possibility to use PHP to generate HTTP error pages (404 Not Found..)
-
Added possibility to use PHP to generate directory listings for directories without index.html
-
-
-
Improved the IMAP extension (Ilia)
-
-
Added imap_timeout() function. (bug )
-
Added optional 'charset' parameter to imap_search() and imap_sort(). (bug )
(Crash in imap_mail_compose() if the body is an empty array). (Ilia)
-
(date() does not support negative timestamps on win32). (Ilia)
-
(strip_tags() eliminates too much). (Moriyoshi)
-
(Overload extension and _call() breaks classes). (Shane)
-
(array_pop() did not reset the current array position). (Jani)
-
, (win32 mail(), bcc: gets interpreted as cc:). (Sara)
-
(move_uploaded_file() does not ignore open_basedir). (Wez)
-
("$arr['foo']" generates bogus E_NOTICE, should be E_PARSE). (Jani)
-
(fpassthru() ignored buffered data but complained anyway). (Wez)
-
(select would not always timeout during socket shutdown). (Wez)
-
(default output buffer could not be deleted). (Marcus)
-
(return behaviour differs between include and require). (Zeev)
-
(include remote files leaks descriptors on Solaris). (Wez)
-
(ucwords() trouble again). (Moriyoshi)
-
(fgetcsv() suppresses some characters before a separator). (Masahiro, Moriyoshi)
-
, (getimagesize() failed for remote files). (Wez)
-
(made glob() understand Windows paths). (Edin)
-
(problem with Ingres II persistent connections). (Jani)
-
(Extended checks for where FreeTDS is installed). (Frank)
-
(typo in gmp_gcdext() causes incorrect results). (Sara)
-
(file_exists() and other filestat functions report errors when the requested file/directory does not exists). (Sara)
-
(memory corruption by fsockopen()). (Ilia)
-
(bind_textdomain_codeset() now available on Windows). (Edin)
-
(number_format() could cause a memory allocation for a negative memory size in situations where the sprintf implementation of the host system generated less decimal places than were requested). (Wez)
-
(imagecreatefromstring() crashed with invalid image files). (Ilia)
-
(config.status warning). (Jani)
-
(mysql_pconnect connection problems). (Georg)
-
(improper handling of non-terminated < by strip_tags()). (Ilia)
-
(gd unable to open fonts). (Ilia)
-
(improper handling of ? surrounded by spaces in get_browser()). (Ilia)
-
(crash in mail() on Windows when 1st parameter is empty). (Edin)
-
(fixed handling of NULL or "" files on Win32). (Ilia)
-
(COM code crashes after update 4.2.1 to 4.3.0). (Harald)
-
(html_entity_decode() crashed when "" is passed). (Ilia)
-
(Solaris has issues with getcwd() needing read permissions on directories instead of just execute). (Wez, jflemer)
-
(in CLI/CGI on the #! it would leave a \n when the code encounters \r\n). (Ilia)
-
(session_decode() returned FALSE on success). (Ilia)
-
(opening URLs that result in redirection to a relative path was failing). (Ilia)
-
(missing 3rd argument to php_module_startup). (Ilia)
-
(broken check for ob_gzhandler and made ob_start() return the correct value). (Ilia)
-
(parse_url handling of urls without a path). (Ilia)
-
(apache configure fails when using --enable-versioning). (Jani)
-
(Compile Failure and lots of warnings on UnixWare). (Derick)
-
(fopen() with mode 'a+' and rewind() doesn't work). (Wez)
-
(html_errors off text-only output in phpinfo). (Marcus)
If you don't specify building any other SAPI "make install" will install the
- CGI SAPI binary in {PREFIX}/bin/php. If you want to install CLI SAPI in that
- location use "make install-cli" after "make install" or add --disable-cgi
- to your configure options. In the Windows distribution CLI SAPI is included
- in the "cli" folder. (Edin)
-
Removed extensions: (Jan, Jani, Sebastian)
-
-
ext/aspell
-
ext/ccvs
-
ext/cybercash
-
ext/icap
-
sapi/fastcgi
-
sapi/fhttpd
-
-
-
Moved extensions to PECL (https://pear.php.net/): (James, Derick)
-
-
ext/vpopmail
-
ext/cybermut
-
-
-
Make PHP_AUTH_* variables not available in safe mode under Apache when an
- external basic auth mechanism is used. (Philip)
-
Added sha1() and sha1_file() for US Secure Hash Algorithm 1. (Stefan Esser)
-
Aliased dba_popen() to dba_open() until 4.3.2 when persistent STDIO streams
- are introduced. (Andrei)
-
Fixed a security bug in the bundled MySQL library. (Georg, Stefan)
-
ZLIB extension is now built-in in the Windows distribution.
- External extension (php_zlib.dll) has been removed. (Edin)
-
Fixed a bug in ISO-8601 week calculation
-
Fixed a crash when using invalid color index with imagecolortransparent()
- (Pierre-Alain Joye).
-
(no handling for client certificates). (Ilia)
-
(crash when not supplying an IV to mcrypt_generic_init).
- (Derick)
-
(openssl_pkey_get was broken). (jeroen@derks.it, Wez)
-
(wordwrap crash). (Ilia)
-
(when register_globals is on & arrays with same names are
- passed via get/post/cookie the data inside $_GET/$_POST/$_COOKIE can would be
- corrupted). (Ilia)
-
(if the upload directory cannot be written to, the POST data
- after the uploaded file is lost). (Ilia)
-
(array_key_exists() fails to find NULL key). (Ilia)
-
(ftp_get returned NULL on success, instead of TRUE). (Ilia)
-
(crash when using pdf_open_memory_image() to load a
- true-color image). (Ilia)
-
Fixed a crash when converting between true-color images (png/jpeg) and
- gd1/gd2 image formats, png/jpeg -> gd1/gd2 -> png/jpeg conversion now
- works correctly. (Ilia, Pierre-Alain Joye).
-
Fixed a memory leak in the bundled GD library inside
- gdImageTrueColorToPalette(). (Ilia)
-
(array_walk crash). (Moriyoshi)
-
(htmlspecialchars returns latin1 from UTF-8). (Moriyoshi)
-
Fixed bugs , , (segfaults in ext/java). (Tony J. White)
Added -n command switch to cli and cgi version which allows to skip php.ini
- parsing at startup. (Marcus, Wez)
-
(absolute paths like /test/dir/ not working correctly).
- (Ilia)
-
Added "neutral" language entry to mbstring spec. (Moriyoshi)
-
Changed bundled gd library to consider php.ini option memory_limit. (Marcus)
-
Modified log() to accept multiple bases. (Jason)
-
Fixed bugs /xt/db: flatfile support with windows). (Marcus)
-
Added gd_info() which returns an array of gd support information. (Marcus)
-
Implemented features/changes requested in Bug (Timm):
-
-
Added a new function sybase_unbuffered_query()
-
Added a new function sybase_fetch_assoc()
-
Added sybase_set_message_handler() which enables users to handle
- server messages in a callback function
-
Added an ini entry for deadlock retries - retrying deadlocks can cause
- transaction state to break (sybct.deadlock_retry_count,
- defaults to -1 "forever").
-
Fixed sybase_fetch_object() not to return objects with numeric members
-
Fixed issues with identical fieldnames
-
Made sybase_fetch_*() functions return correct datatypes
-
Made phpinfo() section more verbose
-
Made sybase_query() error messages more verbose
-
-
-
(made OpenSSL file system operations abide by safe_mode
- & open_basedir restrictions). (Ilia)
-
(improved the check for availability of realpath()). (Ilia)
-
Fixed width/height detection of bmp images using getimagesize() function on
- big endian systems and added code to retrieve bmp bit depth. (Ilia)
-
(line counting error when script starts with #! in
- cgi/cli/fastcgi sapis). (Ilia)
-
(incorrect handling of symlinks on ZTS build). (Ilia)
-
Added sanity checks to headers_sent() & image_type_to_mime_type(). (Ilia)
-
Added an aditional parameter to the jdtojewish() function which makes
- the function return the symbolic hebrew name. (Moshe Doron, Derick)
-
(implode() clobbers first argument). (Moriyoshi)
-
Improved dba extension (Marcus)
-
-
Added dba_handlers() that returns an array of installed handlers and
- dba_list() that returns an associative array of open database files.
-
Added bundled cdb support wich can be activated by --with-cdb without a
- path. The bundled version supports cdb_make that allows writing cdb files.
-
Added optional skip parameter to dba_fetch() to support multiple key-value
- pairs with the same key for cdb handler.
-
Added locking for those handlers that do not have their own locking.
-
Added support for magic_quotes_runtime php.ini option.
-
Added flatfile support what finally makes ext/db deprecated.
-
-
-
Added imagerotate() which is available only when bundled libgd is used.
- (Pierre-Alain Joye, Ilia)
-
(mssql extension crashes if magic_quotes_runtime is on).
- (Sterling)
-
Remove $_FILES from $_REQUEST (import_request_variables is not modified),
- this didn't work properly in the first place, and added confusion. (Sterling)
-
Fix the socket_read() function on win32 to work in normal mode (reading to
- the end of a line), as well as binary mode. (Sterling)
-
(added sanity check to prevent include/require functions
- from trying to include directories). (Ilia)
-
(segmentation fault on printf("%1.1s", "string")). (Ilia)
-
Added dbx_escape_string() function to dbx module. (Marc)
-
Added Oracle (oci8) support to dbx module. (Marc)
-
Updated FDF extension to work with Adode fdftk 5.0. (Hartmut)
-
Added mb_strtolower() and mb_strtoupper(). (Moriyoshi)
-
Fixed an infinite loop in setlocale() when only invalid locale names
- were passed in the array. (patch by Pal Loberg, pallo[at]initio.no)
-
Fixed bugs and (COM extension leaks memory and keeps
- components referenced). (Harald)
-
Added fribidi_get_charsets() and fribidi_charset_info() functions. (Tal)
-
Added Oracle TIMESTAMP type to oci8 extension. (Thies)
-
Fixed fgets($fp) to read until EOL when length parameter is not set. (Wez)
-
Changed registry entries under "HKLM\SOFTWARE\PHP\Per Directory Values" to
- work also with administrative directives such as safe_mode, open_basedir,
- etc. (Claudio Felber)
-
Added str_word_count() function which counts words inside a string. (Ilia)
-
Added PGSQL_CONNECT_FORCE_NEW option to pg_connect() (Yasuo)
-
Added ICONV_IMPL and ICONV_VERSION constants to iconv extension to
- indicate which iconv implementation is used. (Moriyoshi)
-
(Added %e & %E support to printf/sprintf). (Ilia)
-
(Allow ini parser to parse files >16K). (Ilia)
-
(Sanity checks for browscap.ini parser). (Ilia)
-
Added experimental patch to address problem with floats on various locales.
- (Bug ). (Ilia)
-
(imap_header fails with many To: addresses). (Ilia)
-
Added mb_regex_set_options(). The Options parameters of various mbregex
- functions are now deprecated. (Moriyoshi)
-
(Segfault with PCRE and locale). (Andrei)
-
Made ImageTruecolorToPalette() in bundled GD2 library actually work. (Rasmus)
-
Fixed ImageCopy() in bundled GD2 library to handle copying from truecolor to
- palette-based. (Wez, Rasmus)
-
Added read-only GIF support for bundled GD2 library. (Rasmus)
-
Made several adjustments to xslt extension (David Viner, Lehnar, Melvyn)
-
-
Added xslt_set_object and xslt_setopt function
-
Changed backend interaction with Sablotron library
-
Fixed leak with error_print
-
Made xslt_make_array() always set NULL on last index to signal array end.
-
-
-
Changed the glue argument in implode() to be optional. If not specified,
- defaults to "". (Sterling)
-
Fixed fields argument to contain correct info for xslt_set_error_handler().
- (Patch by Lenar Lohmus)
-
Added --with-config-file-scan-dir compile-time switch which specifies a
- directory which will be scanned for *.ini files. (Rasmus)
-
Added ob_get_clean() and ob_get_flush(). (Yasuo)
-
Added ftp_ssl_connect() to ext/ftp for FTP over SSL support. (Stefan Esser)
-
Made a few additions and changes to Apache 2 sapi. (Ilia)
-
-
Added apache_response_headers(), apache_note(), apache_getenv() and
- apache_setenv() functions.
-
Added more detailed error reporting to apache_lookup_uri() and virtual().
-
Renamed getallheaders() to apache_request_headers() and made an alias for BC.
-
Added php_apache_sapi_getenv() and php_apache_sapi_get_stat().
-
Added syntax-highlighting handling (.phps)
-
-
-
Fixed strstr(), strchr() and strrchr() to be binary safe. (Andrey)
-
Added array_diff_assoc() and array_intersect_assoc(). (Andrey)
-
(ob_start() chunk size option didn't work well). (Yasuo)
-
Fixed output buffer infinite loop when buffer_size became 0. (Marcus, Wez)
-
Added getopt() for parsing command line options and arguments. (Jon)
and (Prevent crash if $HTTP_SESSION_VARS != ARRAY).
- (Ilia)
-
(open_basedir restriction problem). (Rasmus)
-
(gdImageFill crashes when x & y are outside of
- the image's boundries). (Ilia)
-
(__FILE__ constant didn't contain full path). (Ilia)
-
PHP now has a new stream system that allows it to do some clever stuff with
- fopen() and fsockopen(). As a result:
-
-
URL wrappers natively supports https:// URLs if you have compiled
- OpenSSL support into PHP (shared extension does not support this).
-
Added support for fopen("ftps://...", ...) which allows to connect to FTP
- servers via SSL. (Stefan Esser)
-
fsockopen() adds support for ssl:// and tls:// connections via TCP/IP
-
copy($srcfilename, $destfilename) can now be used with URL wrappers
-
zlib wrappers/streams can be used even on systems without
- fopencookie()
-
Changed 'zlib:' fopen wrapper to 'compress.zlib://' and deprecate
- 'zlib:' to avoid ambiguities when filenames have ':' characters. (Wez)
-
Added 'compress.bzip2://' stream and wrapper support.
-
Added user-space streams - it is now possible to define a class in PHP
- code and register it as a URL wrapper. (stream_register_wrapper)
-
Most extensions now support streams when passing files, which means
- that those extensions will now also support URL wrappers. (Wez)
-
Added URL-wrapper support to exif. (Marcus)
-
Added memory stream support. (Marcus)
-
Renamed:
-
-
socket_set_timeout() -> stream_set_timeout()
-
socket_set_blocking() -> stream_set_blocking()
-
set_file_buffer() -> stream_set_write_buffer()
-
socket_get_status() -> stream_get_meta_data()
-
- As these functions can (in theory) work on any type of stream. (Wez)
-
Raw POST data is now available as "php://input" stream. (Hartmut)
-
fopen("php://output", "wb") returns a stream that writes to the output
- buffer (like echo and print). (Wez)
-
Added stream_context_create(), stream_context_set_params() and
- stream_context_set_option and added an optional fourth parameter to
- fopen() which accepts a stream context. Contexts allow sharing of
- information between streams (a kind of "session") and setting
- notification callbacks. (Wez)
-
Made the "User-Agent" header sent by http:// and https:// wrappers
- configurable in php.ini or via a stream context. (Sterling)
-
Added stream_filter_prepend() and stream_filter_append() which apply
- a filter to either the top or the bottom of a stream filter stack.
- Implemented "string.rot13" filter as an example; more filters are
- expected to follow in later releases and other extensions. (Wez)
-
Added stream_select() which works like socket_select but works on
- streams returned by fopen(), fsockopen() and pfsockopen() instead.
- (Wez)
-
Added STDIN, STDOUT and STDERR constants for CLI sapi reflecting opened
- streams to their respective standard I/O counterparts. (Edin)
-
Added php.ini option "auto_detect_line_endings" which enables PHP to
- detect Macintosh, Unix and Dos end-of-line characters in fgets() and
- file(). Fixes bugs and . (Wez)
-
Fixed include(), require() and GD functions to work with remote files
- under win32.
-
(ImageCreateFromJPEG can't fetch from a URL). (Wez)
-
-
-
(fopen does not work with php://stdin anymore on Solaris).
- (Wez)
-
Added php.ini option "default_socket_timeout" to set the timeout limit for
- PHP network streams. (kalowsky, ilia@prohost.org, Wez)
-
Added file_get_contents() which returns the contents of a file as a string.
- This function also supports the URL wrappers. (Wez)
-
(Missing functions for GD2 format handling). (Edin)
-
(Wrong directories in ext/ldap/config.m4). (Derick)
-
Fixed bugs and (segfault in sem_remove). (Wez)
-
Added mb_convert_case() function to the mbstring extension which can convert
- strings between upper, lower and title case using Unicode mappings.
- (strtolower & strtoupper does not work for UTF-8 strings).
- (Wez)
-
(htmlentities didn't warn about unsupported charsets). (Wez)
-
(Session related, fix SID redefinition). (Ilia)
-
(Scripting Engine, problem with locales like tr_TR). (Ilia)
-
Changed y2k_compliance to default to 1 now. (Sascha)
-
Added platform independent socket error constants for better error handling. (Jason)
-
Update output of phpinfo() to use more CSS to reduce the file size, do
- proper HTML escaping, and make it XHTML compliant. (Colin)
-
Fixed compile errors in the FriBidi extension (Bug ). (Tal)
-
Fixed bugs , and as well as other potential problems
- with strip_tags() function. (Ilia)
-
Fixed bugs and (Regexps related). (Andrei, Ilia)
-
Fixed bugs and (SEGV with session_decode). (Ilia)
-
Fixed bugs and (Session, XHTML compliance and trans_sid).
- (Sascha)
-
(last character was missing in get_html_translation_table).
- (Wez)
-
Upgraded PCRE to version 3.9. (Wez)
-
Fixed bug in OCIResult() which returned garbage when called on
- empty result-sets. (Thies)
-
Added ability to use Perl-style ${n} subpattern references in the
- replacement string for preg_replace() (bug ). (Andrei)
-
Fixed array_merge_recursive() to avoid problems with merging cyclical
- arrays (bug ). (Andrei)
-
Made function_exists() work properly with disabled functions. (Andrei)
-
Added ability to extract() variables as references via OR'able EXTR_REFS
- flag. (Andrei)
-
Fixed a build failure with the OCI8 extension on Tru64.
- (Patch by Michael Mauch, micahel.mauch@gmx.de)
-
Added --disable-all configure option. (Jani)
-
Backported debug_backtrace() from ZendEngine2. (Thies)
-
Added html-free phpinfo() output for CLI. (Jan)
-
Fixed socket_recvfrom() to be binary safe. (Jason)
-
Changed mail() to use escape_shell_cmd() to allow multiple extra parameters
- to the invocation of the mailer as used in the fifth parameter. (Derick)
-
Changed cURL extension to require cURL version 7.9.8 (Derick)
-
Added zend_execute_internal which is called like zend_execute but for
- internal functions. (Thies)
-
Changed pg_connection_status(), pg_connection_reset(), pg_connection_busy(),
- pg_result_status() and pg_result_error() to silently return FALSE when
- resource is not passed to them. (Yasuo)
-
Fixed some mysql compile failures on 64 bit-OS. (Georg)
-
Added warnings for deprecated mysql functions:
-
-
mysql_create_db()
-
mysql_drop_db()
-
mysql_escape_string()
-
-
-
Added XsltObject-<result_dump_mem($result) for returning xslt-result directly
- into a string and XsltObject-<result_dump_file($result,$file[,$compression])
- for dumping into a file. (morus.walter@web.de, chregu)
-
Made mime_magic and ZIP extensions available on Windows. (Edin)
-
Added xslt_backend_version() and xslt_backend_name() for getting
- information about the processor backend. (chregu)
-
Added ImageColorMatch() and ImageLayerEffect() functions which are only
- available when using the bundled GD library. (ttoohey)
-
Made major improvents to the pcntl extension. (Jason)
-
Implemented object signal callback ability by using array($obj, $method)
-
Added a restart parameter to pcntl_signal, which allows you to disable
- the default of system call restarting
-
-
-
Changed DomNode->next_sibling() and DomNode->previous_sibling() to return
- NULL instead of false (W3C specs). (chregu)
-
Changed DomNode->insert_before() and DomNode->append_child() to conform to
- W3C specs (moving not copying nodes, accepting NULL as 2nd param). (chregu)
Added parameter 'L' for mb_http_input() to retrieve input encoding as a
- comma separated string. (Marcus)
-
Added the ability for declare() compiler modifications to occur globally
- by using an empty statement. (Jason, Zend Engine)
- i.e.
-
- //Globally enables the ticks modifier for the whole program
- declare (ticks=1);
-
- //Enables the ticks modifier for just the lexical block containing
- //"statement".
- declare (ticks=1) {
- statement;
- }
-
-
-
Brought strtotime() "next" keyword handling in line with documentation and
- its glibc cousin. (Rasmus)
-
Fixed str_rot13() to not mangle source string. (Rasmus)
-
Fixed imap_get_quota() to work with multiple returned resources as per
- the RFC 2087 and bug . (kalowsky, Sander Steffann)
-
Added MarkerNote decoding to exif_read_data() for several Cameras. (Marcus)
-
Disabled zlib.output_compression for "image/" content-type
- headers which can be changed during script execution. (Stefan)
-
Added new asynchronous FTP functions. (Stefan)
-
Added optional 5th parameter to FTP functions to support resuming. (Stefan)
-
Added optional 2nd parameter to print_r() to make it return the variable
- representation instead of echoing it. (Derick)
Added safe_mode & open_basedir checks for pg_lo_export(). (Yasuo)
-
Added open_basedir check for pg_lo_import(). (Yasuo)
-
Fixed infinite recursion crash bug in ticks. (Jason)
-
Added php.ini option "mysql.connect_timeout" to set the timeout limit for
- mysql_connect() and mysql_pconnect(). (Georg)
-
Added optional parameter "flags" to mysql_connect() and mysql_pconnect()
- which can be used to set usage of idle timeout and different protocols,
- SSL and compressed. (Georg)
-
Added automatic rollback to ext/mysql for non committed transactions. (Georg)
-
Fixed cases where preg_split() incorrectly terminated final element if it
- contained null bytes. (Andrei)
-
Added persistent connections/pipelining to thttpd. (Sascha)
-
Fixed two potential blocking issues in thttpd. (Sascha)
-
Fixed broken header file detection on Solaris. (Sascha)
Fixed bzopen() crash in thread-safe mode. (Andrei)
-
Added better error-messages (3rd parameter) and validating of DTDs (2nd
- parameter) to domxml_open_mem() and domxml_open_file(). (Christian)
-
Added domxml_doc_validate() for validating existing DomDocuments with a DTD.
- (Christian)
-
Added ability to capture string offsets in preg_match_*() results.
- (David Brown, Andrei)
-
Fixed set_error_handler() to accept methods as callbacks and also report
- invalid callbacks. (Andrei)
-
Fixed a memory corruption bug in overload extension. (Andrei)
-
Fixed error handling in fsockopen() on win32. (Jason)
-
Added win32 support for the timeout parameter of fsockopen(). (Jason)
-
Fixed shuffle() to provide equal distribution of values. (Andrei)
-
Added --with-mysql-sock configure option which can be used to override
- the unix socket location. (e.g. NFS compiles, etc.) (James Cox)
-
Fixed is_a() to properly work on extension registered classes. (Andrei)
-
Added new constants: PHP_PREFIX and PHP_SHLIB_SUFFIX. (Stig)
-
Added pctnl_alarm() function. (Edin)
-
If zlib.output_compression is enabled and a page is compressed
- a "Vary: Accept-Encoding" header is now added. (Stefan)
-
Renamed getallheaders() to apache_request_headers() and kept getallheaders()
- as an alias to it. Also added apache_response_headers() which returns the
- current response headers from Apache. (Rasmus)
-
Added missing AddRef() calls in the COM extension. This should fix weird
- behaviour (in particular with ADODB). (Harald)
-
Fixed segfault in version_compare(). (Stig)
-
Added compressed Flash MX files support to getimagesize(). (Derick)
-
Added ability to capture string offsets in preg_split() results.
- (David Brown, Andrei)
-
Fixed a crash bug in token_get_all(). (Andrei)
-
Implemented glob() for Unix/Win32. (Hartmut, Edin, Markus)
-
Added domxml_doc_set_root() to change the root node. (Lukas Schroeder)
-
Fixed a crash bug in stripslashes() when working in sybase mode. (Rasmus)
-
Added experimental support for Simplified Chinese, Traditional Chinese and
- Korean encodings into mbstring. (Rui)
-
Misc. Win32 mail() enhancements: support 'From:' header (msisolak@yahoo.com),
- support Bcc header, case-insensitive headers, enhanced error reporting,
- automatic proper line ending conversion, fixed crash with Cc, fixed buffer
- overflows with $header. (Markus)
Added optional 5th parameter to domxml_xslt_process(). When set, profiling
- information is saved to the specified file. (chregu)
-
Added MD5 support for crypt() on Windows. (Edin)
-
Fixed resource bug in LDAP extension. (Stig Venaas)
-
Fixed crash in output buffering when buffer is overwritten in a callback.
- (Yasuo)
-
Added output_add_rewrite_var() and output_remove_rewrite_var() to inject
- and remove variables from the URL-Rewriter. (Thies)
-
The Windows build can now be configured more comfortably, for example
- when dealing with built-in extensions. (Sebastian)
-
Added large OID value (2^31 to 2^32) support for pg_lo_import(),
- pg_lo_unlink(), pg_lo_open() and pg_lo_export(). (Yasuo)
-
Fixed mixing OCIPlogon() and OCINLogon() to not leak Oracle-Sessions. (Thies)
-
Added php.ini options for EXIF extension to encode and decode Unicode/JIS
- user comments. (Marcus)
-
Changed the "-c" CLI/CGI option to allow both 'filename' and
- 'path to php.ini'. (Yasuo)
-
Added version information to the .dll and .exe files created under Windows.
- (jtate)
-
Added __FUNCTION__ and __CLASS__ constants. (Jani, Zend Engine)
-
Added optional 2nd parameter for pg_result_status() to specify return type.
- (Yasuo)
-
Added "log_errors_max_len" php.ini option which controls maximum length for
- error messages. (Marcus)
-
Added "ignore_repeated_errors" and "ignore_repeated_source" php.ini options
- which can be used to disable logging of repeated error messages. (Marcus)
-
Made pg_last_notice() work correctly. (Yasuo)
-
Added "pgsql.ignore_notice" and "pgsql.log_notice" php.ini options. (Yasuo)
Added support for --with-apxs build on Mac OS X / Darwin. (markonen)
-
Added support for dynamically loaded extensions on OS X / Darwin.
- NOTE: This requires Apache 1.3.25 or later. (kalowsky, markonen)
-
Fixed CR/LF processing in quoted_printable_decode() on Win32. (kir)
-
Made crack extension available on Win32. Cracklib libraries for Win32 are
- available at http://www.jtatesoftware.com/cracklib/. (jtate)
-
Added mysql_info() function. (Jan)
-
Added mysql_list_processes() and mysql_stat() functions. (Georg)
-
Fixed memory allocation problem on systems that have iconv() support in libc.
- (Yasuo)
-
Made var_dump() handle recursive structures better. (Yasuo, Derick)
-
Added exif_imagetype() function. (Marcus)
-
New improved build system. Among other improvements, replaces the slow
- recursive make with one global Makefile and eases the integration of proper
- dependencies. Automake is only needed for its aclocal tool. The build
- process is now more portable and less resource-consuming. (Sascha)
-
-More information on this release on our Releases page.
-
-
-
-
-
-
-
Version 4.2.3
-
-
-
Enable UTF8 modifier support for PCRE on win32. (Wez, Edin)
-
Enabled strcoll() on win32. (Markus)
-
Fixed possible ASCII control char injection in mail(). (Stefan Esser)
-
Fixed a potential crash bug in import_request_variables() (Zeev)
-
Fixed several problems with directory functions on Windows. (Steph)
-
Fixed xbithack bug in Apache module. (Rasmus)
-
Fixed a bug that prevented touch() from working on various platforms. (Steph)
-
Fixed ob_gzhandler()'s handling of requests that do have the Accept-Encoding header, but do not allow compression. (Zeev)
-
Fixed several bugs in the multithreaded version that could cause random parse errors, especially on machines with multiple CPUs. (Zeev, Zend Engine)
-
Fixed a build problem in bcmath. (Alan)
-
Fixed several bzip2 issues. (Andrei, kalowsky)
-
Fixed several COM issues. (Harald)
-
Various exif fixes. (Marcus)
-
Fixed domxml_xslt_process() and domxml_get_element_by_id() and several other issues in DOMXML. (Christian)
-
Fixed DOMXML crash on removing previously created attributes. (Christian)
-
Fixed crash when converting $GLOBALS to an object. (Zeev, Zend Engine)
-
Fixed ImageCreateFromGD2Part() (Jani)
-
Fixed a build issue in the IMAP extension under IRIX. (kalowsky)
-
Fixed a bug in imap_last_error() (Jani)
-
Various mbstring fixes. (Yasuo, Rui)
-
Fixed a build problem in the mcal extension. (Jani)
-
Made MySQL rollback open transactions when the request ends. (Georg)
-
Fixed a crash in the shutdown order of the ODBC module. (kalowsky)
-
Fixed PCRE build problems. (troels@arvin.dk)
-
Fixed a crash in pg_lo_write() (Yasuo)
-
Fixed posix_isatty() and posix_ttyname(). (Markus)
-
Fixed accidental pg_lo_import() API change. (Yasuo)
-
Fixed ereg_replace() crash when the backreference number was greater than the number of captured subpatterns. (oliver@billix.franken.de)
-
Fixed array_rand() on thread-safe platforms such as Windows. (Edin)
-
Report the right exit code after a call to exit(). (Edin)
Major update of domxml. New functions, better DOM compliance and bug fixes:
-
-
- Changed the old $node->append_child() to $node->append_sibling() since
- the new append_child() behaves correctly (= W3C standard).
-
-
- Added domxml functions:
-
-
domxml_elem_get_elements_by_tagname()
-
domxml_doc_get_elements_by_tagname()
-
domxml_doc_get_element_by_id()
-
domxml_elem_remove_attribute()
-
domxml_elem_get_attribute_node()
-
-
-
- Fixed a segfault in domxml_unlink().
-
-
- Added formatting option to domxml_dump_mem().
-
-
- (Uwe, jtate, Chregu)
-
Fixed a bug in socket_select() that could cause unexpected behavior when
- using a statement like $w = $e = array($sock); This change unfortunately
- prevents the use of constant values (e.g. NULL) for the socket array
- paramaters. Instead, use a temporary variable or an expression with the
- leftmost member being a temporary variable. ex.:
- socket_select($w, $r, $e = NULL, 10); (Jason)
-
Fixed crashes in the session serializer. (Stas)
-
Fixed malformed atime/mtime with touch(). (Yasuo)
-
Fixed a couple of bugs in array_sum() and array_merge(). (Andrei)
-
Fixed SJIS directory name handling under Windows. (Rui)
-
Fixed empty mb_output_handler() output when Content-Type is specified.
- (Yasuo)
-
Fixed the false logic in ext/session which made SID constant not to be
- defined when cookies are disabled. (Sascha)
-
Fixed possible crash bug in HTTP uploads. (Patch: Lucas Schroeder)
-
Fixed possible NULL-pointer dereferencing in the COM extension which
- caused 'Error in php_OLECHAR_to_char()' warnings on various places.
- Also modified the API to consistently return NULL in case of an error.
- (Alan, Harald)
-
Fixed a bug in the COM extension that caused outproc servers to 'hang'
- because of a missing Release() call. (Alan, Harald)
Fixed segfault in ibase_close() if user does not free the resultset.
-Bugs , . (daniela)
-
Fixed pg_last_notice() crash. (Yasuo)
-
Added optional 3rd parameter "int encoding_mode" to gzencode() and fixed
-parameters to conform documentation. (Stefan)
-
Changed read_exif_data() to be an alias of exif_read_data(). (Marcus)
-
Added exif_tagname() function which returns the names of tags and
-exif_thumbnail() function to extract embedded thumbnails. (Marcus)
-
Fixed iconv support with FreeBSD. (kalowsky)
-
Cleaned up the posix extension: (Markus)
-
-
Removed unwanted warning messages
-
Added posix_errno() and posix_strerror() for fetching error messages
-
Changed the way posix_getgrnam() and posix_getgrgid() return their values
-(breaks BC but makes more sense)
-
Does not include functions in symbol table which aren't supported on host
-system.
-
-
Added TIFF support for getimagesize() and read_exif_data(). (Marcus)
-
Changed the Velocis extension namespace to Birdstep to reflect new product
-name. Added aliases for BC. (James)
-
Added safe_mode checks for opendir(). (jflemer)
-
Changed the 2nd parameter in pgsql_fetch_*() functions to support NULL if
-all 3 parameters are supplied, but you do not want to provide a row number.
-(Derick)
-
Improved iconv() when using libc's iconv. (Yasuo)
-
Added PHP_SAPI constant which contains the name of running SAPI. (Edin)
-
Added ob_get_status() which returns an array of buffers with their status.
-(Yasuo)
-
Fixed a crash bug in ob_end_*() functions. ob_end_*() will not delete
-buffers that may not be deleted. (Yasuo)
-
Added 3rd parameter "bool erase" to ob_start(). If FALSE, the buffer may not
-be deleted until script finishes. (Yasuo)
-
Changed ob_*() functions to return TRUE for success, FALSE for failure.
-(Yasuo)
-
Added sybase_ct support to dbx module. (Marc)
-
Fixed error message handling with PostgreSQL 7.2. (Rui)
-
Added object aggregation capability, see aggregation_*() functions. (Andrei)
-
Added debug_zval_dump() which works similarly to var_dump, but displays
-extra internal information such as refcounts and true type names. (Jason)
-
Added Andrei's tokenizer extension. (Stig)
-
Fixed a bug in the COM extension which caused php to crash in
-php_COM_get_ids_of_names(). (Paul, Harald)
-
Removed ext/satellite. It is now part of PEAR. (eriksson)
-
Changed php.ini directive 'safe_mode_include_dir' to accept a (semi)colon
-separated path (like 'include_path') rather than a single directory.
-(jflemer)
-
Added is_a() function that can be used to test whether object is of a certain
-class or is derived from it. (Andrei, Zend Engine)
-
Added optional parameter to highlight_string() and highlight_file() which
-makes these functions to return a highlighted string instead of dumping
-it to standard output. (Derick)
-
Added EXTR_IF_EXISTS and EXTR_PREFIX_IF_EXISTS flags to extract(). (Rasmus)
-
Fixed a segfault in pg_pconnect(). If PostgreSQL server is restarted, broken
-connection is detected and reconnected. (Yasuo)
Added function domxml_dump_node($doc,$node). Dumps a node plus all children
-into a string. (chregu)
-
Added function domxml_node_get_content(). (chregu)
-
Added function domxml_dump_file($filename,[$compression]). Dumps XML to
-a file and uses compression, if specified. (chregu)
-
Added exslt integration to domxml extension (http://exslt.org/ for details).
-Configure with --with-dom-exslt[=DIR] (and --with-dom-xslt).
-(chregu,jaroslaw)
-
Fixed session_unset() to not touch any globals if register_globals is off.
-(Thies)
-
Added 3 new optional parameters to OCIFetchStatement(). They control
-the number of rows to skip at the beginning of the cursor, the
-maximun numer of rows that should be fetched and the format of the
-returned array. (Thies)
-
Updated the XSLT extension to support Sablotron 0.8. (Petr Cimprich)
-
Fixed a bug in preg_match() and preg_match_all() when matching strings
-contain null bytes. (Andrei)
-
Added xpath_register_ns() function. This makes it possible to issue XPath
-queries with namespaces like for example: "//namespace:sampletag".
-(Chris Jarecki)
Added optional second parameter to count() which can be used to specify
-either normal or recursive counting. (patch by Vlad Bosinceanu <glipy@fx.ro>)
-
Added mb_get_info() to get internal settings of mbstring. (Rui)
-
Added async query functions to PostgreSQL module. (Yasuo)
-
Added pg_copy_to()/pg_copy_from() for PostgreSQL module. (Youichi, Yasuo)
-
Added IPv6 support for FTP extension. (Stig Venaas)
-
Improved the speed of wordwrap() significantly. (Jim)
-
Fixed pow()'s incorrect behaviour when dealing with powers of 0. (Jim)
-
Added is_finite(), is_infinite() and is_nan(). (Jim)
-
Fixed segfault in wordwrap() when wrapping to zero width and using
-multi-character break or trying to force cut (bug ). (Jim)
-
Fixed several bugs in dbase extension (dbase_pack() truncate file to right
-size, fix #1 and #2). (Vlad)
-
Fixed bug in krsort() where an extra character was being compared. (Andi)
-
Fixed bug that made pspell include pspell.h from a wrong location. (Vlad)
-
Added function overload in mbstring to add multibyte support for
-string and mail functions. (Rui)
-
Added flags parameter to preg_grep(). The only flag currently is
-PREG_GREP_INVERT that will make the function return entries that
-did not match. (Andrei)
-
Fixed several crash bugs in the xslt extension. (Markus, Derick)
-
Fixed problem with dbase not returning very large (larger than long)
-integers properly. (Vlad)
-
Added concepts to IRCG: bailout-on-trivial issue, write output to
-files, fetch a resource upon connection end. (Sascha)
-
Fixed POST-related bugs in thttpd, added QUERY_STRING, HTTP_HOST,
-HTTP_ACCEPT_LANGUAGE to the script environment, improved patch
-to send correct MIME types, and added support for /nocache/. (Sascha)
-
Fixed several bugs and memleaks in the domxml extension. (Markus)
-
Added var_export() which outputs a representation of a variable as reusable
-PHP code. (Derick)
-
Added -w option to the CGI-version to strip all comments and whitespace
-from the script. (Thies)
-
Added support for SO_RCVTIMEO and SO_SNDTIMEO to ext/sockets. (Jason)
-
Added ob_get_level() which returns the nesting level of the output buffering
-mechanism. (Yasuo, Derick)
-
Added ob_flush() and ob_clean() functions which flush and clean an output
-buffer without destroying the buffer. (Derick)
-
Added new optional parameter to mysql_connect() which forces a new database
-link to be created. (Markus, Derick)
-
Added ldap_sort() function. (Stig Venaas)
-
Added md5_file() function which calculates the MD5 sum of a file.
-Patch by Alessandro Astarita <aleast@capri.it> (Derick)
-
Added support for parsing recordsets contained in WDDX packets. (Andrei)
-
Renamed key_exists() to array_key_exists(). (Derick)
-
Fixed ImageColorsForIndex() and ImageColorAt() to work for TrueColor
-images. (Rasmus)
-
Added support for bind_textdomain_codeset(). <rudib@email.si>
-
Added generic Win 32 API extension. (jmoore)
-
Removed warning message about NONEXISTENT character set from mysql_connect()
-when the server's default character set != latin1. (MySQL Team)
-
Added Direct I/O extension for lowlevel access to the POSIX layer. (Sterling)
-
Added SAPI module for the WebJames server on RISC OS. (Alex Waugh)
-
Fixed ldap_add() and ldap_modify() functions to throw a warning with illegal
-value arrays. Previously segfaulted or added wrong value. (Stig Venaas)
-
Added udm_check_charset() function into mnoGoSearch extension. (gluke)
-
Fixed mnoGoSearch extension to support mnogosearch-3.2.x. (gluke)
-
Made fbsql_num_rows() to return the correct value on all select statements.
-(Frank)
-
Added array_chunk() function which splits an array into chunks of specified
-size. (Andrei)
-
Fixed $HTTP_RAW_POST_DATA to be populated on a missing content-type when
-always_populate_raw_post_data is on. (Rasmus)
-
Added session_cache_expire() function. (patch by <anuradha@gnu.org>) (Andrei)
-
Added array_fill() function. (Rasmus)
-
Made Authorization header to be hidden from phpinfo() output in safe_mode.
-(Rasmus)
-
Re-instated safe-mode realm mangling. (Rasmus)
-
Fixed a bug in preg_replace() that would change the type of the replacement
-array entries to string. (Andrei)
Added ldap_start_tls() function. (Stig Venaas, patch by <kuenne@rentec.com>)
-
Changed rand() and mt_rand() to be seed automatically if srand() or
-mt_srand() has not been called. (Sterling)
-
Changed the seed options to srand() and mt_srand() to be optional. If the
-seed is not specified the most random seed possible is generated. (Sterling)
-
Added array_change_key_case() function which returns an array with all
-string keys lowercased or uppercased. (Edin)
-
Added parameter to ircg_pconnect to suppress treating non-fatal errors
-as fatal, and added conversion of Windows quotes to ". (Sascha)
-
Added pcntl_exec() function which behaves similar to the system execve.
-(Jason)
-
Fixed segfault and check for truecolor image in ImageColorAt(). (Rasmus)
-
Fixed nl2br() to handle all styles of line-endings in one string.
-(Boian, Derick)
-
Added mcrypt_generic_deinit() to replace mcrypt_generic_end(). (Derick)
-
Added apache_setenv() function for injecting variables into Apache's
-subprocess_env table. (Rasmus)
-
Added support for 'int', 'bool', 'float' and 'null' in settype(). (Jeroen)
-
Added IPv6 support to gethostbyaddr().
-(Patch by Matthias Wimmer <matthias@charente.de> and venaas)
-
Fixed LONG_VARCHAR type crashing in ODBC extension. Patch by Walter Franzini.
-(kalowsky)
-
Changed in_array() and search_array() to allow the needle to be an array
-in itself. (Andrei)
-
Added ini_get_all() function which returns all registered ini entries
-or entries for the specified extension. (Jani)
-
Added support for chinese encodings in htmlentities() and htmlspecialchars().
-(Patch by Alan Knowles <alan_k@hklc.com> and Wez)
-
Improved support for autoconf-2.50+/libtool 1.4b+. (Jan Kneschke, Sascha)
-
-More information on this release on our Releases page.
-
-
-
-
-
-
-
Version 4.1.2
-
-
-
Fixed start up failure when mm save handler is used and there is multiple
- SAPIs are working at the same time. (Yasuo)
-
Fixed the Roxen SAPI (Yasuo)
-
Fixed a buffer overflow in the RFC-1867 file upload code (Stefan)
-
Fixed a crash in the session module (Yasuo)
-
Fixed a crash in the pspell module (Yasuo)
-
Changed the default output encoding of mbstring 'pass' to fix
- initialization problem (Rui)
Worked around a bug in the MySQL client library that could cause PHP to hang
- when using unbuffered queries. (Zeev)
-
Fixed a bug which caused set_time_limit() to affect all subsequent requests
- to running Apache child process. (Zeev)
-
Removed the sablotron extension in favor of the new XSLT extension.
- (Sterling)
-
Fixed a bug in WDDX deserialization that would sometimes corrupt the root
- element if it was a scalar one. (Andrei)
-
Make ImageColorAt() and ImageColorsForIndex() work with TrueColor images.
- (Rasmus)
-
Fixed a bug in preg_match_all() that would return results under improper
- indices in certain cases. (Andrei)
-
Fixed a crash in str_replace() that would happen if search parameter was an
- array and one of the replacements resulted in subject string being empty.
- (Andrei)
-
Fixed MySQL extension to work with MySQL 4.0. (Jani)
-
Fixed a crash bug within Cobalt systems. Patch by tomc@tripac.com.
-(Jani)
-
Bundled Dan Libby's xmlrpc-epi extension.
-
Introduced extension version numbers. (Stig)
-
Added version_compare() function. (Stig)
-
Fixed pg_last_notice() (could cause random crashes in PostgreSQL
- applications, even if they didn't use pg_last_notice()). (Zeev)
-
Fixed DOM-XML's error reporting, so E_WARNING errors are given instead of
- E_ERROR error's, this allows you to trap errors thrown by DOMXML functions.
- (Sterling)
-
Fixed a bug in the mcrypt extension, where list destructors were not
- properly being allocated. (Sterling)
-
Better Interbase blob, null and error handling. (Patch by Jeremy Bettis)
-
Fixed a crash bug in array_map() if the input arrays had string or
- non-sequential keys. Also modified it so that if a single array is passed,
- its keys are preserved in the resulting array. (Andrei)
-
Fixed a crash in dbase_replace_record. (Patch by robin.marlow@dps-int.com)
-
Fixed a crash in msql_result(). (Zeev)
-
Added support for single dimensional SafeArrays and Enumerations.
- Added com_isenum() function to check if a component implements an
- enumeration. (Alan, Harald)
-
Fixed a bug in dbase_get_record() and dbase_get_record_with_names().
- boolean fields are now returned correctly.
- Patch by Lawrence E. Widman <widman@cardiothink.com> (Jani)
-
Added --version option to php-config. (Stig)
-
Improved support for thttpd-2.21b by incorporating patches for all known
- bugs. (Sascha)
-
Added ircg_get_username, a roomkey argument to ircg_join, error fetching
- infrastructure, a tokenizer to speed up message processing, and fixed
- a lot of bugs in the IRCG extension. (Sascha)
-
Improved speed of the serializer/deserializer. (Thies, Sascha)
-
Floating point numbers are better detected when converting from strings.
- (Zeev, Zend Engine)
-
Replaced php.ini-optimized with php.ini-recommended. As the name implies,
- it's warmly recommended to use this file as the basis for your PHP
- configuration, rather than php.ini-dist. (Zeev)
-
Restore xpath_eval() and php_xpathptr_eval() for 4.0.7. There
- are still some known leaks. (Joey)
-
Added import_request_variables(), to allow users to safely import form
- variables to the global scope (Zeev)
-
Introduced a new $_REQUEST array, which includes any GET, POST or COOKIE
- variables. Like the other new variables, this variable is also available
- regardless of the context. (Andi & Zeev)
-
Introduced $_GET, $_POST, $_COOKIE, $_SERVER and $_ENV variables, which
- deprecate the old $HTTP_*_VARS arrays. In addition to be much shorter to
- type - these variables are also available regardless of the scope, and
- there's no need to import them using the 'global' statement. (Andi & Zeev)
-
Added vprintf() and vsprintf() functions that allow passing all arguments
- after format as an array. (Andrei)
-
Added support for GD2 image type for ImageCreateFromString() (Jani)
-
Added ImageCreateFromGD(), ImageCreateFromGD2(), ImageCreateFromGD2part(),
- ImageGD() and ImageGD2() functions (Jani)
-
addcslashes now warns when charlist is invalid. The returned string
- remained the same (Jeroen)
-
Added optional extra argument to gmp_init(). The extra argument
- indicates which number base gmp should use when converting a
- string to the gmp-number. (Troels)
-
Added the Cyrus-IMAP extension, which allows a direct interface to Cyrus'
- more advanced capabilities. (Sterling)
-
Enhance read_exif_data() to support multiple comment tags (Rasmus)
-
Fixed a crash bug in array_map() when NULL callback was passed in. (Andrei)
-
Change from E_ERROR to E_WARNING in the exif extension (Rasmus)
-
New pow() implementation, which returns an integer when possible,
- and warnings on wrong input (jeroen)
-
Added optional second parameter to trim, chop and ltrim. You can
- now specify which characters to trim (jeroen)
-
Hugely improved the performance of the thread-safe version of PHP, especially
- under Windows (Andi & Zeev)
Improved the stability of OCIPlogon() after a database restart. (Thies)
-
Fixed __FILE__ in the CGI & Java servlet modes when used in the main script.
- It only worked correctly in included files before this fix (Andi)
-
Improved the Zend hash table implementation to be much faster (Andi, Zend
- Engine)
-
Updated PHP's file open function (used by include()) to check in the calling
- script's directory in case the file can't be found in the include_path (Andi)
-
Fixed a corruption bug that could cause constants to become corrupted, and
- possibly prevent resources from properly being cleaned up at the end of
- a request (Zeev)
-
Added optional use of Boyer-Moore algorithm to str_replace() (Sascha)
-
Fixed and improved shared-memory session storage module (Sascha)
-
Add config option (always_populate_raw_post_data) which when enabled
- will always populate $HTTP_RAW_POST_DATA regardless of the post mime
- type (Rasmus)
-
Added support for socket and popen file types to ftp_fput (Jason)
-
Fixed various memory leaks in the LDAP extension (Stig Venaas)
-
Improved interactive mode - it is now available in all builds of PHP, without
- any significant slowdown (Zeev, Zend Engine)
-
Fixed crash in iptcparse() if the supplied data was bogus. (Thies)
-
Fixed return value for a failed snmpset() - now returns false (Rasmus)
-
Added hostname:port support to snmp functions (nbougues@axialys.net, Rasmus)
-
Added fdf_set_encoding() function (Masaki YATSU, Rasmus)
-
Reversed the destruction-order of resources. This fixes the reported OCI8
- "failed to rollback outstanding transactions!" message (Thies, Zend Engine)
Improved range() function to support range('a','z') and range(9,0) types of
- ranges. (Rasmus)
-
Added getmygid() and safe_mode_gid ini directive to allow safe mode to do
- a gid check instead of a uid check. (James E. Flemer, Rasmus)
-
Made assert() accept the array(&$obj, 'methodname') syntax. (Thies)
-
Made sure that OCI8 outbound variables are always zero-terminated. (Thies)
-
Fixed a bug that allowed users to spawn processes while using the 5th
- parameter to mail(). (Derick)
-
Added nl_langinfo() (when OS provides it) that returns locale.
-
Fixed a major memory corruption bug in the thread safe version. (Zeev)
-
Fixed a crash when using the CURLOPT_WRITEHEADER option. (Sterling)
-
Added optional suffix removal parameter to basename(). (Hartmut)
-
Added new parameter UDM_PARAM_VARDIR ha in Udm_Set_Agent_Param() function to
- support alternative search data directory. This requires mnogoSearch 3.1.13
- or later.
-
Fixed references in sessions. This doesn't work when using the WDDX
- session-serializer. Also improved speed of sessions. (Thies)
-
Added new experimental module pcntl (Process Control). (Jason)
-
Fixed a bug when com.allow_dcom is set to false. (phanto)
-
Added a further parameter to the constructor to load typelibs from file when
- instantiating components (e.g. DCOM Components without local registration).
- (phanto)
-
Added the possibility to specify typelibs by full name in the typelib file
- (Alan Brown)
-
Renamed the ZZiplib extension to the Zip extension, function names have also
- changed accordingly, functionality, has stayed constant. (Sterling)
-
Made the length argument (argument 2) to pg_loread() optional, if not
- specified data will be read in 1kb chunks. (Sterling)
-
Added a third argument to pg_lowrite() which is the length of the data to
- write. (Sterling)
-
Added the CONNECTION_ABORTED, CONNECTION_TIMEOUT and CONNECTION_NORMAL
- constants. (Zak)
-
Assigning to a string offset beyond the end of the string now automatically
- increases the string length by padding it with spaces, and performs the
- assignment. (Zeev, Zend Engine)
-
Added warnings in case an uninitialized string offset is read. (Zeev, Zend
- Engine)
-
Fixed a couple of overflow bugs in case of very large negative integer
- numbers. (Zeev, Zend Engine)
-
Fixed a crash bug in the string-offsets implementation (Zeev, Zend Engine)
-
Improved the implementation of parent::method_name() for classes which use
- run-time inheritance. (Zeev, Zend Engine)
-
Added 'W' flag to date() function to return week number of year using ISO
- 8601 standard. (Colin)
-
Made the PostgreSQL driver do internal row counting when iterating through
- result sets. (gvz@2scale.net)
-
Updated ext/mysql/libmysql to version 3.23.39; Portability fixes, minor
- bug fixes. (tim@mysql.com)
-
Added get_defined_constants() function to return an associative array of
- constants mapped to their values. (Sean)
-
New mailparse extension for parsing and manipulating MIME mail. (Wez)
-
Define HAVE_CONFIG_H when building standalone DSO extensions. (Stig)
-
Added the 'u' modifier to printf/sprintf which prints unsigned longs.
- (Derick)
-
Improved IRIX compatibility. (Sascha)
-
Fixed crash bug in bzopen() when specifying an invalid file. (Andi)
-
Fixed bugs in the mcrypt extension that caused crashes. (Derick)
-
Added the IMG_ARC_ROUNDED option for the ImageFilledArc() function, which
- specified that the drawn curve should be rounded. (Sterling)
-
Updated the sockets extension to use resources instead of longs for the
- socket descriptors. The socket functions have been renamed to conform with
- the PHP standard instead of their C counterparts. The sockets extension is
- now usable under Win32. (Daniel)
-
Added disk_total_space() to return the total size of a filesystem.
- (Patch from Steven Bower)
-
Renamed diskfreespace() to disk_free_space() to conform to established
- naming conventions. (Jon)
-
Fixed . Now zero is returned instead of an unset value for
- 7-bit encoding and plain text body type. (Vlad)
-
Fixed a bug in call_user_*() functions that would not allow calling
- functions/methods that accepted parameters by reference. (Andrei)
-
Added com_release($obj) and com_addref($obj) functions and the related class
- members $obj->Release() and $obj->AddRef() to gain more control over the used
- COM components. (phanto)
-
Added an additional parameter to dotnet_load to specify the codepage (phanto)
-
Added peak memory logging. Use --enable-memory-limit to create a new Apache
- 1.x logging directive "{mod_php_memory_usage}n" which will log the peak
- amount of memory used by the script. (Thies)
-
Made fstat() and stat() provide identical output by returning a numerical and
- string indexed array. (Jason)
-
Fixed memory leak upon re-registering constants. (Sascha, Zend Engine)
-
-More information on this release on our Releases page.
-
-
-
-
-
-
-
Version 4.0.6
-
-
-
Fixed memory fragmention problem which could lead to web server processes
- growing much more than they should. (Andi, Zend Engine)
-
Made $HTTP_SESSION_VARS['foo'] and $foo be references to the same value
- when register_globals is on. (Andrei)
-
Fixed disk_free_space() and disk_total_space() under FreeBSD. (Jon)
-
Fixed readfile/passthru losing resources during connection abort (Sascha)
-
Fixed bug in the mcrypt extension that caused segfaults when using a key
- that is too large for the used algorithm, and a bug that caused
- mcrypt_generic() to segfault PHP (Derick)
-
Fixed getopt so that it accepts command line arguments in the form
- -<opt><arg> and -<opt> <arg>. (Jmoore)
-
Fixed race in writing session files (Sascha)
-
Fixed a possible crash in the PHP CGI when no input file is
- specified (Zeev)
-
Added is_callable() function that can be used to find out whether
- its argument is a valid callable construct. (Andrei)
-
Fixed a rare possible crash when generating extended information. (Dmitri
- Dmitrienko, Zend Engine)
-
Improved virtual() to support PHP-enabled URIs. (Zeev)
-
Fixed undefined behavior when using floating point keys in array()
- expressions. (Zeev, Zend Engine)
-
Fixed a possible crash in case of parse errors in include files or eval
- statements. (Zeev, Zend Engine)
-
Added --with-layout configure option. (Stig)
-
Improved interactive mode - supports function calls, and works in
- multithreaded builds. (Zeev, Zend Engine)
-
Fixed a crash bug in interactive mode. (Zeev, Zend Engine)
-
Added pg_last_notice() function. (Rasmus from suggestion by Dirk@rackspace.com)
-
Fixed a bug in preg_split() that would incorrectly limit the number of
- results when used along with PREG_SPLIT_NO_EMPTY flag. (Andrei)
-
Added connection error support to mysql_error() and mysql_errno(). (Jason)
-
Added support to getimagesize to return dimensions of BMP and PSD
- files. (Derick)
-
Added heuristic to kill stale IRC connections, message scanner caching, and
- nickname escaping to IRCG, suppress option to ircg_msg(), and statistics to
- IRCG phpinfo() output. (Sascha)
-
Added Japanese multibyte string functions support. (Rui)
-
Added Mac OS X "\r" line ending support. (Andi, Zend Engine)
-
Fixed a bug regarding the $PHP_SELF being incorrectly registered when
- force-cgi-redirect was not enabled. (Sterling)
-
pfpro extension now supports version 3 of the Verisign SDK. (John Donagher)
-
Udm_Cat_List and Udm_Cat_Path functions has been added.
-
Added key_exists() to check if a given key or index exists in an
- array or object. (David Croft)
-
Modify the cURL extension to compile only with the latest cURL release.
- Backwards compatibility with regards to the extension api has not been
- broken. (Sterling)
-
Added the ability to use user-defined callbacks with cURL. (Sterling)
-
Added the SSL_VERIFYPEER, CAINFO, MAXREDIRS, FILETIME, RANDOM_FILE, EGDSOCKET
- and CONNECTTIMEOUT options to curl_setopt(). (Sterling)
-
Added support for persistent connections with cURL. (Sterling)
-
Fixed a problem in cURL with file descriptors being allocated, but never
- closed. (Sterling)
-
Fixed interactive mode (-a). It works again with the same limitations it
- has always had. (Andi, Zend Engine)
-
Improved memory manager to use less memory and provide better memory overflow
- detection abilities in debug mode. (Andi, Zend Engine)
-
Fixed resource leaks when resources were being cast to numbers. (Zeev, Zend
- Engine)
-
Fixed foreach() to not crash when being sent an invalid argument. (Andi, Zend
- Engine)
-
Fixed a bug in opendir() under Windows when trying to open a non-exisiting
- directory. (Andi)
-
Fixed popen() and the exec family under Win32 (Unable to fork issue). (Daniel)
-
Make the printf family of functions binary clean. (Rasmus)
-
Fixed WDDX serialization to HTML-escape key/variable names so as not to
- break the XML packet. (Andrei)
-
Made WDDX extension enabled by default. (Andrei)
-
Added -C command-line option to avoid chdir to the script's directory. (Stig)
-
Fixed a bug with /e modifier in preg_replace(), that would not correctly
- replace two-digit references if single digit references were present
- before them. This fixed bug . (Andrei)
-
Added temporary LOB support in OCI8. (Patch by David Benson)
-
Fixed crash in pathinfo()
-
OCI8 now supports binding of collections. (Patch by Andy Sautins
- <asautins@veripost.net>)
-
Added GD 2.0.1 support for truecolor and alpha channels, plus some other gd
- functions, both old and new - see docs for more info. (Wez)
-
Added S/MIME sign/verify encrypt/decrypt functions to openssl extension,
- along with some other certificate manipulation and interrogation functions.
- See docs for more info. (Wez)
Add DIRECTORY_SEPARATOR constant ('/' on UNIX, '\' on Windows). (Stig)
-
Added small change to php_odbc module, to check for failed SQLDisconnects
- and to close any outstanding transactions if the call fails, then disconnect
- again. (lurcher)
-
Modified get_parent_class() and get_class_methods() to accept a class name as
- well as a class instance. (Andrei, Zend Engine)
-
Added support for UNC style paths. (\\server\share\file,
- //server/share/file). (Daniel, TSRM)
-
Added dbx module (database abstraction) to the repository. (Marc)
-
Using ITypeInfo instead of IDispatch if possible. This makes DCOM calls
- and even COM calls much faster.
- All ini settings are now prefixed by 'com.'.
- Now you need not provide a path to the file containing the typelib, you can
- also provide the GUID of the TypeLib - entry or an IID for preloading
- type - information. (phanto)
-
Rewrite of domxml. It's now mostly DOM Level 2 conform. (Uwe)
-
Added array_map() function that applies a callback to the elements
- of given arrays and returns the result. It can also be used with a
- null callback to transpose arrays. (Andrei)
-
Added array_filter(), which allows filtering of array elements via
- the specified callback. (Andrei)
-
Fixed all relevant array functions to avoid moving the internal array
- pointer during operations. (Andrei)
-
Added mysql_unbuffered_query(), which is useful for very large result sets.
- (Zeev)
IMPORTANT: removed /F modifier handling from preg_replace(). Instead
- one should use new preg_replace_callback() function. (Andrei)
-
Added new php.ini directive: arg_separator.input which is used to tell
- PHP which characters are considered as argument separators in URLs.
- Renamed php.ini directive: arg_separator -> arg_separator.output (Jani)
-
Added FastCGI SAPI module. (Ben Mansell)
-
Added array_reduce(), which allows iterative reduction of an array
- to a single value via a callback function. (Andrei)
-
The imageloadfont function of the gd extension should be not platform
- dependent after this fix. (alex@zend.com)
-
Fixed a compatibility problem in some file functions (fgets, fputs, fread,
- fwrite). The ANSI standard says that if a file is opened in read/write
- mode, fseek() should be called before switching from reading to writing
- and vice versa. (alex@zend.com)
-
Fixed argument checking for call_user_func* functions and allowed
- specifying array($obj, 'method') syntax for call_user_func_array. (Andrei)
-
Fixed parent::method() to also work with runtime bindings.
- (Zeev, Zend Engine)
-
Implemented high-performance zlib-based output compression - see
- zlib.output_compression INI directive. (Zeev)
-
Improved ob_gzhandler() to support chunked output buffering - it's
- recommended to use it with 4KB chunks. (Zeev)
-
Fixed chunked output buffering. (Zeev)
-
Forced call_user_method() and call_user_method_array() to take the
- object argument by reference. (Andrei)
-
Fixed binding of ROWIDs in OCI8. (Thies)
-
Added PEAR/Cache as a generic Caching System. (Sebastian, PEAR/Cache)
-
Added IMAP quota support (imap_set_quota, imap_get_quota), enabled/added via
- c-client2000. (kalowsky)
-
Upgraded PCRE to version 3.4. (Andrei)
-
Added array_search which works similar to in_array but returns
- the key instead of a boolean. (jason@php.net)
-
Fixed pgsql transaction support. (Stig, PEAR/DB)
-
Added new object VARIANT() to encapsulate values for use with
- the COM and DOTNET module. Therefore it is now possible to pass
- values by reference, convert php values to extended variant types (currency,
- date, idispatch, iunknown, ...) and define the codepage that should
- be used for unicode - conversion.
-
Improved overall speed of IRCG, added URL handling to message scanner.
- (Sascha)
-
Fixed some modules to allow using output-buffering. (Thies)
-
Added the chroot() function. (Derick)
-
PostgreSQL now does a rollback at the end of a request on every
- persistent connection. This is done by doing an "empty" transaction
- on the connection. This was advised by someone from the PostgreSQL
- core-team. (Thies)
-
Fixed PostgeSQL pg_connect() bug. We would sometimes close the default
- link by accident. (Patch by: aja@nlgroup.ca)
-
Improved OCI8 dead-session detection. (Patch by: George Schlossnagle)
-
Fixed get_meta_tags() multiline bug . (Sean)
-
Prefer random() over *rand48(). (JimJag)
-
Sped up WDDX serialization 2x. (Andrei)
-
Added a new parameter to mail() which appends aditional command line
- parameters to the mail program. (Derick)
Fixed mnogosearch protos. Fixed mnogosearch functions return values.
- A bug with capital letters break search has been fixed. (gluke)
-
Static methods can now be called via call_user_method_* functions, e.g.
- call_user_method('method', 'class'), and also array('class', 'method')
- constructs (for array_walk(), for example). (Andrei, Zend Engine)
-
microtime() under Windows now returns accurate values. (James)
-
Added PREG_SPLIT_DELIM_CAPTURE flag to preg_split() that allows for Perl-like
- functionality of capturing parenthesized delimiter expression. (Andrei)
-
Fixed strip_tags() to not strip a lone > character. (Rasmus)
-
When using the ob_gzhandler() PHP now automagically also sets the
- Content-Lengh correctly which enables browsers to use the HTTP
- Keep-Alive feature. (Thies)
-
Improved handling of preg_replace() /F modifier so that it's possible to
- specify array($obj, 'method') construct as a replacement function. (Andrei)
-
Added mysql_get_client_info(), mysql_get_server_info(),
- mysql_get_proto_info(), and mysql_get_host_info() functions. (Sean)
-
Major change of the php pdf api. It could break some functions though
- backwards compatibility was tried to maintain. Adding some still
- missing functions as well. (Uwe)
Added the pg_lolseek and pg_lotell functions. (Derick)
-
Fixed wrong breaking with the wordwrap function. (Derick)
-
Fixed 'O' and 'r' flags of date() to have correct sign for timezone
- offset. (Andrei)
-
Changed 'Z' flag to date() to always return timezone offset with
- negative sign if it's west of UTC. (Andrei)
-
Added the HTML_Processor class which provides common functions for
- processing HTML. (Sterling)
-
Added localeconv() and strcoll() functions for localization. (Sean)
-
Added the xslt_set_base function. (Sterling)
-
Added support for Zeus 3.3.8.
-
Added odbc_error() and odbc_errormsg() functions. (Stig)
-
New extension for vpopmail - http://www.inter7.com/vpopmail,
- give it a try, but keep in mind that it is not ready for production
- environments. (David Croft, Boian Bonev)
-
Added sybase_get_last_message() to the Sybase CT module. (Jan Fedak)
-
Made ldap_list(), ldap_read() and ldap_search() do parallel search when
- first parameter is an array of link identifiers. (Stig Venaas)
-
Made fopen() of HTTP URL follow redirects, $http_response_header will
- contain all headers with empty string as delimiter. (Stig Venaas)
-
Added Console_Getopt class for parsing command-line args. (Andrei, PEAR)
-
Added an experimental version of the ZZipLib extension which provides the
- ability to read zip files. (Sterling)
-
Allow access to uploaded files in safe_mode. Beware that you can only
- read the file. If you copy it to new location the copy will not have the
- right UID and you script won't be able to access that copy. (Thies)
-
Changed extract() to check that prefixed name is a valid one. (Andrei)
-
Changed extract() to return the number of variables extracted. (Andrei)
-
Added ldap_rename() function. (Stig Venaas)
-
Made ldap_set_option() support controls. (Stig Venaas)
-
Changed ldap_search() and added functions ldap_parse_result(),
- ldap_first_reference(), ldap_next_reference() and ldap_parse_reference()
- to cope with LDAPv3 stuff like referrals and references. (Stig Venaas)
-
Fixed date('r') overflow.
-
Made the php.ini path reported in phpinfo() always point to the absolute
- path that was opened. (Zeev)
-
Made the INI mechanism thread safe. (Zeev, Zend Engine)
-
Changed setlocale() to use LC_* constants. (Jani)
-
ctype functions now follow the extension naming conventions. (Hartmut)
-
Added iconv() function (using libc or libiconv). (Stig)
-
Added ODBC_TYPE constant. (Stig)
-
Added the call_user_method_array function which allows you to call a method
- with an arbitrary number of parameters. (Sterling)
-
ext/odbc: IBM DB2 patch by Walter Franzini. (walter@sys-net.it)
-
Added extension for the cracklib library. (Alexander Feldman)
Allow assigning a newly created object by reference. This is needed only if
- your constructor makes other data structures reference the $this object (for
- example, $GLOBALS["foobar"] =& $this;)
- The new syntax is $obj =& new MyClass(); (Andi, Zend Engine)
-
Allow for three expression types to be sent to functions which are requesting
- the function argument to be passed by reference (only c. was previously
- supported):
- a. func(new myclass());
- b. func(func2()); where func2() returns a reference, i.e. is defined as
- function &func2(...)
- {
- ...
- }
- c. func($var); where func() is defined as function func(&$var) {...}
- You CAN'T count on any other expressions to be passable by reference.
- (Andi, Zend Engine)
-
Made ldap_get_entries() return an array even if there are no entries
- in search result. (Jani)
-
Fixed bad mod_perl interaction which caused segfaults when using LFS (Sascha)
-
const CONSTNAME now gets recognized. Before the patch only @const CONSTNAME
- description was recognized.
-
Added the is_null() function that will return true if a variable is of
- type null. (Sterling)
-
Fixed a bug which made readdir() unusable in some systems. (Jani)
-
Added the get_defined_functions() function which returns a list of all
- currently defined functions. (Sterling)
-
Added the get_defined_vars() function which returns an associative array
- of all variables defined in the current scope and their subsequent values.
- (Sterling)
-
Added the call_user_func_array() function which gives you the ability to
- call a user function by passing an array of parameters as the second
- argument. (Sterling)
-
Added the constant() function which returns the value of a constant given
- the constant's name. (Sterling)
-
Implemented support for Perl-style matching regexp delimiters in PCRE.
- You can use <{[( and )]}> to delimit your expressions now. (Andrei)
-
Introduced new 'F' modifier in PCRE that lets you specify a function
- name in the replacement argument to preg_replace() that will be called
- at run-time to provide the replacement string. It is passed an array of
- matched pattern and subpatterns. (Andrei)
-
Put an end to Bug (kalowsky & Eric Veldhuyzen)
-
Fixed realpath() in Virtual Directory mode (Daniel)
-
Integrated the Phil Nelson's bc math library routines into PHP, now that
- the license allows it (Phil Nelson)
-
Added the xslt_set_error_handler() function to the Sablotron extension.
- (Sterling)
-
Improved Sablotron's error handling system allowing you to catch all
- errors before they are outputted to the screen. (Sterling)
-
Added OpenSSL extension (Stig Venaas)
-
Fixed/created support for Solid 3.0 databases (kalowsky)
-
Fixed support for Solid 2.3 databases (kalowsky)
-
quoted_printable_decode() function is made RFC-2045 compliant. (Kir)
-
Modified preg_grep() to always return the results with keys from the original
- array. (Andrei)
-
Modified preg_replace() to accept Perl-style $n backreferences in addition
- to \\n ones. (Andrei)
-
Modified preg_replace() to ignore backreferences that refer to
- non-existing subpatterns. (Andrei)
-
Fixed column-title buffer-overflow in OCIFetchStatement(). (Thies)
-
Added 'output_handler' INI directive (Zeev)
-
Fixed some buglets in the output buffering mechanism (Zeev)
-
Added transparent gzip compression support (Jade Nicoletti, Zeev)
-
Major overhaul of domxml. Added basic XPath support as well (Uwe)
-
Added 'r' flag to date() which generates an RFC822 formatted date, e.g.
- "Thu, 9 Nov 2000 16:33:01 -0500" (Colin)
-
In CGI mode, $HTTP_SERVER_VARS now includes all of the environment variables
- as well (Zeev)
-
Allow user to use mysql_use_result in mysql queries (Stas)
-
Fixed a memory leak that would occur when restarting Apache often
- (mookid@sigent.ru)
-
Fixed a bug that prevented $argv and $argc from being defined in the command
- line version of PHP (Stas)
-
Fixed a bug that prevented a changed compile-time extension_dir from
- affecting modules that were loaded via php.ini (Zeev)
-
Fixed a bug in ftp_mkdir() when used on ftp server which doesn't return
- the full path (Jani)
-
Added ImageCreateFromString() which creates an image stream out of
- e.g. a MySQL blob. (Mathieu)
-
Fixed a crash bug in imagewbmp() (Jani)
-
Changed the sablot configuration file so that if you use any version of
- Sablotron below 0.44 you must use Sablotron's built-in Expat libraries.
- (Sterling)
-
Added basic authentication support to thttpd (Sascha)
-
Added support for the Caudium webserver (http://caudium.net/). It's based
- on the Roxen SAPI module. Many bugs have been identified and fixed. (David)
-
Fixed mysql_close(), pg_close(), msql_close() and sybase_close() - they
- weren't properly closing the SQL connections (Zeev)
-
Fixed crypt() to supply random seed if none is given (Andi)
-
Made print_r() support recursive data structures, e.g. $GLOBALS. (Zeev)
-
Fixed a bug that caused PHP not to properly flush its output buffer, if more
- than one output buffer was used. (Zeev)
-
Fixed a bug that could draw the shutdown sequence of the PHP Apache module
- into an endless loop, under certain circumstances. It could cause Apache
- processes under Solaris to get stuck, especially when using output
- buffering. (Zeev)
-
Added support for serializing references (Stas)
-
Fixed conflict with OpenLDAP and Oracle 8.1.x (Jani)
-
parse_ini_file() supports a new optional 2nd argument that instructs it
- to divide the directives to arrays according to the sections in which they
- reside (Zeev)
-
parse_ini_file() is now thread-safe, and supported under Windows (Zeev)
-
Unified aborted-connection semantics of all SAPI modules (Sascha)
-
URL-opened files now store the HTTP response header in $http_response_header
- (Zeev)
-
Fixed array_rand() to shuffle results when the number of requested
- elements is the same as the number of elements in the array. (Andrei)
-
Added replace parameter to header() (Sascha)
-
Fixed handling of single quotes in transparent session-id mode (Sascha)
-
Fixed "php://*" fopen handler (Sascha)
-
Made rename work in threadsafe enviroments (Daniel)
-
Made session_destroy() close files before unlinking (Daniel)
-
Added array_sum() function. (Andrei)
-
Fixed a bug in session.c. The php_session_save_current_state did not check
- if mod_data is NULL and such situation is possible if the user calls
- session_module_name with a parameter. (alex@zend.com)
-
Added IIS Admin extension. (Frank)
-
OCIBindByName() now does better parameter-checking. (Thies)
-
Made read() binary-safe in sockets.c (Chris Vandomelen)
-
Made array_intersect() and array_diff() not alter order (Stig Venaas)
-
Made ldap_connect() accept URL in host parameter when using OpenLDAP
- 2.x. To use SSL, use ldaps://host/ as URL. (Stig Venaas)
-
Made resource type names visible, e.g. var_dump() and
- get_resource_type() display "file" for file resources. (Andrei)
-
Added the curl_getinfo() function to find out information about a CURL
- transfer. This function requires cURL 7.4.0 or above. (Sterling)
-
Added the CURLOPT_KRB4, CURLOPT_INTERFACE, CURLOPT_QUOTE, CURLOPT_POSTQUOTE,
- CURLOPT_QUOTE and CURLOPT_HTTPPROXYTUNNELL options. (Sterling)
-
Renamed the shm_* functions to shmop_* (Derick)
-
Updated ext/mysql/libmysql to version 3.23 (tim@mysql.com)
-
Added ldap_get_option() and ldap_set_option() functions (Stig Venaas)
-
Fixed a crash in CGI mode, in case no file was provided
- (Daniel Beulshausen& Zeev)
-
Fixed possible crash bug in imap_fetchstructure() (Jani)
-
Fixed possible crash bug in imap_open() (Jani & Mark Musone)
Fixed a possible crash in -a interactive mode (Zeev, Zend Engine)
-
Added mysql_escape_string() (Peter A. Savitch and & Brian Wang)
-
Fixed many possible crash bugs with improper use of the printf() family of
- functions (Andi)
-
Fixed a problem that allowed users to override admin_value's and admin_flag's
- (Zeev)
-
Fixed PostgreSQL module to work when the link handle is omitted (Zeev)
-
Fixed returning of empty LOB fields in OCI8. (Thies)
-
Added Calendar module to default Win32 build (Andi)
-
Added FTP module to default Win32 build (Andi)
-
Fixed crash in the POSIX getrlimit() function (alex@zend.com)
-
Fixed dirname() under certain conditions (Andi)
-
Added --with-imap-ssl to support SSL'ized imap library in RH7 and others
- (Rasmus)
-
Fixed possible crash bug in parse_url() (Andi)
-
Added support for trans sid under Win32 (Daniel)
-
IPv6 support in fopen (Stig Venaas)
-
Added the shmop extension. It allows more general ways of shared memory
- access. (thanks to Ilia Alshanestky <iliaa@home.com> and Slava Poliakov
- <slavapl@mailandnews.com> (Derick)
-
Added the ability for CURLOPT_POSTFIELDS to accept an associative array of
- HTTP POST variables and values. (Sterling)
-
Added the CURLOPT_HTTPHEADER option to curl_setopt(). (Sterling)
-
Added the curl_error() and curl_errno() functions. (Sterling)
-
Changed ext/db not to be enabled by default (Jani)
-
Fixed building Apache SAPI module on SCO UnixWare (Sascha)
-
Fixed writing empty session sets to shared memory (tcarroll@chc-chimes.com)
-
Added support for BSD/OS make (Sascha)
-
Added improved URL rewriter (Sascha)
-
Fixed readdir_r() use on Solaris (Sascha)
-
Improved HTTP headers for private-caching (jon@csh.rit.edu, Sascha)
-
Added new function session_cache_limiter (jon@csh.rit.edu, Sascha)
-
Added ftp_exec to the ftp functions (thanks to <jhennebicq@i-d.net>)
- (Derick)
-
PEAR: add last executed query as debug info in DB errors (Stig)
-
PEAR: allow multiple modes in PEAR_Error (Stig)
-
Made the Sybase CT module thread safe (Zeev)
-
Added second argument to array_reverse() that indicatese whether
- the original array keys should be preserved. (Andrei)
-
Clean up htmlspecialchars/htmlentities inconsistencies. (Rasmus)
-
PEAR: renamed DB_GETMODE_* to DB_FETCHMODE_*, added setFetchMode()
- in DB_common to set the default mode, added some MySQL tests (Stig)
-
Made eval() and several other runtime-evaluated code portions report the
- nature and location of errors more accurately (Stas)
-
Added an optional parameter to wordwrap that cuts a string if the length of a
- word is longer than the maximum allowed. (Derick)
-
Added functions pg_put_line and pg_end_copy (Dirk Elmendorf)
-
Added second parameter for parse_str to save result (John Bafford)
-
Fixed bug with curl places extra data in the output. (medvitz@medvitz.net)
-
Added the pathinfo() function. (Sterling)
-
Updated sybase_ct module and its sybase_query to use high performance API.
- (Joey)
-
Added a more configurable error reporting interface to DB. (Stig)
-
Added is_uploaded_file() and move_uploaded_file() (Zeev)
-
Added several directives to php.ini - post_max_size, file_uploads,
- display_startup_errors - see php.ini-dist for further information (Zeev)
-
Worked around a bug in the libc5 implementation of readdir() (Stas)
-
Fixed some potential OpenBSD and NetBSD crash bugs when opening files. (Andi)
-
Added EscapeShellArg() function (Rasmus)
-
Added a php.ini option session.use_trans_sid to enable/disable trans-sid.
- (Sterling)
-
Added the Sablotron extension for XSL parsing. (Sterling)
-
Fixed a bug in checkdate() which caused < 1 years to be valid (Jani)
-
Added support for an optional output handler function for output
- buffering. This enables transparent rendering of XML through XSL,
- transparent compression, etc. (Zeev)
-
Added support for user defined 'tick' callback functions. This helps
- emulate background processing. (Andrei)
-
Fixed problem with having $this as the XML parser object. (Andrei)
-
Internal opened_path variable now uses the Zend memory manager so that full
- paths of files won't leak on unclean shutdown (Andi)
-
Removed support of print $obj automatically calling the __string_value()
- method. Instead define yourself a method such as toString() and use
- print $obj->toString() (Andi, Zend Engine)
Made a minor change to allow building with OpenLDAP 2.0 (Stig Venaas)
-
Fixed a bug in preg_replace() that would truncate subject string if the
- first argument was en empty array. (Andrei)
-
Added ob_get_length function (Stig)
-
Fixed a bug that did not respect limit parameter in preg_replace() when
- using /e modifier. (Andrei)
-
Added ability for each xml_set_*_handler() function to take the
- array($obj, 'method') syntax for the handler argument as well
- as the normal function name. (Andrei)
-
Updated array_walk() to be able to accept array($obj, 'method')
- syntax for the walk function. (Andrei)
-
Fixed segfault with fgets(), fgetcsv(), fgetss(), and fread() when
- called with negative length argument. (Torben)
-
Fixed by-reference parameters passing for xml_ functions and for scanf
- functions (Stas)
-
Added experimental Oracle LDAP SDK support. 8.1.6 or later needed. Configure
- with something like --with-ldap=/usr/local/oracle/product/8.1.6 (Stig Venaas)
-
Fixed memory leaks in eval(); A script that used eval() extensively, could
- end up consuming very large amounts of memory during execution (Zeev, Zend
- Engine)
-
Fixed memory_limit feature, which did not work properly in previous versions
- (Zeev, Zend Engine)
-
Fixed stdout support with the swf extension. (Sterling)
-
Fixed byte order for ip2long and long2ip (Stas)
-
Fixed dbase_add_record. (Sterling)
-
Added support for libmcrypt 2.4.4 (Derick)
-
Added strncasecmp function (Andi, Zend Engine)
-
Fixed FTP module to accept multiline server replies (Jani)
-
Fixed switch which only has a single default rule. (Andi, Zend Engine)
-
Fixed problem with nested foreach()'s. (Andi, Zend Engine)
-
The CCVS module is now stable and compiling. It compiles as a CGI and into
- Apache cleanly without warnings. (Brendan W. McAdams)
-
Fixed mSQL_close(). (nick@loman.net)
-
Made return() in a require()'d file work like return() in an include()'d
- file (Andi & Zeev, Zend Engine)
-
Changed require_once() to work using the same table as include_once()
- (Andi & Zeev, Zend Engine)
-
Fixed PostgreSQL module to work when the link handle is omitted (Zeev)
-
Fixed the Sybase modules to work properly with PHP 4.0 (Zeev)
-
Fixed CLOB handling in OCI8 driver when using variable-width
- character sets. (Thies)
-
Added 4th optional parameter to sybase_[p]connect to specify the charset
- for the connection (alf@alpha.ulatina.ac.cr)
-
Fixed support for current thttpd releases. (Sascha)
-
Added support for kerberized IMAP library using --with-kerberos
- (Rasmus, Sascha)
-
Virtualize realpath, chmod, chown and utime (Stas)
-
Support content-encoding headers in file upload MIME parts
- (Ragnar Kjørstad)
-
Fixed warning when shutting down OCINLogon() connections. (Thies)
-
Fixed \n in session variables bug on Win32 (Stas)
-
OCIError() would sometimes not report failed connections. (Thies)
-
Fixed HEAD request bug on an Apache ErrorDocument redirect and preserve
- the status code across the redirect as well. (Rasmus)
-
Added Olympus-specific tags to read_exif_data() (Rasmus)
-
Fixed bug in imap_fetchheader() where using FT_PREFETCHTEXT didn't return
- the body. Bug . (Jani)
-
Fixed exec() returning "\0" when output is empty
-
Added XML_Parser class in PEAR (Stig)
-
Added "make test" target in pear/ and added some regression tests (Stig)
-
Fixed bug in strip_tags function as per bug (Rasmus)
-
Fixed reading of IPTC via GetImageInfo() for certain JPEG files. (Thies)
-
Improved the output-buffering functions to be re-entrant (Zeev)
-
Made ldap_add(), ldap_modify(), ldap_mod_add(), ldap_mod_replace()
- binary-safe. Original patch: Terrence Miao <terrence_miao@email.com> (Jani)
-
CGI aka. command line version has now an option '-l' for syntax check
- without execution (Hartmut)
-
Fixed bug in ldap_get_values_len() which makes it NULL-safe. (Jani)
-
Bug-report and fix submitted by Michel Alexeline <alexel@dr15.cnrs.fr>
-
Make ext_skel create a Makefile.in set up to handle shared extension
- support automatically (Rasmus)
-
Fixed php_realpath not to die on non-existing files (needed for touch())
- (Stas and china@thewrittenword.com)
-
Fixed get_browser() function (Stas)
-
Fixed symbol clash which caused a DSO problem on OpenBSD (Rob Black and
- anil@recoil.org)
-
Added new function: ldap_compare(). (Jani)
-
Fixed a bug in ldap_get_entries() and ldap_get_attributes(). (Jani)
-
Ported DB to new error reporting scheme in PEAR. (Stig)
-
Added sybase and ibase DB backends in PEAR. (Sterling)
-
New PEAR package Payment_Verisign for use with the Payflow Pro
- (pfpro) extension. (David Croft)
-
Added CURL support. (Sterling)
-
Catch users trying to set "compatibility" parameter in PDF, which is not
- supported from user-land. (Joey)
-
Fixed dbase_add_record. (Sterling)
-
Added new function wordwrap() to wordwrap long strings from Chris
- Russel <russel@yorku.ca> (David Croft)
-
Added four additional arguments: attrsonly, sizelimit, timelimit, deref which
- were missing in ldap_search(), ldap_list() and ldap_read() functions (Jani)
-
Fixed a bug in ldap_search/list/read() which prevented returning the partial
- results when 'Sizelimit exceeded' error occurred. (Jani Taskinen)
-
Fixed preg_replace() to automatically escape quotes in matched
- strings when using /e modifier. (Andrei)
-
Itanium patch (Steve Robb)
-
Set default include_path so PEAR files can be reached (Stig)
-
Added "pear" executable, requires CGI version installed (Stig)
-
Added extension ii for Ingres II native support. See README in ext/ingres_ii
- directory. (David H)
-
Added Win32 project for the Interbase module (Zeev)
-
Added ability to perform calls to the parent class without explicitly
- specifying its name, using parent::func_name(...) (Zeev, Zend Engine)
-
You can now call Ora_Error() without prameters to get the reason
- for a failed connection attempt. (Kirill Maximov)
-
New extension "pfpro" for interface with Verisign Payflow Pro (David Croft)
-
Added IMG_GIF, IMG_JPG, IMG_JPEG, IMG_PNG and IMG_WBMP constants for
- imagetypes() function (Rasmus)
-
Added ImageTypes() function which returns a bitfield with the supported
- image formats. 1=gif, 2=jpeg, 4=png and 8=wbmp (Rasmus)
-
Make it possible to specify an empty string as a thousands-seperator
- in number_format() (Rasmus)
-
Shared module support for LDAP extension (Troels Arvin)
-
Fixed a bug with imap_mail where apache would segfault if the rpath
- parameter was specified.
-
Use dashes and short day name in cookies since some browsers seem picky
- about this (Rasmus)
-
Added pspell module. (Vlad)
-
Added 3 additional arguments to the user-defined error handler - the file
- name and line number in which the error occured, and the context (local
- variables) of the code in which the error occured (Zeev, Zend Engine)
-
Improved the error handling code to handle an error in a user-defined error
- handling function (Zeev, Zend Engine)
-
Fixed leak when using string offsets in the array() construct.
- (Andi, Zend Engine)
-
Fixed corruption problem when changing deeply nested values in objects.
- (Andi & Zeev, Zend Engine)
-
Improved array_multisort() to be able to specify sort type as well sort
- order. Incidentally, it can be used to sort multi-dimensional arrays
- as well. (Andrei)
-
Fixed a possible data corruption in case of a huge amount of aborted requests
- (Zeev)
-
Apache module would sometimes close a wrong file-descriptor. (Sascha)
-
Fixed use of alternative storage handlers in the session module. (Sascha)
-
Updated str_pad() to be able to pad on left/right/both sides. (Andrei)
-
Fixed crash in gzopen(). (Thies)
-
Multiple character set support in gdttf.c (Rob Goodwin)
-
When using HTTP auth from PHP, fill in the %u custom log field so the
- authenticated used id will get logged in the Apache access_log (Rasmus)
-
Support for pdflib 3.01. (Uwe)
-
FDF Data is handled properly and can be accessed by reading
- HTTP_RAW_POST_DATA. (Uwe)
-
Added new 'O' format modifier that will output the GMT offset as "[+-]HHMM"
- (eg: Pacific time is -0700). This is useful for things such as Date: mail
- headers. (Mike W)
-
Fixed crash on OCI?Logon() failure. (Thies)
-
Make the special Header("http/...") response be case insensitive like 3.0
- (Rasmus)
-
Allow cybercash to compile as a DL module. (Sterling)
-
Fixed the dbase_create function. (Sterling)
-
Fixed a problem under some versions of Windows that could cause PHP to hang
- on startup if errors occured, e.g. in the php.ini file (Zeev)
-
Fixed opendir() again. It should actually work well continuously now (Zeev)
-
Added three additional arguments to be sent to a user-defined error handler -
- the filename and line number in which the error occured, and the context
- (the local variables) of the error (Zeev, Zend Engine)
-
Improved the error handling code to handle an error in a user-defined error
- handling function (Zeev, Zend Engine)
-
Added an optional parameter to preg_replace() that can be used to
- specify how many replacements to make. (Andrei)
Added a crc32 checksum function - used by the UdmSearch search engine
- and currently run through a system call. This will speed up the UdmSearch
- php frontend significantly. (Rasmus)
-
Modified in_array() to not touch array pointer. (Andrei)
Fixed erroneous file names and line numbers in error situations under the
- multithreaded version of PHP - most noticeably Win32 (Zeev, Zend Engine)
-
Fixed problem with CGI crashing on certain servers especially Windows Apache
- & O'Reilly website (Andi)
-
Added Pi3Web SAPI module; run ./configure --with-pi3web to enable this.
- (Holger; zimpel@t-online.de)
-
Enhanced WDDX functions to call __sleep() and __wakeup() when working on
- objects. (Andrei)
-
Changed WDDX to serialize arrays as structs only if needed. (Thies)
-
Implemented max_execution_time under Win32 (Zeev)
-
Updated strtotime() to handle many more formats. It now has complete
- feature parity with GNU date command. (Andrei)
-
Added support for multiple arguments in unset(). (Faisal, Zend Engine)
-
Functions that expect a resource but are passed something else now return
- NULL instead of FALSE. (Thies, Zend Engine)
-
Fixed gmmktime(), on certain systems it incorrectly adjusted for the timezone
- offset and daylight savings time. (Andrei)
-
Moved VC++ Win32 project and workspace files to the win32 directory
- (Zeev)
-
Fixed checkdate() to not return true on non-numeric arguments (Rasmus)
-
Added --enable-c9x-inline option for compilers which support the new C9x
- standard. If you encounter undefined references to i_zend_is_true and
- other symbols, you should enable this. (Sascha, Zend Library)
-
Fixed a problem in ldap_add() and ldap_modify(), sometimes added trailing
- garbage to the values (Stig Venaas)
-
Fixed a problem with dbmopen() not handing 'c' correctly with dbm/db/ndbm
- databases. (JimJag)
-
Fixed a crash in number_format() when used with locales. (Andrei)
-
Fixed an initialization problem in the MS-SQL problem that could cause
- a crash in mssql_query() (Zeev)
-
Upgraded PCRE to version 3.2 and fixed a bug when anchored pattern
- matched an empty string. (Andrei)
-
Fixed a bug that prevented PHP from paying attention to the extension_dir
- directive with extensions that were loaded from the php.ini file (Zeev)
-
Changed set_error_handler() to return the name of the previously defined
- error handler, if any (Zeev, Zend Engine)
-
Declared <? php_track_vars ?> officially dead. It didn't work in PHP 4.0.0
- either, but now it's gone for good (Zeev)
-
Make convert_cyr_string() binary safe and stop it from corrupting other
- PHP variables. (Andi)
-
Added functions array_unique, array_intersect and array_diff (Stig Venaas)
-
Fixed problem when using uninitialized values in comparisons with strings.
- They behave as empty strings again just like in PHP 3.
- (Andi & Zeev, Zend Engine)
-
Fixed 'Z' flag in date() to adjust for daylight savings time. (Andrei)
-
Fixed var_dump() not to modify the internal order of array elements (Zeev)
-
Fixed stripcslashes() to remove to strip \ in unknown escapes instead of
- leaving it. (Andrei)
-
Changed WDDX to always serialize arrays as structs. (Andrei)
-
Fixed include_once() to issue a warning in case the supplied file name is
- not found (Zeev, Zend Engine)
-
Fixed a bug in get_declared_classes() which could return the same class
- multiple times under certain circumstances (Zeev, Zend Engine)
-
Fixed a bug in rawurldecode() that would cause in rawurldecode() corrupting
- its argument (Zeev)
-
Parse errors (or other errors) in the php.ini files under Windows will no
- longer mess up the HTTP headers in CGI mode and are now displayed in a
- message box (Zeev)
-
Fixed a crash in OCIFetchStatement() when trying to read after all data
- has already been read. (Thies)
-
fopen_wrappers() are now extensible via modules (Hartmut Holzgraefe)
-
Make trim strip \0 to match php 3 (Rasmus)
-
Added function imagecreatefromxbm(). (Jouni)
-
Added function imagewbmp(). (Jouni, based on patch from Rune Nordbøe
- Skillingstad)
-
Added str_pad() for padding a string with an arbitrary string on left or
- right. (Andrei)
-
Made the short_tags, asp_tags and allow_call_time_pass_reference INI
- directives work on a per-directory basis as well, e.g. from .htaccess
- files. (Zeev)
-
Added fflush() function. (Eric Huss)
-
Fixed a problem with static variables, default function arguments and class
- member variables, that contained array values. (Andi & Zeev, Zend Engine)
-
Fixed virtual() when used with output buffering (Marc Pohl)
-
Clean up constants in flock() function and add optional 3rd arg which
- is set to true on EWOULDBLOCK (Rasmus)
Added SWF support to getimagesize() function (Derick Rethans)
-
Added support for both indexed and non-indexed arrays of file uploads
- eg. name="file[]" type="file" (Rasmus)
-
Added create_function(), which gives the ability to create functions
- on-the-fly (Zeev, Zend Engine)
-
Added support for comparisons of arrays (with arrays) and objects (with
- objects); The equality operator (==) performs an unordered comparison,
- whereas the identity operator (===) performs an ordered comparison (Zeev,
- Zend Engine)
-
Allow all functions that receive user-defined function callbacks to accept
- an array that contains an object and a method name, in place of a function
- name, e.g. usort($array, array($obj, "ObjSort")) (Zeev, Zend Engine)
-
Added set_error_handler() to allow custom error handling functions,
- instead of the built-in error handling code (Zeev, Zend Engine)
-
Renamed user_error() to trigger_error(); user_error() remains
- defined for compatibility (Zeev, Zend Engine)
-
Fixed the global/static statements to require a trailing terminating
- semi-colon ';'. (Andi, Zend Engine)
-
Cleaned up PCRE extension and made it binary-safe. (Andrei)
-
Added third argument to in_array(). If it's true, then in_array()
- will use strict comparison instead of the default one. (Andrei)
-
Added pg_trace() and pg_untrace (Dominic J. Eidson & Zeev)
-
ignore_user_abort=Off is now default. (Thies)
-
Added array_merge_recursive() that will recursively merge values
- under the same keys. (Andrei)
-
fixed crash in OCIParse when parsing invalid SQL. (Thies)
-
Fixed a bug in mysql_connect() that made it ignore the socket argument, in
- case of non-persistent connects (Zeev)
-
Added disable_functions php.ini directive, to allow administrators to disable
- certain functions for security reasons (Zeev)
-
Fixed sessions on Win32. When setting the directory depth parameter in
- save_path you need to now delimit it with a ';' instead of ':', e.g
- "5;/tmp" instead of "5:/tmp" (Andi)
-
Changed the Apache handler's return status to 'Declined' when a requested
- PHP file could not be found. Returning 'Not Found' caused problems
- in the ErrorDocument handler stage in that $REDIRECT_REDIRECT_ERROR_NOTES
- was not getting set at all. Moving to 'Declined' should fix this and I
- can't see any other side effects. (Rasmus)
-
Fixed scanning decimal numbers in internationalized environments. They should
- always be in standard US format e.g. 23.3. (Andi, Zend Engine)
-
Added second argument to preg_quote() which allows quoting of
- one additional character, usually the regex delimiter. (Andrei)
-
Uncommitted outstanding OCI8 transactions are now rolled back
- before the connection is closed. (Thies)
-
ignore_user_abort() & friends should now work in CGI mode as well.
- (Patch by daniel.braun@ercom.fr)
-
Added extension YAZ (dickmeiss).
-
Fixed a crash bug triggered by certain cases of class redeclarations
- (Stas & Zeev, Zend Engine)
-
Fixed min()/max() segfault. (Andrei)
-
New module for reading EXIF header data from JPEG files. Most digital
- cameras will embed all sorts of information about a picture inside the
- jpeg images it generates. (Rasmus)
-
Fixed basename() bug where "file.ext///" would not return the same
- as "/path/file.ext///" (Rasmus)
-
Added the swf_ortho function. (Sterling)
-
Moved to virtual current working directory support. This highly improves the
- functionality and stability of multi-threaded versions of PHP (Andi, Sascha)
Added initial NSAPI module from Jayakumar Muthukumarasamy. (Rasmus)
-
Added the SWF module which allows you to create Macromedia Flash files via
- libswf. (Sterling)
-
Improved UNIX build system to support more vendor make tools (Sascha)
-
Updated natural comparison/sorting algorithm by Martin Pool
- <mbp@humbug.org.au>. (Andrei)
-
Fixed a crash in array_multisort() that happened when empty arrays
- were passed to it. (Andrei)
-
Added substr_count() from Peter Kovacs. (Andrei)
-
Added an optional third argument to fseek to indicate where to seek from.
- (Andrei)
-
OCIBindByName() will no longer complain about bindlength beeing zero. (Thies)
-
Converted the IMAP module to the high performance API (Zeev)
-
The fgetcsv() function now handles embedded end-of-line in a quoted field
- (Nick Talbott)
-
Added user_error(), to allow explicitly generate error messages from scripts
- (Zeev, Zend Engine)
-
Fixed a problem in long2ip() that occasionally returned incorrect IP address.
- (Evan, Andrei)
-
Fixed many memory leaks in the IMAP module (Stas, Andi, Zeev)
-
Fixed bug in number_format (Jon Forsberg)
-
Make error_prepend_string and error_append_string work (Rasmus)
-
array_walk() now automatically resets the array. (Andrei)
-
Added natural comparison/sorting routines strnatcmp(), strnatcasecmp(),
- natsort(), and natcasesort(). These are useful for comparing and sorting
- strings that contain numbers. Based on the code from Martin Pool
- <mbp@humbug.org.au>. See http://www.linuxcare.com.au/projects/natsort/
- for more info on natural sorting. (Andrei)
-
Zeus Webserver support (version 3.3.6+) for ISAPI (Ben Mansell)
-
Fixed several problems with the PATH_TRANSLATED and PHP_SELF under Apache
- (Paul Gregg & Zeev)
-
Ported ldap_get_values_len() function from PHP3 to PHP4. (Sterling)
-
Fixed a problem in include_once() with non constant arguments (Andi & Zeev,
- Zend Engine)
-
Added php.ini-optimized (Zeev)
-
Ported ldap_errno(), ldap_err2str() and ldap_error() from PHP3 to PHP4.
- (Sterling)
-
WDDX now defaults to ISO-8859-1. (Thies)
-
Fixed crash resulting from IMAP's error handling (Stas)
-
Added $HTTP_POST_FILES[filename][tmp_name] - it was previously impossible to
- retrieve the temporary name of an uploaded file using $HTTP_POST_FILES[]
- (Zeev)
-
Made the IMAP and LDAP modules compilable under Windows and thread-safe
- (Zeev)
-
Fixed a problem when dealing with large POST blocks in CGI mode (Zeev)
Fixed return of stristr() to no longer always be lowercased. (Andrei)
-
Changed the Windows version of PHP so that a php.ini file is no
- longer mandatory (Zeev)
-
session_start() is now more verbose if headers cannot be send. (Thies)
-
Fixed a memory leak when using assign-op bitwise operators on strings (Zeev,
- Zend Engine)
-
Added support for reading properties that require arguments in the COM
- module - writing to them will only be supported in PHP 4.1 (Zeev)
-
Fixed a very old legacy memory leak in the COM module (Zeev)
-
Fixed problems with object-overloading support - noteably, COM and Java
- (Zeev, Zend Engine)
-
Fixed an overrun in WDDX. (Thies)
-
Fixed a crash bug with modules loaded through dl() not properly freeing their
- resources (Zeev, Zend Engine)
-
Added localtime() function. (Sterling)
-
Added the 'I' format option for the date function, this option will return
- true or false depending on whether or not daylight savings time is in effect.
-(Sterling)
-
Added gmstrftime() function. (Sterling)
-
snmp_walkoid is now an alias for snmp_realwalk. (Sterling)
-
Fixed a bug that could cause a crash when using 'global' inside large include
- files (Stas, Zend Engine)
-
Added --enable-libgcc switch to force linking against libgcc (Sascha)
-
Fixed dynamic loading where extension_dir had no trailing slash (Sascha)
-
Fixed dynamic loading on OpenBSD (Sascha)
-
Improved POSIX threads check. ZTS works now on at least Linux, Solaris,
- FreeBSD and OpenBSD (Sascha, TSRM)
-
Added !== operator support. (Torben, Zend Engine)
-
-
-
-
-
-
Version 4.0, Release Candidate 1
-
-
-
Added support for UCD-SNMP 4.1.x (Sascha)
-
Fixed a data corruption bug in mysql_result(), if used in table.fieldname
- mode (Zeev)
-
Fixed a crash problem in func_num_args(), func_get_arg() and func_get_args()
- when used as function arguments (Andi, Zend Engine)
Added 'I' switch to test whether or not DST is active. (Sterling)
-
Fixed a data corruption bug in mysql_result(), if used in table.fieldname
- mode (Zeev)
-
Modified the registry INI entry reader (Win32) to work with drive letters.
- For example, if you wish to wish to specify INI entries for C:\foo\bar, you
- should create HKLM\PHP\Per Directory Values\C\foo\bar in the registry, and add
- string values for each directive you want to override in this directory (Zeev)
-
Fixed extract() for EXTR_PREFIX_SAME and EXTR_SKIP cases. (Andrei)
-
stristr() no longer modifies it's arguments. (Thies)
-
Don't default to iso-8859-1 since this confuses some browsers. (Rasmus)
-
Make it possible to specify both a port and a socket
- in mysql_[p]connect. (Rasmus)
-
Added --disable-pic for disabling generating PIC for shared objects
- on platforms which support it (i.e. Linux) (Sascha)
-
serialize()/unserialize() now call __sleep() and __wakeup() when
- working on objects. (Thies)
-
renamed to_string() method to __string_value() for consistency.
- (Thies, Zend Engine)
-
Fixed a bug in the third argument to define()
-
Added is_numeric() that returns true if the argument is a number
- or a numeric string. (Andrei)
-
domxml now supports libxml 2.0 Beta and drops support for older versions,
- due to massive changes in libxml
-
fixed possible crash in unserialize() if serialized data was
- corrupted. (Thies)
-
Changed $HTTP_STATE_VARS to $HTTP_SESSION_VARS. Use only the latter
- version now! (Andrei)
-
Added GD-JPEG Support (Rasmus)
-
Prevent from loading dynamic PHP modules which were compiled with different
- debug and thread safety modes than PHP, which resulted in a crash (Andi)
-
connection_aborted() and friends work again (Thies)
-
Upgraded to libtool 1.3.4 (Sascha)
-
UNIX configure creates config.nice in the build directory now which allows
- easy reuse of configuration options (Sascha)
-
Added support for embedded MySQL client library. Unless you specify a path
- to --with-mysql, the bundled MySQL client library will be used (Sascha)
-
Added include_once() and require_once() functionality (Andi, Zend Engine)
-
Removed support for pdflib < 3.0 (Uwe)
-
Added auto-registration of everything in $HTTP_SESSION_VARS[] if
- register_globals is turned off. (Andrei)
-
Cleaned up extension namespace (Stig)
-
OCINLogon() sessions are now closed again. (Thies)
-
Added ip2long() and long2ip(),
- courtesy of Faisal Nasim <faisal@nasim.org> (Andrei)
-
Added ftruncate() and fstat(),
- courtesy of Faisal Nasim <faisal@nasim.org> (Andrei)
-
Added parse_ini_file(). Currently implemented in non thread safe version
- of PHP, and currently lacks section support (Zeev)
-
"none" is now equivalent with "" in Apache config directives (Stig)
-
OCINLogon no longer crashes. (Thies)
-
Fixed comparisons of (string) "nan" with (string) "nan". (Thies, Zend Engine)
-
Switched back to the old $HTTP_*_VARS[] behavior - $HTTP_GET_VARS["foo"]
- and $foo are no longer references to each other, but separate variables
- like they were prior to PHP 4.0 Beta 4 (Zeev)
-
Fixed Sybase-DB compilation (Zeev)
-
Fixed a (fairly common) situation where error_reporting values would not be
- properly restored after a call to error_reporting(), in between requests
- (Zeev)
-
The various $HTTP_*_VARS[] are now protected, and cannot be manipulated by
- user input (Zeev)
-
Added ini_set() as an alias to ini_alter() (Zeev)
-
The string None is now recognized as a keyword by the php.ini processor, and
- can be used to denote an empty string (Zeev)
Fixed comparison of (string) "inf" with (string) "inf", which was erroneously
- returning false (Zeev)
-
Implemented default_charset and default_mimetype config directives (Stig)
-
Ported T1lib support from PHP3. (Jouni)
-
Fixed -DEAPI inheritance from APXS. (Sascha)
-
Fixed possible crash in module-shutdown. (Thies)
-
Fixed safe_mode_protected_env_vars INI directive (Zeev)
-
Fixed getrusage() (Sascha)
-
Fixed OCI8 crash when returning cursors from stored-procedures. (Thies)
-
-
-
-
-
-
Version 4.0, Beta 4 Patch Level 1
-
-
-
Fixed crash when magic_quotes were switched off. (Thies)
-
Support for pdflib 2.30 (Uwe)
-
-
-
-
-
-
Version 4.0, Beta 4
-
-
-
Introduced $HTTP_POST_FILES[], that contains information about files uploaded
- through HTTP upload (Zeev)
-
Made PHP work under Microsoft Personal Web Server, under both Windows NT
- workstation and Windows 95 (Zeev)
-
Made multipart/form-data content obey to the variables_order directive (Zeev)
-
Updated the browscap module to work with PHP 4.0 (Zeev)
-
Recover gracefully in ISAPI after the client prematurely presses STOP (Andi)
-
Fixed bug in unset() on array offsets which are referenced more than once
- (Andi, Zend Engine)
-
Improved ISAPI module - it should no longer be necessary to set PHP as
- an ISAPI filter, only as an ISAPI extension, unless you wish to perform
- authentication using PHP. This didn't yet get enough testing, but it
- should work (Zeev)
-
Fixed RFC1867 file upload under Windows (Zeev)
-
Initital support for pdflib 2.20 (Uwe)
-
Added PostgreSQL support for DB (Rui Hirokawa <louis@cityfujisawa.ne.jp>)
-
Re-introduced "none" for disabling auto_prepend/append_file (Stig)
-
Added DB/storage (Stig, PEAR)
-
Introduced DB warnings (Stig, PEAR)
-
Fixed overrun in strip_tags (Stas)
-
Fixed crash in strip_tags() and related functions. (Thies)
-
Workaround for bogus POST-Data from IE/Mac. (Thies)
- Patch by Alain Malek <alain@virtua.ch>
-
Finished the server abstraction layer; All of the PHP code is now shared
- across different servers (Apache, CGI, IIS, etc.), except for thin
- interface modules (Zeev)
-
Added NULL-support in gettype(). (Thies)
-
base64_decode() will decode POST data correct. (Thies)
- Patch submitted by: Turadg Aleahmad <turadg@wise.berkeley.edu>
-
Much more work on domxml. Build xml tree, create xml doc works (Uwe)
-
Made foreach() work on objects. (Thies, Zend Engine)
-
Added domxml extension based on libxml, still little functionality (Uwe)
-
Fixed memory corruption in fgetss(), strip_tags() and gzgetss() (Zeev)
-
Updated calendar dynamic library to work with PHP 4. (Evan)
-
Added strncmp() function, courtesy of Walter. (Andrei)
-
Made the output of var_dump() more informative. (Thies)
-
Fixed some OCIBindByName() problems. (Thies)
-
Protect the ISAPI module against exceptions. Stack overflows in scripts are
- now nicely detected and handled (Zeev)
-
Fixed possible buffer-overflow in base64_decode. (Thies)
-
Fixed possible buffer-overflow in setcookie(). (Thies)
-
Fixed signal() bug that could cause the Apache master process to
- die. (Thies)
If header information is sent after output has already been sent, the warning
- message will now state the filename and line number at which the first output
- was made (Zeev)
-
Added the XML Expat library to the standard PHP source distribution thanks
- to its author James Clark (Andi & Zeev)
-
Added XML support to the default Win32 build (Andi & Zeev)
-
Added socket_get_status() function. Renamed set_socket_timeout() to
- socket_set_timeout() and set_socket_blocking() to socket_set_blocking(). (Andrei)
-
Added realpath() function. (Andrei)
-
mktime interprets years in the range 0-70 now as 2000-2070. You can
- continue to specify the complete year (i.e. 1920) (Sascha)
-
Added the ability to control the environment variables the user is allowed
- to change in Safe Mode, using INI directives (Zeev)
-
Fixed a crash bug in strtr() working on large input strings (Zeev)
-
Ora_GetColumn()/Ora_FetchInto() now return NULL for NULL-Columns. (Thies)
-
OCI8 now supports binding of NULL-values. Module cleanups. (Thies)
-
Added ability to set timeout on socket read operations through
- set_socket_timeout() function. (Andrei)
-
Added implicit_flush INI directive (Zeev)
-
Added implicit_flush() to control whether flush() should be called
- implicitly after any output (Zeev)
-
Fixed a crash in pfsockopen() (Zeev)
-
Fixed a possible crash in phpinfo() (Zeev)
-
Added register_argc_argv INI directive, to allow to selectively disable
- the declaration of the $argv and $argc variables for increased
- performance (Zeev)
-
Added $HTTP_ENV_VARS[] and $HTTP_SERVER_VARS[] support, which similarly
- to $HTTP_GET_VARS[], contain environment and server variables. Setting
- register_globals to Off will now also prevent registration of the
- environment and server variables into the global scope (Zeev)
-
Renamed gpc_globals INI directive to register_globals (Zeev)
-
Introduced variables_order that deprecates gpc_order, and allows control
- over the server and environment variables, in addition to GET/POST/Cookies
- (Zeev)
-
new function cpdf_set_document_limits() (Uwe)
-
Applied safe-mode patch to popen(). (Patch by Kristian Köhntopp)
-
str_repeat() now returns correct length. (Thies)
-
Don't assume libz and libpng are installed for the GD checks (Rasmus)
-
Implemented support for <boolean> and <null> types according
- to WDDX version 1.0 (Andrei)
-
Made var_dump()/serialize()/unserialize() NULL aware. (Thies)
-
Added new NULL constant (Zeev, Zend Engine)
-
Fixed -c support in the standalone CGI binary (Zeev)
-
Increased PHP's performance by 5-15% using a new memory cache (Andi & Zeev,
- Zend Engine)
-
Improved the php.ini reader to support constants and bitwise operators (Zeev)
-
Fixed strrev() to no longer modify arg1. (Thies)
-
Fixed buffer overruns in iptcembed(). (Thies)
-
Fixed a bug in ODBC error reporting (Zeev)
-
Added PHP_Logo_GUID() and Zend_Logo_GUID() functions, that return the GUIDs
- of the PHP and Zend logos used in phpinfo() (Zeev)
-
Added GNU Pth support (Sascha, TSRM library)
-
Removed select(), fd_set() and fd_isset() - will be reimplemented soon! (Thies)
-
Improved Win32 performance significantly by using different mutexes (Zeev,
- TSRM library)
-
Made quotemeta() and preg_quote() binary-safe. (Andrei)
-
Added UDP support in fsockopen(). (Evan)
-
Added --disable-pear option (Andrei)
-
Renamed libzend repository to Zend (Zeev)
-
Added support for thttpd (Sascha)
-
Added session.cache_limiter and cache_expire options (Sascha)
-
Restored the PHP_VERSION and PHP_OS constants (Zeev)
-
Added get_loaded_extensions(), extension_loaded(), and
- get_extension_funcs() functions. (Andrei)
-
Added date/time stamping to PHP error log file. (Andrei, Joey)
-
Added is_subclass_of() function (Andrei, Zend Engine)
-
Implemented count_chars(). (Thies)
-
Added class_exists() function (Andrei, Zend Engine)
-
Made strspn() and strcspn() binary-safe. (Andrei)
-
Added array_multisort() function. (Andrei)
-
Made pageinfo.c thread-safe (Sascha)
-
Made implode() binary-safe (Andrei)
-
Made strstr(), stristr(), and ucwords() binary-safe() (Andrei)
-
Made strtoupper(), strtolower(), substr_replace() binary-safe. (Andrei)
-
Fixed a crash in the Apache syntax highlighting mode (Zeev)
-
Report all ODBC error's not just the one on the top of the stack (lurcher)
-
OCI8 now returns NULL values in LONG columns correct. (Thies)
-
Added support for a C-like assert() function. (Thies)
-
Added CyberCash support. (Evan)
-
Made explode() binary-safe. (Thies)
-
Made strpos() binary-safe. (Thies)
-
Added XML_Set_Object() function, now you can use the XML-Parser from
- within an object. (Thies)
-
Session vars are now decoded into $HTTP_STATE_VARS[] array and the
- globals, depending on track_vars and gpc_globals settings (Andrei)
-
Added get_used_files() function - returns a hash mapping the use()'d files
- to their full path (Zeev)
-
PHP 4 scripts will now obey the max_execution_time setting and actually
- time out (Rasmus)
-
Added configure command to phpinfo() output (Stig)
-
Added optional socket path to the mysql_?connect() functions (Rasmus)
-
Made mysql and gd work as shared extensions again (Stig)
-
Make the global GET/POST/Cookie variables and their $HTTP_*_VARS[] counterparts
- be references to each other (Zeev)
-
Added support for the 'use' keyword - behaves like 'require', but will not
- use the same file more than once (Andi & Zeev, Zend Engine)
-
Added check to see if a persistent connection is still valid with the
- ODBC interface before reusing (nick@easysoft.com)
-
Added DBMaker support (patch by Pax Tsai <paxtsai@lion.syscom.com.tw>)
-
Renamed "PECL" to "PEAR" (PHP Extension and Add-on Repository) (Stig)
-
buildconf now uses build.mk (Stig)
-
Disable symlinks to urls (Rasmus)
-
Informix driver now reflects version of ESQL/C used (Danny)
-
Modified session_register() to take variable number of arguments (Andrei)
Fixed gmmktime() so that the following should always be true:
- gmmktime([args]) == mktime([args]) + date('Z', mktime([args])) (Jouni)
-
setlocale doesn't anymore screw up things if you forgot to change it back
- to the original settings. (Jouni)
-
Switched to new system where ChangeLog is automagically updated from commit
- messages. NEWS file is now the place for public announcements. (Andrei)
-
Fixed refcount problem in XML module. (Thies)
-
Fixed crash in HTTP_RAW_POST_DATA handling (Thies)
-
You can use resources as array-indices again (Thies, Zend Engine)
-
Fixed pg_fetch_array() with three arguments (Sascha)
- Patch submitted by: brian@soda.berkeley.edu
-
Upgraded a lot internal functions to use new Zend function API (Thies)
-
fdf support ported; not completely tested with latest version 4.0 for
- glibc (Uwe)
-
OCI8 connections are now kept open as long as they are referenced (Thies)
-
Cleaned up Directory-Module (Thies)
-
Small fix in Ora_Close (Thies)
-
Ported range() and shuffle() from PHP 3 to PHP 4 (Andrei)
-
Fixed header("HTTP/..."); behaviour (Sascha)
-
Improved UNIX build system. Now utilizes libtool (Sascha)
-
Upgrade some more internal functions to use new Zend function API. (Thies,
- Zend Engine)
-
Fixed backwards incompatibility with ereg() (Thies)
-
Updated Zend garbage collection with a much more thorough method.
- (Andi, Zend Engine)
-
Added the ability to use variable references in the array() construct.
- For example, array("foo" => &$foo). (Andi, Zend Engine)
-
Added array_reverse() function (Andrei)
-
Some more XML fixes/cleanups (Thies)
-
Updated preg_replace() so that if any argument passed in is an array
- it will make a copy of each entry before converting it to string so that
- the original is intact. If the subject is an array then it will preserve
- the keys in the output as well (Andrei)
-
Updated OCI8 to use the new high-performance Zend function API. (Thies)
-
Configure speedup (Stig)
-
Fixed LOB/Persistent-Connection related OCI8-Crash (Thies)
-
Generalized server-API build procedure on UNIX (Stig)
-
Added '--disable-rpath' option (Sascha)
-
Added AOLserver SAPI module (Sascha)
-
Fixed XML Callbacks. (Thies)
-
Updated ODBC to use the new high-performance Zend function API (kara)
-
Updated zlib to use the new high-performance Zend function API. (Stefan)
-
Updated preg_split() to allow returning only non-empty pieces (Andrei)
-
Updated PCRE to use the new high-performance Zend function API (Andrei)
-
Updated session, dba, mhash, mcrypt, sysvshm, sysvsem, gettext modules to use
- the new high-performance Zend function API (Sascha)
-
Extended var_dump to handle resource type somewhat (Andrei)
-
Updated WDDX to use the new high-performance Zend function API (Andrei)
-
Updated XML to use the new high-performance Zend function API. (Thies)
-
Updated Oracle to use the new high-performance Zend function API. (Thies)
-
Improved the performance of the MySQL module significantly by using the new
- high-performance Zend function API. (Zeev)
-
Added support for the Easysoft ODBC-ODCB Bridge (martin@easysoft.com)
-
Fixed bug in odbc_setoption, getParameter call incorrect (martin@easysoft.com)
-
Ora_Fetch_Into now resets the returned array in all cases (Thies)
-
Fixed NULL-Column problem in Oracle-Driver (Thies)
-
Added extra metadata functions to ODBC, SQLTables etc (nick@easysoft.com)
-
Fixed SEGV in mcal make_event_object() and
- typo in mcal_list_alarms() (Andrew Skalski)
-
Fixed Ora_PLogon (Thies)
-
Resourcified Oracle (Thies)
-
Implemented object serialization/deserialization in WDDX (Andrei)
-
Added krsort() function (Thies)
-
Added func_num_args(), func_get_arg() and func_get_args() for standard
- access to variable number of arguments functions (Zeev)
-
Added FTP support (Andrew Skalski)
-
Added optional allowable_tags arguments to strip_tags(), gzgetss() and
- fgetss() to allow you to specify a string of tags that are not to be
- stripped (Rasmus)
-
Upgraded var_dump() to take multiple arguments (Andrei)
-
Resourcified XML (Thies)
-
Fixed a memory leak in the Apache per-directory directives handler (Zeev)
-
Added array_count_values() function. (Thies)
-
snmp, pgsql, mysql and gd modules can be built as dynamically loaded
- modules (Greg)
-
OCI8 fix for fetching empty LOBs (Thies)
-
Added user-level callbacks for session module (Sascha)
-
Added support for unknown POST content types (Zeev)
-
Added "wddx" serialization handler for session module (Sascha)
- (automatically enabled, if you compile with --with-wddx)
-
Fixed unserializing objects (Thies)
-
PHP 4.0 now serializes Objects as 'O' (not understood by PHP 3.0), but
- unserializes PHP 3.0 serialized objects as expected. (Thies)
-
Made serialize/unserialize work on classes. If the class is known at
- unserialize() time, you'll get back a fully working object! (Thies)
-
Reworked preg_* functions according to the new PCRE API, which also made
- them behave much more like Perl ones (Andrei)
-
Made it possible to specify external location of PCRE library (Andrei)
-
Updated bundled PCRE library to version 2.08 (Andrei)
-
count()/is_array/is_object... speedups. (Thies)
-
OCI8 supports appending and positioning when saving LOBs (Thies)
-
Added metaphone support (Thies)
-
OCI8 doesn't use define callbacks any longer. (Thies)
-
OCI8 Driver now supports LOBs like PHP 3.0. (Thies)
-
var_dump now dumps the properties of an object (Thies)
-
Rewrote the GET/POST/Cookie data reader to support multi-dimensional
- arrays! (Zeev)
-
Renamed allow_builtin_links to expose_php (defaults to On). This directive
- tells PHP whether it may expose its existence to the outside world, e.g.
- by adding itself to the Web server header (Zeev)
-
Added support for transparent session id propagation (Sascha)
-
Made WDDX serialize object properties properly (Andrei)
-
Fixed WDDX mem leak when undefined variable is passed in
- for serialization (Andrei)
Fixed crash related to ignore_user_abort ini entry (Andrei)
-
Added support for external entropy sources for session id creation
- (on Unices /dev/random and /dev/urandom) (Sascha)
-
Added gpc_globals variable directive to php.ini. By default it is On, but
- if it is set to Off, GET, POST and Cookie variables will not be inserted
- to the global scope. Mostly makes sense when coupled with track_vars (Zeev)
-
Added versioning support for shared library (Sascha)
- This allows concurrent use of PHP 3.0 and PHP 4.0 as Apache modules. See
- the end of the INSTALL file for more information.
-
Added second parameter to array_keys which specifies search value
- for which the key should be returned (Andrei)
-
Resourcified Informix driver (Danny)
-
New resource handling for odbc, renamed to php_odbc.[ch]
-
Make set_time_limit() work on Unix (Rasmus)
-
Added connection handling support (Rasmus)
-
Improved the Sybase-CT module to make use of resources (Zeev)
-
Improved the mSQL module to make use of resources (Zeev)
-
Changed mysql_query() and mysql_db_query() to return false in case of saving
- the result set data fails (Zeev)
-
Improved the resource mechanism - resources were not getting freed as soon
- as they could (Zeev)
-
Added shared memory module for session data storage (Sascha)
-
Fixed session.auto_start (Sascha)
-
Fixed several problems with output buffering and HEAD requests (Zeev)
-
Fixed HTTP Status code issue with ISAPI module (Zeev)
-
Fixed a problem that prevented $GLOBALS from working properly (Zeev, Zend
- library)
-
Ported newest GetImageSize (Thies)
-
Added session compile support in Win32 (Andi)
-
Added -d switch to the CGI binary that allows overriding php.ini values
- from the command line (Zeev)
-
Fixed a crash that would occur if wddx_deserialize did not receive
- a valid packet (Andrei)
-
Fixed a bugglet when redefining a class at run-time (Andi, Zend Engine)
-
Fixed sem_get() on AIX (Sascha)
-
Fixed fopen() to work with URL's in Win32 (Andi & Zeev)
-
Fixed include_path for Win32 (Andi, Zend Engine)
-
Fixed bug in ISAPI header sending function (Charles)
-
Fixed memory leak when using undefined values (Andi & Zeev, Zend Engine)
-
Added output_buffering directive to php.ini, to enable output buffering
- for all PHP scripts - default is off (Zeev).
-
Fixed some more class inheritance issues (Zeev, Zend Engine)
-
Fixed Apache build wrt to shared modules on FreeBSD/Linux (Sascha)
-
Added session.extern_referer_chk which checks whether session ids were
- referred to by an external site and eliminates them (Sascha)
-
Improved session id generation (Sascha)
-
Improved speed of uniqid() by using the combined LCG and removing
- the extra usleep() (Sascha)
-
Introduced general combined linear congruential generator (Sascha)
-
Made ldap_close back into an alias for ldap_unbind (Andrei)
-
OciFetchInto now resets the returned array in all cases (Thies)
-
Fixed mysql_errno() to work with recent versions of MySQL (Zeev)
-
Fixed a problem with define() and boolean values (Zeev)
-
Fixed inclusion of gd/freetype functions (Sascha)
-
Fixed persistency of MHASH_* constants (Sascha)
-
Oracle is now ZTS-Safe (Thies)
-
Fixed flushing of cached information to disk in DBA's DB2 module (Sascha)
-
OCI8 is now ZTS-Safe (Thies)
-
Fixed is_writeable/is_writable problem; they are both defined now (Andrei)
-
Imported PHP 3.0 diskfreespace() function (Thies)
-
Fixed thread-safety issues in the MySQL module (Zeev)
-
Fixed thread-safe support for dynamic modules (Zeev)
-
Fixed Sybase CT build process (Zeev)
-
-
-
-
-
-
Version 4.0 Beta 2
-
-
-
Fixed a problem when sending HTTP/1.x header lines using header() (Zeev)
-
Win32 builds now include the ODBC module built-in (Zeev)
-
Fixed SYSV-SHM interface (Thies).
-
Updated hyperwave module, made it thread safe
-
Updated pdflib module, version 0.6 of pdflib no longer supported
-
Updated fdf module
-
Built-in phpinfo() links are now turned off by default. They can be turned
- on using the allow_builtin_links INI directive (Zeev)
-
Changed phpinfo() to list modules that have no info function (Zeev)
-
Modified array_walk() function so that the userland callback is passed
- a key and possible user data in addition to the value (Andrei)
-
Fixed ldap_search(), ldap_read() and ldap_list() (Zeev)
-
Fixed Apache information in phpinfo() (sam@breakfree.com)
-
Improved register_shutdown_function() - you may now supply arguments that
- will be passed to the shutdown function (Zeev)
-
Improved call_user_func() and call_user_method() - they now support passing
- arguments by reference (Zeev)
-
Fixed usort() and uksort() (Zeev)
-
Fixed md5() in the Apache module (Thies)
-
Introduced build process for dynamic modules (Stig)
-
Improved ISAPI module to supprt large server variables (Zeev)
-
Imported PHP 3.0 fixes for problem with PHP as a dynamic module and Redhat
- libc2.1 in zlib module (Stefan)
-
Fixed sybase_fetch_object() (Zeev)
-
Made the IMAP module work with PHP 4.0 (Zeev)
-
Fixed a problem with include()/require() of URLs (Sascha, Zeev)
-
Fixed a bug in implode() that caused it to corrupt its arguments (Zeev)
-
Added get_class($obj), get_parent_class($obj) and method_exists($obj,"name")
- (Andi & Zeev)
-
Fixed various inheritance problems (Andi & Zeev, Zend Engine)
-
Children now inherit their parent's constructor, if they do not supply a
- constructor of their own.
-
Fixed runtime inheritance of classes (parent methods/properties were
- overriding their children) (Zeev, Zend Engine)
-
Fixed backwards incompatibility with the "new" operator (Andi, Zend Engine)
-
Fixed bugs in uksort() and ksort() sort ordering (Andrei)
-
Fixed a memory leak when using assignment-op operators with lvalue of type
- string (Zeev, Zend Engine)
-
Fixed a problem in inheritance from classes that are defined in include()d
- files (Zeev, Zend Engine)
-
Fixed a problem with the PHP error handler that could result in a crash
- on certain operating systems (Zeev)
-
Apache php_flag values only recognized 'On' (case sensitive) - changed
- to case insensitive (Zeev)
-
Fixed a memory leak with switch statement containing return statements
- (Andi & Zeev, Zend Engine)
-
Fixed a crash problem in switch statements that had a string offset
- as a conditional (Andi & Zeev, Zend Engine)
-
Imported PHP 3.0 fixes for rand() and mt_rand() (Rasmus)
-
Added function entries for strip_tags() and similar_text() (Andrei)
-
Fixed a bug in WDDX that would cause a crash if a number was passed in
- instead of a variable name (Andrei)
-
Ported strtotime() function from PHP 3.0 (Andrei)
-
Merged in gdttf stuff from PHP 3.0 (Sascha)
-
buildconf now checks your installation (Stig)
-
XML module now built dynamically with --with-xml=shared (Stig)
-
Added a check for freetype.h - fixed build on RedHat 6.0 (Zeev)
-
Fixed array_walk() to work in PHP 4.0 (Andrei)
-
Ported all remaining date() format options from PHP 3.0 (Andrei)
-
$php_errormsg now works (Andrei)
-
Added locale support for Perl Compatible Regexp functions (Andrei)
-
Informix module ported (Danny)
-
Remove --with-shared-apache (Sascha)
-
Added patch for reverse lookup table in base64_decode (Sascha)
- Submitted by bfranklin@dct.com
-
Merged in PHP 3.0 version of str_replace (Sascha)
-
Added DBA module (Sascha)
-
Added session id detection within REQUEST_URI (Sascha)
-
Merged in HP-UX/ANSI compatibility switch from PHP 3.0 (Sascha)
-
Fixed rpath handling for utilitites built during Apache build (Sascha)
Made calls from incompatible context issue an E_DEPRECATED warning instead of E_STRICT (phase 1 of RFC: https://wiki.php.net/rfc/incompat_ctx).
-
Uploads equal or greater than 2GB in size are now accepted.
-
Reduced POST data memory usage by 200-300%. Changed INI setting always_populate_raw_post_data to throw a deprecation warning when enabling and to accept -1 for never populating the $HTTP_RAW_POST_DATA global variable, which will be the default in future PHP versions.
-
Implemented dedicated syntax for variadic functions (RFC: https://wiki.php.net/rfc/variadics).
-
Improving multi-threaded scalability by using emalloc/efree/estrdup (Anatol, Dmitry)
-
Implemented constant scalar expressions (with support for constants) (RFC: https://wiki.php.net/rfc/const_scalar_exprs).
-
(Segfault with finally).
-
(copy() arginfo has changed starting from 5.4).
-
Allow zero length comparison in substr_compare() (Tjerk)
(Buffer overflow in locale_get_display_name and uloc_getDisplayName (libicu 4.8.1)).
-
-
JSON:
-
-
Fixed case part of bug ("json_decode handles whitespace and case-sensitivity incorrectly")
-
(JsonSerializeable couldn't implement on module extension) (chobieeee@php.net)
-
(Blank line inside empty array/object when JSON_PRETTY_PRINT is set).
-
-
ldap:
-
-
Added new function ldap_modify_batch().
-
Fixed issue with null bytes in LDAP bindings.
-
-
litespeed:
-
-
(-Werror=format-security error in lsapi code).
-
-
Mail:
-
-
(Don't add newline after X-PHP-Originating-Script) (Tjerk)
-
-
Mcrypt:
-
-
No longer allow invalid key sizes, invalid IV sizes or missing required IV in mcrypt_encrypt, mcrypt_decrypt and the deprecated mode functions.
-
Use /dev/urandom as the default source for mcrypt_create_iv().
-
-
Mbstring:
-
-
Upgraded to oniguruma 5.9.5 (Anatol)
-
(mb_regex_encoding mismatch).
-
-
Milter:
-
-
(php-milter does not build and crashes randomly).
-
-
mysqli:
-
-
Added new function mysqli_get_links_stats() as well as new INI variable mysqli.rollback_on_cached_plink of type bool (Andrey)
-
(Segfault in mysqli_stmt::bind_result() when link closed) (Remi)
-
Fixed building against an external libmysqlclient.
-
-
mysqlnd:
-
-
Disabled flag for SP OUT variables for 5.5+ servers as they are not natively supported by the overlying APIs.
-
Added a new fetching mode to mysqlnd.
-
Added support for gb18030 from MySQL 5.7.
-
-
Network:
-
-
(segfault in dns_get_record). (CVE-2014-3597)
-
(Fix potential segfault in dns_get_record()). (CVE-2014-4049)
-
-
OCI8:
-
-
(Improve performance of multi-row OCI_RETURN_LOB queries) (Perrier, Chris Jones)
-
-
ODBC:
-
-
(odbc_fetch_into returns junk at end of multi-byte char fields).
-
-
OpenSSL:
-
-
Fixed missing type checks in OpenSSL options (Yussuf Khalil, Stas).
-
(TLS connections fail behind HTTP proxy).
-
Fixed broken build against OpenSSL older than 0.9.8 where ECDH unavailable.
-
(Subject altNames doesn't support wildcard matching).
-
(Fall back to crypto_type from context if not specified explicitly in stream_socket_enable_crypto).
-
(certificates validity parsing does not work past 2050).
-
(openssl_x509_parse warning with V_ASN1_GENERALIZEDTIME).
-
Peer certificates now verified by default in client socket operations (RFC: https://wiki.php.net/rfc/tls-peer-verification).
-
New openssl.cafile and openssl.capath ini directives.
-
Added crypto_method option for the ssl stream context.
-
Added certificate fingerprint support.
-
Added explicit TLSv1.1 and TLSv1.2 stream transports.
-
(CN_match gives false positive).
-
Peer name verification matches SAN DNS names for certs using the Subject Alternative Name x509 extension.
-
Fixed segfault when built against OpenSSL>=1.0.1 (Daniel Lowrey)
-
Added SPKAC support.
-
Fallback to Windows CA cert store for peer verification if no openssl.cafile ini directive or "cafile" SSL context option specified in Windows.
-
The openssl.cafile and openssl.capath ini directives introduced in alpha2 now have PHP_INI_PERDIR accessibility (was PHP_INI_ALL).
-
New "peer_name" SSL context option replaces "CN_match" (which still works as before but triggers E_DEPRECATED).
-
Fixed segfault when accessing non-existent context for client SNI use (Daniel Lowrey)
-
(Add EC key support to php_openssl_is_private_key).
-
(add new boolean "verify_peer_name" SSL context option allowing clients to verify cert names separately from the cert itself). "verify_peer_name" is enabled by default for client streams.
-
("cafile" SSL context option now supports stream wrappers).
-
New openssl_get_cert_locations() function to aid CA file and peer verification debugging.
-
Encrypted stream wrappers now disable TLS compression by default.
-
New "capture_session_meta" SSL context option allows encrypted client and server streams access to negotiated protocol/cipher information.
-
New "honor_cipher_order" SSL context option allows servers to prioritize cipher suites of their choosing when negotiating SSL/TLS handshakes.
-
New "single_ecdh_use" and "single_dh_use" SSL context options allow for improved forward secrecy in encrypted stream servers.
-
New "dh_param" SSL context option allows stream servers control over the parameters when negotiating DHE cipher suites.
-
New "ecdh_curve" SSL context option allowing stream servers to specify the curve to use when negotiating ephemeral ECDHE ciphers (defaults to NIST P-256).
-
New "rsa_key_size" SSL context option gives stream servers control over the key size (in bits) used for RSA key agreements.
-
Crypto methods for encrypted client and server streams now use bitwise flags for fine-grained protocol support.
-
Added new tlsv1.0 stream wrapper to specify TLSv1 client/server method. tls wrapper now negotiates TLSv1, TLSv1.1 or TLSv1.2.
-
Encrypted client streams now enable SNI by default.
-
Encrypted streams now prioritize ephemeral key agreement and high strength ciphers by default.
-
New OPENSSL_DEFAULT_STREAM_CIPHERS constant exposes default cipher list.
-
New STREAM_CRYPTO_METHOD_* constants for enhanced control over the crypto methods negotiated encrypted server/client sessions.
-
Encrypted stream servers now automatically mitigate potential DoS vector arising from client-initiated TLS renegotiation. New "reneg_limit", "reneg_window" and "reneg_limit_callback" SSL context options for custom renegotiation limiting control.
-
Fixed memory leak in windows cert verification on verify failure.
-
Peer certificate capturing via SSL context options now functions even if peer verification fails.
-
Encrypted TLS servers now support the server name indication TLS extension via the new "SNI_server_certs" SSL context option.
-
(Default disgest algo is still MD5, switch to SHA1).
-
(memory leak in openssl_seal()).
-
(memory leak in openssl_open()).
-
(Fix broken build when extension built separately).
-
-
OPcache:
-
-
Added an optimization of class constants and constant calls to some internal functions (Laruence, Dmitry)
-
Added an optimization pass to convert FCALL_BY_NAME into DO_FCALL.
-
Added an optimization pass to merged identical constants (and related cache_slots) in op_array->literals table.
(php-cgi work with opcache, may be segmentation fault happen) (Dmitry, Laruence)
-
-
PCRE:
-
-
(Ungreedy and min/max quantifier bug, applied patch from the upstream).
-
Upgraded to PCRE 8.34.
-
Added support for (*MARK) backtracking verbs.
-
-
pgsql:
-
-
(Error in code "form" instead of "from", pgsql.c, line 756), which affected builds against libpq < 7.3.
-
pg_insert()/pg_select()/pg_update()/pg_delete() are no longer EXPERIMENTAL.
-
(Return value for pg_insert should be resource instead of bool).
-
(Add "description" with exteneded flag pg_meta_data(). pg_meta_data(resource $conn, string $table [, bool extended]) It also made pg_meta_data() return "is enum" always).
-
Read-only access to the socket stream underlying database connections is exposed via a new pg_socket() function to allow read/write polling when establishing asynchronous connections and executing queries in non-blocking applications.
-
Asynchronous connections are now possible using the PGSQL_CONNECT_ASYNC flag in conjunction with a new pg_connect_poll() function and connection polling status constants.
-
New pg_flush() and pg_consume_input() functions added to manually complete non-blocking reads/writes to underlying connection sockets.
-
pg_version() returns full report which obtained by PQparameterStatus().
-
Added pg_lo_truncate().
-
Added 64bit large object support for PostgreSQL 9.3 and later.
-
(Cannot build against libpq 7.3).
-
-
phpdbg:
-
-
(Compilation fails for phpdbg when the build directory != src directory).
-
(readline feature not enabled when build with libedit).
-
(List behavior is inconsistent).
-
(The prompt should always ensure it is on a newline).
-
(break if does not seem to work).
-
(register function has the same behavior as run).
-
(No way to list the current stack/frames) (Help entry was missing).
-
Fixed bug which caused phpdbg to fail immediately on startup in non-debug builds.
-
(phpdbg uses non-standard TIOCGWINSZ).
-
Included phpdbg sapi (RFC: https://wiki.php.net/rfc/phpdbg).
-
Added watchpoints (watch command).
-
Renamed some commands (next => continue and how to step).
-
(Added stdin/stdout/stderr constants and their php:// wrappers).
-
-
PDO:
-
-
('pdo/php_pdo_error.h' not copied to the include dir).
-
-
PDO-ODBC:
-
-
(PDO-ODBC changes for 64-bit).
-
-
PDO_pgsql:
-
-
(PDO_pgsql: add pg_get_notify support).
-
(pgsqlCopyFromFile, pgsqlCopyToArray use Postgres < 7.3 syntax).
-
Cleaned up code by increasing the requirements to libpq versions providing PQexecParams, PQprepare, PQescapeStringConn, PQescapeByteaConn. According to the release notes that means 8.0.8+ or 8.1.4+.
-
Deprecated PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT, an undocument constant effectively equivalent to PDO::ATTR_EMULATE_PREPARES.
-
Added PDO::PGSQL_ATTR_DISABLE_PREPARES constant to execute the queries without preparing them, while still passing parameters separately from the command text using PQexecParams.
-
-
PDO_firebird:
-
-
(memory corruption in error handling) (Popa)
-
-
Phar:
-
-
($phar->buildFromDirectory can't compress file with an accent in its name).
-
(Redirection loop on nginx with FPM).
-
-
readline:
-
-
(Interactive mode doesn't force a newline before the prompt).
-
(Save command history when exiting interactive shell with control-c).
-
-
Reflection:
-
-
(loosen the restrictions on ReflectionClass::newInstanceWithoutConstructor()).
-
-
Session:
-
-
(Regression in session_regenerate_id()).
-
Fixed missing type checks in php_session_create_id (Yussuf Khalil, Stas).
-
(Session raises E_NOTICE when session name variable is array).
-
(session.hash_function silently fallback to default md5) (Yasuo)
-
(Session write short circuit).
-
(session_abort() and session_reset() function).
-
Remove session_gc() and session_serializer_name() wich were introduced in the first 5.6.0 alpha.
Implemented strict sessions RFC (https://wiki.php.net/rfc/strict_sessions) which protects against session fixation attacks and session collisions (CVE-2011-4718).
-
Fixed possible buffer overflow under Windows. Note: Not a security fix.
-
Changed session.auto_start to PHP_INI_PERDIR.
-
-
SOAP:
-
-
(SoapHeader problems with SoapServer).
-
-
SPL:
-
-
(Segfault when getting SplStack object Value).
-
Added RecursiveTreeIterator setPostfix and getPostifx methods.
Fixed trailing space in name of constant IntlCalendar::FIELD_FIELD_COUNT.
-
(Buggy grapheme_substr() on edge case).
-
(Offsets may be wrong for grapheme_stri* functions).
-
-
OCI8:
-
-
Bump PECL package info version check to allow PECL installs with PHP 5.5+.
-
-
PDO:
-
-
Allowed PDO_OCI to compile with Oracle Database 12c client libraries.
-
-
Pgsql:
-
-
pg_unescape_bytea() raises E_WARNING for invalid inputs.
-
-
Phar:
-
-
(Missing phar man page).
-
-
Session:
-
-
Added optional create_sid() argument to session_set_save_handler(), SessionHandler and new SessionIdInterface.
-
-
Sockets:
-
-
Setting SO_BINDTODEVICE with socket_set_option.
-
Allowed specifying paths in the abstract namespace for the functions socket_bind(), socket_connect() and socket_sendmsg().
-
sendmsg() ancillary data construction for SCM_RIGHTS is faulty.
-
-
SPL:
-
-
RecursiveDirectoryIterator segfault.
-
Memleak when calling Directory(Recursive)Iterator/Spl(Temp)FileObject ctor twice.
-
-
CGI/FastCGI SAPI:
-
-
Added PHP_FCGI_BACKLOG, overrides the default listen backlog.
-
-
-
-
-
-
Version 5.5.0
-
-
-
Drop support for bison < 2.4 when building PHP from GIT source
-
-
-
-
Improved Zend Engine:
-
-
Added ARMv7/v8 versions of various Zend arithmetic functions that are implemented using inline assembler
-
Added systemtap support by enabling systemtap compatible dtrace probes on linux
-
Optimized access to temporary and compiled VM variables. 8% less memory reads
-
The VM stacks for passing function arguments and syntaticaly nested calls
- were merged into a single stack. The stack size needed for op_array
- execution is calculated at compile time and preallocated at once. As result
- all the stack push operations don't require checks for stack overflow
- any more
-
-
-
-
-
General improvements:
-
-
Added generators and coroutines.
-
Added "finally" keyword.
-
Added simplified password hashing API.
-
Added support for constant array/string dereferencing.
-
Added Class Name Resolution As Scalar Via "class" Keyword
-
Added support for using empty() on the result of function calls and other expressions
-
Added support for non-scalar Iterator keys in foreach
-
Added support for list in foreach
-
-
-
-
-
Core:
-
-
Added Zend Opcache extension and enable building it by default.
-
Added array_column function which returns a column in a multidimensional array
-
Added boolval()
-
Added "Z" option to pack/unpack
-
Added optional second argument for assert() to specify custom message
-
Added support for changing the process's title in CLI/CLI-Server SAPIs. The implementation is more robust that the proctitle PECL module
-
Improve set_exception_handler while doing reset
-
Return previous handler when passing NULL to set_error_handler and set_exception_handler
-
(Added HTTP codes as of RFC 6585)
-
(Allow 'set_error_handler' to handle NULL)
-
(specify temp dir by php.ini)
-
(Dereferencing process-handles no longer waits on those processes)
-
(count() off by one inside unset())
-
(Class loading order affects E_STRICT warning)
-
(segfault in zend_do_fcall_common_helper_SPEC)
-
(Segfault in gc_zval_possible_root)
-
(doc comments picked up from previous scanner run)
-
(Apache2 TS crash with get_browser())
-
(Heap based buffer overflow in quoted_printable_encode, CVE 2013-2110)
-
(Use of no longer available ini directives causes crash on TS build)
-
(Custom Exceptions crash when internal properties overridden)
(Uninitialized ++$foo->bar; does not cause a notice)
-
allow specifying Max-Age attribute in setcookie()
-
(Engine uses locale rules to handle class names)
-
Fix undefined behavior when converting double variables to integers. The double is now always rounded towards zero, the remainder of its division by 2^32 or 2^64 (depending on sizeof(long)) is calculated and it's made signed assuming a two's complement representation
(CURLOPT_BINARYTRANSFER no longer used. The constant
- still exists for backward compatibility but is doing nothing)
-
(Missing CURLINFO_RESPONSE_CODE support)
-
Added new functions curl_escape, curl_multi_setopt, curl_multi_strerror
- curl_pause, curl_reset, curl_share_close, curl_share_init,
- curl_share_setopt curl_strerror and curl_unescape
-
Addes new curl options CURLOPT_TELNETOPTIONS, CURLOPT_GSSAPI_DELEGATION,
- CURLOPT_ACCEPTTIMEOUT_MS, CURLOPT_SSL_OPTIONS, CURLOPT_TCP_KEEPALIVE,
- CURLOPT_TCP_KEEPIDLE and CURLOPT_TCP_KEEPINTVL
-
-
-
-
-
DateTime:
-
-
Added DateTimeImmutable - a variant of DateTime that only returns the
- modified state instead of changing itself.
-
(Invalid free when unserializing DateTimeZone).
-
(strftime crash with VS2012)
-
(Unserialize Invalid Date causes crash)
-
(modify("+5 weekdays") returns Sunday)
-
(DateInterval::format("%a") is always zero when an
- interval is created using the createFromDateString method)
-
(DateTimeZone serialize/unserialize)
-
(Crash when using unserialized DatePeriod instance)
-
-
-
-
-
dba:
-
-
(dba_insert not working as expected)
-
-
-
-
-
Filter:
-
-
(added MAC address validation)
-
-
-
-
-
Fileinfo:
-
-
Upgraded libmagic to 5.14.
-
(mimetype detection segfaults on mp3 file)
-
(Different results in TS and NTS under Windows)
-
(Load multiple magic files from a directory under Windows)
-
-
-
-
-
FPM:
-
-
Add --with-fpm-systemd option to report health to systemd, and
- systemd_interval option to configure this. The service can now use
- Type=notify in the systemd unit file.
-
Ignore QUERY_STRING when sent in SCRIPT_FILENAME
-
Log a warning when a syscall fails
-
(add support for FPM init.d script)
-
(error_log ignored when daemonize=0)
-
(php with fpm fails to build on Solaris 10 or 11)
-
Fixed some possible memory or resource leaks and possible null dereference
- detected by code coverity scan
-
-
-
-
-
GD:
-
-
(imagerotate produces corrupted image).
-
(segfault in imagesetinterpolation)
-
Fix build with system libgd >= 2.1 which is now the minimal
- version required (as build with previous version is broken).
- No change when bundled libgd is used
-
Upgraded libgd to 2.1
-
-
-
-
-
hash:
-
-
Added support for PBKDF2 via hash_pbkdf2().
-
(hash_pbkdf2() truncates data when using default length
- and hex output)
-
-
-
-
-
intl:
-
-
Added UConverter wrapper.
-
The intl extension now requires ICU 4.0+
-
Added intl.use_exceptions INI directive, which controls what happens when
- global errors are set together with intl.error_level
-
MessageFormatter::format() and related functions now accepted named
- arguments and mixed numeric/named arguments in ICU 4.8+
-
MessageFormatter::format() and related functions now don't error out when
- an insufficient argument count is provided. Instead, the placeholders will
- remain unsubstituted
-
MessageFormatter::parse() and MessageFormat::format() (and their static
- equivalents) don't throw away better than second precision in the arguments
-
IntlDateFormatter::__construct and datefmt_create() now accept for the
- $timezone argument time zone identifiers, IntlTimeZone objects, DateTimeZone
- objects and NULL
-
IntlDateFormatter::__construct and datefmt_create() no longer accept invalid
- timezone identifiers or empty strings
-
The default time zone used in IntlDateFormatter::__construct and
- datefmt_create() (when the corresponding argument is not passed or NULL is
- passed) is now the one given by date_default_timezone_get(), not the
- default ICU time zone
-
The time zone passed to the IntlDateFormatter is ignored if it is NULL and
- if the calendar passed is an IntlCalendar object -- in this case, the
- IntlCalendar's time zone will be used instead. Otherwise, the time zone
- specified in the $timezone argument is used instead. This does not affect
- old code, as IntlCalendar was introduced in this version
-
IntlDateFormatter::__construct and datefmt_create() now accept for the
- $calendar argument also IntlCalendar objects
-
IntlDateFormatter::getCalendar() and datefmt_get_calendar() return false
- if the IntlDateFormatter was set up with an IntlCalendar instead of the
- constants IntlDateFormatter::GREGORIAN/TRADITIONAL. IntlCalendar did not
- exist before this version
-
IntlDateFormatter::setCalendar() and datefmt_set_calendar() now also accept
- an IntlCalendar object, in which case its time zone is taken. Passing a
- constant is still allowed, and still keeps the time zone
-
IntlDateFormatter::setTimeZoneID() and datefmt_set_timezone_id() are
- deprecated. Use IntlDateFormatter::setTimeZone() or datefmt_set_timezone()
- instead
-
IntlDateFormatter::format() and datefmt_format() now also accept an
- IntlCalendar object for formatting
-
Added the classes: IntlCalendar, IntlGregorianCalendar, IntlTimeZone,
- IntlBreakIterator, IntlRuleBasedBreakIterator and
- IntlCodePointBreakIterator
mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() and mcrypt_ofb() now throw E_DEPRECATED.
-
-
-
-
-
mysql:
-
-
This extension is now deprecated, and deprecation warnings will be generated
- when connections are established to databases via mysql_connect(),
- mysql_pconnect(), or through implicit connection: use MySQLi or PDO_MySQL
- instead
-
Dropped support for LOAD DATA LOCAL INFILE handlers when using libmysql.
- Known for stability problems
-
Added support for SHA256 authentication available with MySQL 5.6.6+
-
-
-
-
-
mysqli:
-
-
Added mysqli_begin_transaction()/mysqli::begin_transaction(). Implemented
- all options, per MySQL 5.6, which can be used with START TRANSACTION, COMMIT
- and ROLLBACK through options to mysqli_commit()/mysqli_rollback() and their
- respective OO counterparts. They work in libmysql and mysqlnd mode
(Segfault when calling fetch_object on a use_result and DB
- pointer has closed)
-
(MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS undeclared when
- using Connector/C)
-
-
-
-
-
mysqlnd:
-
-
Add new begin_transaction() call to the connection object. Implemented all
- options, per MySQL 5.6, which can be used with START TRANSACTION, COMMIT
- and ROLLBACK
(Segfault while using RecursiveIteratorIterator on 64-bits systems).
-
-
-
-
-
-
Version 5.4.16
-
-
-
Core:
-
-
(Heap based buffer overflow in quoted_printable_encode, CVE-2013-2110).
-
(Use of no longer available ini directives causes crash on TS build).
-
(compilation failure on x32).
-
(SegFault on zend_deactivate).
-
(Segfault on memory exhaustion within function definition).
-
-
-
Calendar:
-
-
(Integer overflow in SndToJewish).
-
-
-
Fileinfo:
-
-
(mimetype detection segfaults on mp3 file).
-
-
-
FPM:
-
-
Ignore QUERY_STRING when sent in SCRIPT_FILENAME.
-
Fixed some possible memory or resource leaks and possible null dereference detected by code coverity scan.
-
Log a warning when a syscall fails.
-
Add --with-fpm-systemd option to report health to systemd, and systemd_interval option to configure this. The service can now use Type=notify in the systemd unit file.
-
-
-
MySQLi
-
-
(Segfault when calling fetch_object on a use_result and DB pointer has closed).
-
-
-
Phar:
-
-
(PHAR PHPTs intermittently crash when run on DFS, SMB or with non std tmp dir).
-
-
-
SNMP:
-
-
(Some IPv6 addresses get interpreted wrong).
-
(Truncated snmpget).
-
-
-
Streams:
-
-
(stream_select() fails with pipes returned by proc_open() on Windows x64).
-
-
-
Zend Engine:
-
-
(Custom Exceptions crash when internal properties overridden).
-
-
-
-
-
-
-
Version 5.4.15
-
-
-
Core:
-
-
(debug_backtrace in set_error_handler corrupts zend heap: segfault).
-
(dns_get_record result with string of length -1).
-
(follow_location parameter of context is ignored for most response codes).
-
(fd leak on Solaris).
-
(fd leak on Solaris).
-
-
Fileinfo:
-
-
Upgraded libmagic to 5.14.
-
-
Streams:
-
-
Fixed Windows x64 version of stream_socket_pair() and improved error handling.
-
-
Zip:
-
-
(ZipArchive::addFile() has to check for file existence).
-
-
-
-
-
-
Version 5.4.14
-
-
-
Core:
-
-
(Ran out of opcode space).
-
(Memoryleak when using the same variablename two times in function declaration).
-
(more empty delimiter warning in strX methods).
-
(ArrayAccess::&offsetGet() in a trait causes fatal error).
-
(microtime(true) less than $_SERVER['REQUEST_TIME_FLOAT']).
-
(Debug backtrace changed behavior since 5.4.10 or 5.4.11).
-
(Parent class incorrectly using child constant in class property).
-
(zend_do_fcall_common_helper_SPEC does not handle exceptions properly).
-
(Show class_alias In get_declared_classes()).
-
-
-
PCRE:
-
-
Merged PCRE 8.32.
-
-
-
SNMP:
-
-
(OO API, walk: $suffix_as_key is not working correctly).
-
-
-
Zip:
-
-
(Zip crash intermittently). (Anatol)
-
-
-
-
-
-
Version 5.4.13
-
-
-
Core:
-
-
(Insteadof not work for class method in 5.4.11).
-
(Added HTTP codes as of RFC 6585).
-
(dval to lval different behavior on ppc64).
-
(Inheritance with Traits failed with error).
-
-
CLI server:
-
-
(buit-in web server is broken on ppc64).
-
-
Mbstring:
-
-
mb_split() can now handle empty matches like preg_split() does.
-
-
OpenSSL:
-
-
(openssl corrupts ssl key resource when using
- openssl_get_publickey()).
where php_stream_open_wrapper_ex tries to open a directory descriptor under windows
-
failure caused by the posix lseek and read versions under windows in cdf_read()
-
-
-
-
-
Iconv
-
-
Fixed a bug that iconv extension fails to link to the correct library when another extension makes use of a library that links to the iconv library. See https://bugs.gentoo.org/show_bug.cgi?id=364139 for detail
-
-
-
-
-
Intl
-
-
(Memory corruption in internal function get_icu_disp_value_src_php()
(Built in web server does not set
- $_SERVER['SCRIPT_FILENAME'] when using router).
-
-
-
-
-
Core
-
-
Fixed crash in ZTS using same class in many threads.
-
(html_entity_decode tries to decode code points that don't
- exist in ISO-8859-1).
-
(Incorrect lexing of 0b00*+<NUM>).
-
(Segfault when using header_register_callback).
-
(Missing error check in trait 'insteadof' clause).
-
(Crash when an exception is thrown by __autoload
- accessing a static property).
-
(exit code incorrect).
-
(Confusing error message when extending traits).
-
(Order of traits in use statement can cause a fatal
- error).
-
(type hinting with "self" keyword causes weird errors).
-
-
-
-
-
Fileinfo
-
-
Fix fileinfo test problems.
-
-
-
-
-
Intl
-
-
(Incorrent bounds checking in grapheme_strpos).
-
-
-
-
-
mbstring
-
-
MFH mb_ereg_replace_callback() for security enhancements.
-
-
-
-
-
mysqlnd
-
-
(mysqlnd FTBFS when -Wformat-security is enabled).
-
-
-
-
-
Standard
-
-
Fixed memory leak in substr_replace.
-
Make max_file_uploads ini directive settable outside of php.
-
(Bad formatting on phpinfo()).
-
(time_nanosleep() does validate input params).
-
(stream_socket_server silently truncates long unix socket
- paths).
-
-
-
-
-
-
Version 5.4.0
-
-
-
-
autoconf 2.59+ is now supported (and required) for generating the
- configure script with ./buildconf. Autoconf 2.60+ is desirable
- otherwise the configure help order may be incorrect.
-
-
-
Removed legacy features
-
-
break/continue $var syntax.
-
Safe mode and all related ini options.
-
register_globals and register_long_arrays ini options.
-
import_request_variables().
-
allow_call_time_pass_reference.
-
define_syslog_variables ini option and its associated function.
-
highlight.bg ini option.
-
Session bug compatibility mode (session.bug_compat_42 and
- session.bug_compat_warn ini options).
-
session_is_registered(), session_register() and session_unregister()
- functions.
-
y2k_compliance ini option.
-
magic_quotes_gpc, magic_quotes_runtime and magic_quotes_sybase
- ini options. get_magic_quotes_gpc, get_magic_quotes_runtime are kept
- but always return false, set_magic_quotes_runtime raises an
- E_CORE_ERROR.
-
Removed support for putenv("TZ=..") for setting the timezone.
-
Removed the timezone guessing algorithm in case the timezone isn't set with
- date.timezone or date_default_timezone_set(). Instead of a guessed
- timezone, "UTC" is now used instead.
-
-
-
-
-
Moved extensions to PECL
-
-
ext/sqlite. (Note: the ext/sqlite3 and ext/pdo_sqlite extensions are
- not affected)
-
-
-
-
-
General improvements
-
-
Added short array syntax support ([1,2,3]), see UPGRADING guide for full
- details.
-
Added binary numbers format (0b001010).
-
Added support for Class::{expr}() syntax.
-
Added multibyte support by default. Previously php had to be compiled
- with --enable-zend-multibyte. Now it can be enabled or disabled through
- zend.multibyte directive in php.ini.
-
Removed compile time dependency from ext/mbstring.
-
Added support for Traits.
-
Added closure $this support back.
-
Added array dereferencing support.
-
Added callable typehint.
-
Added indirect method call through array. .
-
Added DTrace support.
-
Added class member access on instantiation (e.g. (new foo)->bar()) support.
-
<?= is now always available regardless of the short_open_tag setting.
-
Implemented Zend Signal Handling (configurable option --enable-zend-signals,
- off by default).
-
Improved output layer, see README.NEW-OUTPUT-API for internals.
-
Improved unix build system to allow building multiple PHP binary SAPIs and
- one SAPI module the same time. , .
-
Implemented closure rebinding as parameter to bindTo.
-
Improved the warning message of incompatible arguments.
-
Improved ternary operator performance when returning arrays.
-
Changed error handlers to only generate docref links when the docref_root
- INI setting is not empty.
-
Changed silent conversion of array to string to produce a notice.
-
Changed default value of "default_charset" php.ini option from ISO-8859-1 to
- UTF-8.
-
Changed silent casting of null/''/false into an Object when adding
- a property into a warning.
-
Changed E_ALL to include E_STRICT.
-
Disabled windows CRT warning by default, can be enabled again using the ini
- directive windows_show_crt_warnings.
-
: Binary number literal returns float number though its
- value is small enough.
-
-
-
-
-
Improved Zend Engine memory usage
-
-
Improved parse error messages.
-
Replaced zend_function.pass_rest_by_reference by
- ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags.
-
Replaced zend_function.return_reference by ZEND_ACC_RETURN_REFERENCE
- in zend_function.fn_flags.
-
Removed zend_arg_info.required_num_args as it was only needed for internal
- functions. Now the first arg_info for internal functions (which has special
- meaning) is represented by zend_internal_function_info structure.
-
Moved zend_op_array.size, size_var, size_literal, current_brk_cont,
- backpatch_count into CG(context) as they are used only during compilation.
-
Moved zend_op_array.start_op into EG(start_op) as it's used only for
- 'interactive' execution of single top-level op-array.
-
Replaced zend_op_array.done_pass_two by ZEND_ACC_DONE_PASS_TWO in
- zend_op_array.fn_flags.
-
op_array.vars array is trimmed (reallocated) during pass_two.
-
Replaced zend_class_entry.constants_updated by ZEND_ACC_CONSTANTS_UPDATED
- in zend_class_entry.ce_flags.
-
Reduced the size of zend_class_entry by sharing the same memory space
- by different information for internal and user classes.
- See zend_class_entry.info union.
-
Reduced size of temp_variable.
-
-
-
-
-
Improved Zend Engine, performance tweaks and optimizations
-
-
Inlined most probable code-paths for arithmetic operations directly into
- executor.
-
Eliminated unnecessary iterations during request startup/shutdown.
-
Changed $GLOBALS into a JIT autoglobal, so it's initialized only if used.
- (this may affect opcode caches!)
-
Improved performance of @ (silence) operator.
-
Simplified string offset reading. $str[1][0] is now a legal construct.
-
Added caches to eliminate repeatable run-time bindings of functions,
- classes, constants, methods and properties.
-
Added concept of interned strings. All strings constants known at compile
- time are allocated in a single copy and never changed.
-
ZEND_RECV now always has IS_CV as its result.
-
ZEND_CATCH now has to be used only with constant class names.
-
ZEND_FETCH_DIM_? may fetch array and dimension operands in different order.
-
Simplified ZEND_FETCH_*_R operations. They can't be used with the
- EXT_TYPE_UNUSED flag any more. This is a very rare and useless case.
- ZEND_FREE might be required after them instead.
-
Split ZEND_RETURN into two new instructions ZEND_RETURN and
- ZEND_RETURN_BY_REF.
-
Optimized access to global constants using values with pre-calculated
- hash_values from the literals table.
-
Optimized access to static properties using executor specialization.
- A constant class name may be used as a direct operand of ZEND_FETCH_*
- instruction without previous ZEND_FETCH_CLASS.
-
zend_stack and zend_ptr_stack allocation is delayed until actual usage.
-
-
-
-
-
Other improvements to Zend Engine
-
-
Added an optimization which saves memory and emalloc/efree calls for empty
- HashTables.
-
Added ability to reset user opcode handlers.
-
Changed the structure of op_array.opcodes. The constant values are moved from
- opcode operands into a separate literal table.
-
Fixed (disabled) inline-caching for ZEND_OVERLOADED_FUNCTION methods.
-
(Interface implementation / inheritence not possible in
- abstract classes).
-
-
-
-
-
Improved core functions
-
-
Added optional argument to debug_backtrace() and debug_print_backtrace()
- to limit the amount of stack frames returned.
-
Added hex2bin() function.
-
number_format() no longer truncates multibyte decimal points and thousand
- separators to the first byte. .
-
Added support for object references in recursive serialize() calls.
- .
-
Added support for SORT_NATURAL and SORT_FLAG_CASE in array
- sort functions (sort, rsort, ksort, krsort, asort, arsort and
- array_multisort). .
-
Added stream metadata API support and stream_metadata() stream class
- handler.
-
User wrappers can now define a stream_truncate() method that responds
- to truncation, e.g. through ftruncate(). .
-
Improved unserialize() performance.
-
Changed array_combine() to return empty array instead of FALSE when both
- parameter arrays are empty. .
-
Fixed invalid free in call_user_method() function.
-
Fixed crypt_blowfish handling of 8-bit characters. (CVE-2011-2483).
-
(Incorect lexing of 0x00*+<NUM>).
-
(Buffer overflow on htmlspecialchars/entities with
- $double=false).
-
(Possible invalid handler usage in windows random
- functions).
-
(unserialize() Does not invoke __wakeup() on object).
-
(Segfault when running symfony 2 tests).
-
(TRAITS - PHPDoc Comment Style Bug).
-
(httpd.worker segfault on startup with php_value).
-
(Segmentation fault with $cls->{expr}() syntax).
-
(Segmentation fault with Cls::{expr}() syntax).
-
(Invalid read and writes).
-
(Traits Segfault).
-
(Segmentation fault with include & class extending).
-
(non-existent sub-sub keys should not have values).
-
(No string escape code for ESC (ascii 27), normally \e).
-
(ob_get_status(true) no longer returns an array when
- buffer is empty).
-
(Segfault when using ob_gzhandler() with open buffers).
-
(invalid read/writes when unserializing specially crafted
- strings).
-
(header() cannot detect the multi-line header with
- CR(0x0D)).
-
(Notice when array in method prototype error).
-
(Conjunction of ternary and list crashes PHP).
-
(proc_open's streams may hang with stdin/out/err when the data exceeds or is equal to 2048 bytes).
-
(__halt_compiler() works in braced namespaces).
-
(SIGALRM cause segfault in php_error_cb).
-
(GCC does not provide __sync_fetch_and_add on some archs).
-
(Interruption in substr_replace()).
-
(Missing initial value of static locals in trait methods).
-
(Behavior of unserialize has changed).
-
(memory corruption in parse_ini_string).
-
(Digest Authenticate missed in 5.4) .
-
(multiple NULL Pointer Dereference with zend_strndup())
- (CVE-2011-4153).
-
(TOCTOU issue in getenv() on Windows builds).
-
(undefined reference to `__sync_fetch_and_add_4' on Linux
- parisc).
-
(Omitting a callable typehinted argument causes a segfault).
-
(is_a() triggers autoloader, new optional 3rd argument to
- is_a and is_subclass_of).
-
(ZTS build broken with dtrace).
-
(recursive mkdir fails with current (dot) directory in path).
-
(Function registered by header_register_callback is
- called only once per process).
-
Implement (Get php binary path during script execution).
-
(tempnam() by-pass open_basedir with nonexistent
- directory).
-
(iconv() returns part of string on error).
-
(Include fails with toplevel symlink to /).
-
-
-
-
-
Improved generic SAPI support
-
-
Added $_SERVER['REQUEST_TIME_FLOAT'] to include microsecond precision.
-
Added max_input_vars directive to prevent attacks based on hash collisions.
-
Added header_register_callback() which is invoked immediately
- prior to the sending of headers and after default headers have
- been added.
-
Added http_response_code() function. .
-
(Corrupted $_FILES indices lead to security concern).
-
(Insufficient validating of upload name leading to
- corrupted $_FILES indices).
-
-
-
-
-
Improved Apache SAPI
-
-
(possible integer overflow in content_length).
-
-
-
-
-
Improved CLI SAPI
-
-
Added friendly log messages. .
-
Added built-in web server that is intended for testing purpose.
-
Added command line option --rz <name> which shows information of the
- named Zend extension.
-
Interactive readline shell improvements
-
-
Added "cli.pager" php.ini setting to set a pager for output.
-
Added "cli.prompt" php.ini setting to configure the shell prompt.
-
Added shortcut #inisetting=value to change ini settings at run-time.
-
Changed shell not to terminate on fatal errors.
-
Interactive shell works with shared readline extension. .
-
-
(Memory leak when access a non-exists file).
-
(PHP Errors are not reported in browsers using built-in
- SAPI).
-
(Segfault after two multipart/form-data POST requests,
- one 200 RQ and one 404).
-
Implement (Missing $_SERVER['SERVER_PORT']).
-
($_SERVER["PHP_SELF"] incorrect).
-
(Router returns false, but POST is not passed to requested
- resource).
-
(Last 2 lines of page not being output).
-
(memory definitely lost in cli server).
-
(If URI does not contain a file, index.php is not served).
-
(memory leak when using built-in server).
-
(SegFault when outputting header WWW-Authenticate).
-
(request headers missed in $_SERVER).
-
(Changing the working directory makes router script
- inaccessible).
-
(cli-server missing _SERVER[REMOTE_ADDR]).
-
(Built in web server not accepting file uploads).
-
(cli-server could not output correctly in some case).
-
-
-
-
-
Improved CGI/FastCGI SAPI
-
-
Added apache compatible functions: apache_child_terminate(),
- getallheaders(), apache_request_headers() and apache_response_headers().
-
Improved performance of FastCGI request parsing.
-
Fixed reinitialization of SAPI callbacks after php_module_startup().
-
-
-
-
-
Improved PHP-FPM SAPI
-
-
Added partial syslog support (on error_log only). .
-
Added .phar to default authorized extensions.
-
Added process.max to control the number of process FPM can fork. .
-
Dropped restriction of not setting the same value multiple times, the last
- one holds.
-
Lowered default value for Process Manager. .
-
Enhanced security by limiting access to user defined extensions.
- .
-
Enhanced error log when the primary script can't be open. .
-
Removed EXPERIMENTAL flag.
-
(FPM does not clear auth_user on request accept).
-
(memory corruption when web server closed the fcgi fd).
-
-
-
-
-
Improved Litespeed SAPI
-
-
(Make Fails with "Missing Separator" error).
-
-
-
-
-
Improved BCmath extension
-
-
(bcscale related crashes on 64bits platforms).
-
-
-
-
Improved CURL extension
-
-
Added support for CURLOPT_MAX_RECV_SPEED_LARGE and
- CURLOPT_MAX_SEND_SPEED_LARGE. .
-
(curl_copy_handle segfault when used with
- CURLOPT_PROGRESSFUNCTION).
-
-
-
-
Improved Date extension
-
-
Added the + modifier to parseFromFormat to allow trailing text in the
- string to parse without throwing an error.
-
-
-
-
Improved DBA extension
-
-
Added Tokyo Cabinet abstract DB support.
-
Added Berkeley DB 5 support.
-
-
-
-
Improved DOM extension
-
-
Added the ability to pass options to loadHTML.
-
-
-
-
Improved filesystem functions
-
-
scandir() now accepts SCANDIR_SORT_NONE as a possible sorting_order value.
- .
-
-
-
-
Improved fileinfo extension
-
-
Fixed possible memory leak in finfo_open().
-
Fixed memory leak when calling the Finfo constructor twice.
-
(C++ comment fails in c89).
-
-
-
-
Improved HASH extension
-
-
Added Jenkins's one-at-a-time hash support.
-
Added FNV-1 hash support.
-
Made Adler32 algorithm faster. .
-
Removed Salsa10/Salsa20, which are actually stream ciphers.
-
(Tiger hash output byte order).
-
-
-
-
Improved intl extension
-
-
Added Spoofchecker class, allows checking for visibly confusable characters and
- other security issues.
-
Added Transliterator class, allowing transliteration of strings.
-
Added support for UTS #46.
-
Fixed memory leak in several Intl locale functions.
-
Fixed build on Fedora 15 / Ubuntu 11.
-
(grapheme_substr() returns false on big length).
-
-
-
-
Improved JSON extension
-
-
Added new json_encode() option JSON_UNESCAPED_UNICODE. .
-
Added JsonSerializable interface.
-
Added JSON_BIGINT_AS_STRING, extended json_decode() sig with $options.
-
Added support for JSON_NUMERIC_CHECK option in json_encode() that converts
- numeric strings to integers.
-
Added new json_encode() option JSON_UNESCAPED_SLASHES. .
-
Added new json_encode() option JSON_PRETTY_PRINT. .
-
-
-
-
Improved LDAP extension
-
-
Added paged results support. .
-
-
-
-
Improved mbstring extension
-
-
Added Shift_JIS/UTF-8 Emoji (pictograms) support.
-
Added JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004)
- support.
-
Ill-formed UTF-8 check for security enhancements.
-
Added MacJapanese (Shift_JIS) and gb18030 encoding support.
-
Added encode/decode in hex format to mb_[en|de]code_numericentity().
-
Added user JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004)
- support.
-
Added the user defined area for CP936 and CP950.
-
Fixed possible crash in mb_ereg_search_init() using empty pattern.
-
(Characters lost while converting from cp936 to utf8).
-
-
-
-
Improved MS SQL extension
-
-
(Compile failure with freetds 0.91).
-
-
-
-
Improved MySQL extensions
-
-
MySQL: Deprecated mysql_list_dbs(). .
-
mysqlnd: Added named pipes support. .
-
MySQLi: Added iterator support in MySQLi. mysqli_result implements
- Traversable.
-
PDO_mysql: Removed support for linking with MySQL client libraries older
- than 4.1.
-
ext/mysql, mysqli and pdo_mysql now use mysqlnd by default.
-
(mysql_pconnect leaks file descriptors on reconnect).
-
(PS crash with libmysql when binding same variable as
- param and out).
-
-
-
-
Improved OpenSSL extension
-
-
Added AES support. .
-
Added a "no_ticket" SSL context option to disable the SessionTicket TLS
- extension. .
-
Added no padding option to openssl_encrypt()/openssl_decrypt().
-
Use php's implementation for Windows Crypto API in
- openssl_random_pseudo_bytes.
-
On error in openssl_random_pseudo_bytes() made sure we set strong result
- to false.
-
Fixed segfault with older versions of OpenSSL.
-
Fixed possible attack in SSL sockets with SSL 3.0 / TLS 1.0.
- CVE-2011-3389.
-
(Crash when decoding an invalid base64 encoded string).
-
(Fixed NULL pointer dereference in
- stream_socket_enable_crypto, case when ssl_handle of session_stream is not
- initialized.
-
-
-
-
Improved Oracle Database extension (OCI8)
-
-
Increased maximum Oracle error message buffer length for new 11.2.0.3 size.
(segfaults if query column count less than param count).
-
("bindValue" and "bindParam" do not work for PDO Firebird).
-
(segfaults when passing lowercased column name to
- bindColumn).
-
-
-
-
Improved PostgreSQL extension
-
-
Added support for "extra" parameter for PGNotify().
-
-
-
-
Improved preg extension
-
-
Changed third parameter of preg_match_all() to optional. .
-
-
-
-
Improved readline extension
-
-
(Enable callback support when built against libedit).
-
-
-
-
Improved Reflection extension
-
-
Added ReflectionClass::newInstanceWithoutConstructor() to create a new
- instance of a class without invoking its constructor. .
-
Added ReflectionExtension::isTemporary() and
- ReflectionExtension::isPersistent() methods.
-
Added ReflectionZendExtension class.
-
Added ReflectionClass::isCloneable().
-
(Reflection and Late Static Binding).
-
(__toString() method triggers E_NOTICE "Array to string
- conversion").
-
-
-
-
Improved Session extension
-
-
Expose session status via new function, session_status. .
-
Added support for object-oriented session handlers.
-
Added support for storing upload progress feedback in session data.
-
Changed session.entropy_file to default to /dev/urandom or /dev/arandom if
- either is present at compile time.
-
(session.save_handler=user without defined function core
- dumps).
-
Implement (session_set_save_handler should support a core's
- session handler interface).
-
(invalid return values).
-
-
-
-
Improved SNMP extension
-
-
Added OO API. (php-snmp rewrite).
-
Sanitized return values of existing functions. Now it returns FALSE on
- failure.
-
Allow ~infinite OIDs in GET/GETNEXT/SET queries. Autochunk them to max_oids
- upon request.
-
Introducing unit tests for extension with ~full coverage.
- IPv6 support. ()
-
Way of representing OID value can now be changed when SNMP_VALUE_OBJECT
- is used for value output mode. Use or'ed SNMP_VALUE_LIBRARY(default if
- not specified) or SNMP_VALUE_PLAIN. ()
-
(SNMP module should not strip non-standard SNMP port
- from hostname).
-
(php build fails with USE flag snmp when IPv6 support
- is disabled).
-
(snmp_set_oid_output_format does not allow returning to default).
-
(snmprealwalk (snmp v1) does not handle end of OID tree correctly).
-
(snmp_set_quick_print() persists between requests).
-
(Snmp buffer limited to 2048 char).
-
(snmp v3 noAuthNoPriv doesn't work).
-
-
-
-
Improved SOAP extension
-
-
Added new SoapClient option "keep_alive". .
-
Fixed basic HTTP authentication for WSDL sub requests.
-
-
-
-
Improved SPL extension
-
-
Added RegexIterator::getRegex() method.
-
Added SplObjectStorage::getHash() hook.
-
Added CallbackFilterIterator and RecursiveCallbackFilterIterator.
-
Added missing class_uses(..) as pointed out by .
-
Immediately reject wrong usages of directories under Spl(Temp)FileObject
- and friends.
-
FilesystemIterator, GlobIterator and (Recursive)DirectoryIterator now use
- the default stream context.
-
(SplFileObject::setCsvControl does not expose third
- argument via Reflection).
-
(Wrong value for splFileObject::SKIP_EMPTY).
-
(spl_classes() not includes CallbackFilter classes)
-
-
-
-
Improved Sysvshm extension
-
-
(memory copy issue in sysvshm extension).
-
-
-
-
Improved Tidy extension
-
-
(Tidy::diagnose() NULL pointer dereference).
-
-
-
-
Improved Tokenizer extension
-
-
(token_get_all with regards to __halt_compiler is
- not binary safe).
-
-
-
-
Improved XSL extension
-
-
Added XsltProcessor::setSecurityPrefs($options) and getSecurityPrefs() to
- define forbidden operations within XSLT stylesheets, default is not to
- enable write operations from XSLT. .
-
XSL doesn't stop transformation anymore, if a PHP function can't be called
-
-
-
-
Improved ZLIB extension
-
-
Re-implemented non-file related functionality.
-
(ob_gzhandler always conflicts with zlib.output_compression).
-
-
-
-
-
-
-
-
Version 5.3.29
-
-
Core:
-
-
(Segmentation fault with ArrayObject unset).
-
(spl_fixedarray_resize integer overflow).
-
(printf out-of-bounds read).
-
(iptcparse out-of-bounds read).
-
(convert_uudecode out-of-bounds read).
-
(Segfault in recursiveDirectoryIterator).
-
(insecure temporary file use in the configure script). (CVE-2014-3981)
-
(putenv with empty variable may lead to crash).
-
(unserialize() SPL ArrayObject / SPLObjectStorage Type Confusion) (CVE-2014-3515).
-
(phpinfo() Type Confusion Information Leak Vulnerability). (CVE-2014-4721)
-
-
COM:
-
-
Fixed missing type checks in com_event_sink.
-
-
Date:
-
-
(Heap buffer over-read in DateInterval). (CVE-2013-6712)
Fixed a bug that iconv extension fails to link to the correct library when another extension makes use of a library that links to the iconv library. See https://bugs.gentoo.org/show_bug.cgi?id=364139 for detail
-
-
-
-
-
Intl
-
-
(Memory corruption in internal function get_icu_disp_value_src_php()
Fixed memory leak when calling SplFileInfo's constructor twice.
-
(Segmentation fault when DirectoryIterator's or
- FilesystemIterator's iterators are requested more than once without
- having had its dtor callback called in between).
-
(inconsistent isset behavior of Arrayobject).
-
(ArrayObject comparison).
-
-
-
-
-
SQLite3 extension
-
-
Add createCollation() method.
-
-
-
-
-
Streams
-
-
(stream_context_create() causes memory leaks on use
- streams_socket_create).
-
(Wrappers opened with errors concurrency problem on ZTS).
-
(stream related segfault on fatal error in
- php_stream_context_link).
-
(stream_get_line() reads from stream even when there is
- already sufficient data buffered). stream_get_line() now behaves more like
- fgets(), as is documented.
-
Further fix for bug (stream_get_line misbehaves if EOF is not
- detected together with the last read).
-
(stream_socket_server silently truncates long unix
- socket paths).
("bindValue" and "bindParam" do not work for PDO Firebird).
- (Mariuz)
-
(PDO_Firebird segfaults when passing lowercased column name to bindColumn).
-
(PDO_Firebird segfaults if query column count less than param count).
- (Mariuz)
-
-
-
PDO MySQL driver:
-
-
(pdo_mysql.default_socket ignored). (Johannes)
-
(PDO ignores all SSL parameters when used with mysql
- native driver). (Pierre)
-
(MYSQLND+PDO MySQL requires #define
- MYSQL_OPT_LOCAL_INFILE). (Andrey)
-
-
-
PDO OCI driver:
-
-
(PDO_OCI can't resume Oracle session after it's been
- killed). (mikhail dot v dot gavrilov at gmail dot com, Chris Jones, Tony)
-
-
-
Phar:
-
-
(NULL pointer dereference in phar). (Felipe)
-
(Stubs of a specific length break phar_open_from_fp
- scanning for __HALT_COMPILER). (Ralph Schindler)
-
(internal corruption of phar). (Hannes)
-
(Unable to decompress files in a compressed phar). (Hannes)
-
-
-
PHP-FPM SAPI:
-
-
(FPM does not clear auth_user on request accept).
- (bonbons at linux-vserver dot org)
-
(memory corruption when web server closed the fcgi fd).
- (fat)
-
(php_flag and php_value does not work properly). (fat)
-
(Heartbeat causes a lot of unnecessary events). (fat)
-
(The -d parameter doesn't work). (fat)
-
(Add the "ondemand" process-manager
- to allow zero children). (fat)
-
(status show BIG processes number). (fat)
-
(status.html does not install). (fat)
-
Backported from 5.4 branch (Dropped restriction of not setting the same
- value multiple times, the last one holds).
- (giovanni at giacobbi dot net, fat)
-
Backported FR from 5.4 branch (Added process.max to control
- the number of process FPM can fork). (fat)
-
Backported FR from 5.4 branch (Enhance security by limiting access
- to user defined extensions). (fat)
-
Backported FR from 5.4 branch (Lowered process manager
- default value). (fat)
-
Backported FR from 5.4 branch (Added partial syslog support). (fat)
-
(Enhanced status page with full status and details
- about each processes. Also provide a web page (status.html) for
- real-time FPM status. (fat)
-
Enhance error log when the primary script can't be open. FR . (fat)
-
Added .phar to default authorized extensions. (fat)
-
-
-
Postgres:
-
-
(pg_fetch_* functions do not validate that row param
- is >0). (Ilia)
-
-
-
Reflection:
-
-
(Reflection and Late Static Binding). (Laruence)
-
-
-
Session:
-
-
(session_regenerate_id fails after header sent). (Hannes)
-
-
-
SimpleXML:
-
-
Reverted the SimpleXML->query() behaviour to returning empty arrays
- instead of false when no nodes are found as it was since 5.3.3
- (bug ). (chregu, rrichards)
-
-
-
SOAP
-
-
(Access to a undefined member in inherit SoapClient may
- cause Segmentation Fault). (Dmitry)
-
(PHP Fatal error: SOAP-ERROR: Parsing WSDL:
- Extra content at the end of the doc, when server uses chunked transfer
- encoding with spaces after chunk size). (Dmitry)
-
(SOAP-ERROR: Parsing WSDL with references). (Dmitry)
-
-
-
Sockets:
-
-
(sa_len a #define on IRIX). (china at thewrittenword dot
- com)
-
-
-
SPL:
-
-
(Crash in ArrayObject() when using recursive references).
- (Tony)
-
(Wrong value for splFileObject::SKIP_EMPTY).
- (jgotti at modedemploi dot fr, Hannes)
-
(RegexIterator::accept() doesn't work with scalar values).
- (Hannes)
-
-
-
Streams:
-
-
(stream_get_line misbehaves if EOF is not detected together
- with the last read). (Gustavo)
Added xsl.security_prefs ini option to define forbidden operations within
- XSLT stylesheets, default is not to enable write operations. This option
- won't be in 5.4, since there's a new method. Fixes Bug . (Chregu,
- Nicolas Gregoire)
-
-
-
-
-
-
-
-
Version 5.3.8
-
-
-
-
Core:
-
-
(crypt() returns only the salt for MD5). (Stas)
-
-
-
OpenSSL:
-
-
Reverted a change in timeout handling restoring PHP 5.3.6 behavior,
- as the new behavior caused mysqlnd SSL connections to hang (
- bug ).
- (Pierre, Andrey, Johannes)
-
-
-
-
-
-
-
-
Version 5.3.7
-
-
-
-
Upgraded bundled SQLite to version 3.7.7.1. (Scott)
-
Upgraded bundled PCRE to version 8.12. (Scott)
-
-
Zend Engine:
-
-
(ReflectionClass::getDocComment() returns comment even though the class has none). (Felipe)
-
(compiler fail after previous fail). (Felipe)
-
(Crash when calling call_user_func with unknown function name). (Dmitry)
-
(__halt_compiler and imported namespaces). (Pierrick, Felipe)
-
(class_alias and type hint). (Felipe)
-
(track_errors causes segfault). (Dmitry)
-
(classes from dl()'ed extensions are not destroyed). (Tony, Dmitry)
-
(Crash accessing global object itself returned from its __get() handle). (Dmitry)
-
(Use of closure causes problem in ArrayAccess). (Dmitry)
-
(Closure, use and reference). (Dmitry)
-
(Crash when assigning value to a dimension in a non-array). (Dmitry)
-
(use() of static variables in lambda functions can break staticness). (Dmitry)
-
-
-
-
Core:
-
-
Updated crypt_blowfish to 1.2. (CVE-2011-2483) (Solar Designer) (more info)
-
Removed warning when argument of is_a() or is_subclass_of() is not a known class. (Stas)
-
Fixed crash in error_log(). (Felipe) Reported by Mateusz Kocielski.
-
Added PHP_MANDIR constant telling where the manpages were installed into, and an --man-dir argument to php-config. (Hannes)
-
Fixed a crash inside dtor for error handling. (Ilia)
-
Fixed buffer overflow on overlog salt in crypt(). (Clément LECIGNE, Stas
-
(Range function accuracy). (Adam)
-
-
(parse_url() incorrectly treats ':' as a valid path). (Ilia)
-
(Segfault with allow_call_time_pass_reference = Off). (Dmitry)
-
[NEW]: popen_ex on windows, fixed possible heap overflow (Pierre)
-
(Windows Version Detecting Error). ( xiaomao5 at live dot com, Pierre)
-
(readlink returns weird characters when false result). (Pierre)
(Compile failure due to improper use of ctime_r()). (Ilia)
-
(File path injection vulnerability in RFC1867 File upload filename). (Felipe) Reported by Krzysztof Kotowicz. (CVE-2011-2202)
-
php_win_err can lead to crash. (Pierre)
-
(assert.* is not being reset upon request shutdown). (Ilia)
-
(Fix compiling with older gcc version without need for membar_producer macro). (mhei at heimpold dot de)
-
(incorrect accounting for realpath_cache_size). (Dustin Ward)
-
(getimagesize() doesn't check the full ico signature). (Scott)
-
(Different Hashes on Windows, BSD and Linux on wrong Salt size). (Pierre, os at irj dot ru)
-
(get_browser() segmentation fault when browscap ini directive is set through php_admin_value). (Gustavo)
-
(Crash in zend_mm_check_ptr // Heap corruption). (Dmitry)
-
(Crash in gc_remove_zval_from_buffer). (Dmitry)
-
(use-after-free in substr_replace()). (Stas) (CVE-2011-1148)
-
(Can't set a value with a PATH section in php.ini). (Pierre)
-
(parse_url() incorrectly parses path when ? in fragment). (tomas dot brastavicius at quantum dot lt, Pierrick)
-
(file_get_contents POST request sends additional line break). (maurice-php at mertinkat dot net, Ilia)
-
(fgetcsv() ignores spaces at beginnings of fields). (Ilia)
-
Alternative fix for bug , as applied to the round() function (signed overflow), as the old fix impacted the algorithm for numbers with magnitude smaller than 0. (Gustavo)
-
(Inconsistent behavior of is_subclass_of with interfaces) (Ralph Schindler, Dmitry)
-
(call exit in user_error_handler cause stream relate core). (Gustavo)
-
(SEEK_CUR with 0 value, returns a warning). (Ilia)
-
(Using class constants in array definition fails). (Pierrick, Dmitry)
-
(Invalid parsing in convert.quoted-printable-decode filter). (slusarz at curecanti dot org)
-
(sys_get_temp_dir() possibly inconsistent when using TMPDIR on Windows). (Pierre)
-
-
-
-
Apache2 Handler SAPI:
-
-
(SAPI crashes on apache_config.c:197). (hebergement at riastudio dot fr)
-
-
-
-
CLI SAPI:
-
-
(Zero exit code on option parsing failure). (Ilia)
-
-
-
-
cURL extension:
-
-
Added ini option curl.cainfo (support for custom cert db). (Pierre)
(Lack of error context with nested exceptions). (Stas)
-
(Throwing an exception in a destructor causes a fatal error). (Stas)
-
(same parameter name can be used multiple times in method/function definition). (Felipe)
-
-
-
-
Core:
-
-
Added ability to connect to HTTPS sites through proxy with basic authentication using stream_context/http/header/Proxy-Authorization (Dmitry)
-
Changed default value of ini directive serialize_precision from 100 to 17. (Gustavo)
-
(buffer overrun with high values for precision ini setting). (Gustavo)
-
(reflection data for fgetcsv out-of-date). (Richard)
-
(Regression introduced in 5.3.4 in open_basedir with a trailing forward slash). (lekensteyn at gmail dot com, Pierre)
-
(Fix compile on the VAX). (Rasmus, jklos)
-
(array_product() always returns 0 for an empty array). (Ilia)
-
(fwrite() doesn't check reply from ftp server before exiting). (Ilia)
-
-
-
-
Calendar extension:
-
-
(Integer overflow in SdnToJulian, sometimes leading to segfault). (Gustavo)
-
-
-
-
DOM extension:
-
-
(Made DOMDocument::saveHTML accept an optional DOMNode like DOMDocument::saveXML). (Gustavo)
-
-
-
-
DateTime extension:
-
-
Fixed a bug in DateTime->modify() where absolute date/time statements had no effect. (Derick)
-
(DatePeriod fails to initialize recurrences on 64bit big-endian systems). (Derick, rein@basefarm.no)
-
(Segfault when specifying interval as two dates). (Stas)
-
(Can't use new properties in class extended from DateInterval). (Stas)
-
(setDate, setISODate, setTime works wrong when DateTime created from timestamp). (Stas)
-
(DateTime constructor's second argument doesn't have a null default value). (Gustavo, Stas)
-
-
-
-
Exif extension:
-
-
(crash on crafted tag, reported by Luca Carettoni). (Pierre) (CVE-2011-0708)
-
-
-
-
Filter extension:
-
-
(FILTER_VALIDATE_URL doesn't validate port number). (Ilia, Gustavo)
-
(FILTER_FLAG_NO_RES_RANGE is missing some IP ranges). (Ilia)
-
(INPUT_ENV returns NULL for set variables (CLI)). (Ilia)
-
(FILTER_FLAG_NO_RES_RANGE don't work with ipv6). (Ilia, valli at icsurselva dot ch)
-
-
-
-
Fileinfo extension:
-
-
(finfo_file() Cannot determine filetype in archives). (Hannes)
-
-
-
-
Gettext
-
-
(_() crashes on Windows when no LANG or LANGUAGE environment variable are set). (Pierre)
-
-
-
-
IMAP extension:
-
-
(get MIME headers of the part of the email). (Stas)
-
(imap_mime_header_decode() doesn't ignore \t during long MIME header unfolding). (Adam)
-
-
-
-
Intl extension:
-
-
(Segmentation fault when using cloned several intl objects). (Gustavo)
-
(NumberFormatter::setSymbol crash on bogus $attr values). (Felipe)
-
Implemented clone functionality for number, date & message formatters. (Stas).
-
-
-
-
JSON extension:
-
-
(Ensure error_code is always set during some failed decodings). (Scott)
-
-
-
-
mysqlnd
-
-
Fixed problem with always returning 0 as num_rows for unbuffered sets. (Andrey, Ulf)
-
-
-
-
MySQL Improved extension:
-
-
Added 'db' and 'catalog' keys to the field fetching functions (FR ). (Kalle)
-
Fixed buggy counting of affected rows when using the text protocol. The collected statistics were wrong when multi_query was used with mysqlnd (Andrey)
-
(Connect Error from MySqli (mysqlnd) when using SSL). (Kalle)
-
(mysqli::query returns false after successful LOAD DATA query). (Kalle, Andrey)
-
(mysqli_real_connect() ignores client flags when built to call libmysql). (Kalle, tre-php-net at crushedhat dot com)
-
-
-
-
OpenSSL extension:
-
-
Fixed stream_socket_enable_crypto() not honoring the socket timeout in server mode. (Gustavo)
-
(Memory leaks when openssl_encrypt). (Pierre)
-
(Memory leaks when openssl_decrypt). (Pierre)
-
(stream_socket_enable_crypto() busy-waits in client mode). (Gustavo)
-
(Cannot disable SessionTicket extension for servers that do not support it) by adding a no_ticket SSL context option. (Adam, Tony)
-
-
-
-
PDO MySQL driver:
-
-
(PDOStatement execute segfaults for pdo_mysql driver). (Johannes)
-
(Support for setting character sets in DSN strings). (Kalle)
-
-
-
-
PDO Oracle driver:
-
-
(Cannot load Lob data with more than 4000 bytes on ORACLE 10). (spatar at mail dot nnov dot ru)
-
-
-
-
PDO PostgreSQL driver:
-
-
(segfault in pgsql_stmt_execute() when postgres is down). (gyp at balabit dot hu)
-
-
-
Phar extension:
-
-
(format-string vulnerability on Phar). (Felipe) (CVE-2011-1153)
-
(format string bug in ext/phar). (crrodriguez at opensuse dot org, Ilia)
-
(PHAR reports invalid error message, when the directory does not exist). (Ilia)
-
-
-
-
PHP-FPM SAPI:
-
-
Enforce security in the fastcgi protocol parsing. (ef-lists at email dotde)
-
(php-fpm log format now match php_error log format). (fat)
-
(php-fpm --test doesn't set a valuable return value). (fat)
-
(php-fpm slowlog now also logs the original request). (fat)
-
-
-
-
Readline extension:
-
-
(Fixed parameter handling inside readline() function). (jo at feuersee dot de, Ilia)
-
-
-
-
Reflection extension:
-
-
(ReflectionClass::getConstant(s) emits fatal error on constants with self::). (Gustavo)
-
-
-
-
Shmop extension:
-
-
(Integer overflow in shmop_read()). (Felipe) Reported by Jose Carlos Norte (CVE-2011-1092)
-
-
-
-
SNMP extension:
-
-
(snmprealwalk (snmp v1) does not handle end of OID tree correctly). (Boris Lytochkin)
-
-
-
-
SOAP extension:
-
-
Fixed possible crash introduced by the NULL poisoning patch. (Mateusz Kocielski, Pierre)
-
-
-
-
SPL extension:
-
-
Fixed memory leak in DirectoryIterator::getExtension() and SplFileInfo::getExtension(). (Felipe)
-
(SPL assumes HAVE_GLOB is defined). (Chris Jones)
-
(property_exists incorrect on ArrayObject null and 0 values). (Felipe)
Fixed symbolic resolution support when the target is a DFS share. (Pierre)
-
(Segfault in filter_var with FILTER_VALIDATE_EMAIL with
- large amount of data) (CVE-2010-3710). (Adam)
-
-
-
-
General improvements:
-
-
Added stat support for zip stream. (Pierre)
-
Added follow_location (enabled by default) option for the http stream
- support. (Pierre)
-
Improved support for is_link and related functions on Windows. (Pierre)
-
Added a 3rd parameter to get_html_translation_table. It now takes a charset
- hint, like htmlentities et al. (Gustavo)
-
-
-
Implemented feature requests:
-
-
, added new constant ZEND_MULTIBYTE to detect
- zend multibyte at runtime. (Kalle)
-
, added functions pcntl_get_last_error() and
- pcntl_strerror(). (nick dot telford at gmail dot com, Arnaud)
-
Implemented symbolic links support for open_basedir checks. (Pierre)
-
, SplFileInfo::getLinkTarget on Windows. (Pierre)
-
, not uploaded files don't count towards
- max_file_uploads limit. As a side improvement, temporary files are not opened
- for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
-
-
-
Improved MySQLnd:
-
-
Added new character sets to mysqlnd, which are available in MySQL 5.5
- (Andrey)
-
-
-
Improved PHP-FPM SAPI:
-
-
Added '-p/--prefix' to php-fpm to use a custom prefix and run multiple
- instances. (fat)
-
Added custom process title for FPM. (fat)
-
Added '-t/--test' to php-fpm to check and validate FPM conf file. (fat)
-
Added statistics about listening socket queue length for FPM.
- (andrei dot nigmatulin at gmail dot com, fat)
-
-
-
Core:
-
-
Fixed extract() to do not overwrite $GLOBALS and $this when using
- EXTR_OVERWRITE. (jorto at redhat dot com)
-
Fixed bug in the Windows implementation of dns_get_record, where the two
- last parameters wouldn't be filled unless the type were DNS_ANY (Gustavo).
-
Changed the $context parameter on copy() to actually have an effect. (Kalle)
-
Fixed htmlentities/htmlspecialchars accepting certain ill-formed UTF-8
- sequences. (Gustavo)
-
(sleep() returns NULL on Windows). (Pierre)
-
(strip_tags() may strip '<br />' incorrectly). (Felipe)
-
(quot_print_decode does not handle lower-case hex digits).
- (Ilia, daniel dot mueller at inexio dot net)
(changing INI setting "from" with ini_set did not have any
- effect). (Gustavo)
-
(post_max_size=0 not disabling the limit when the content
- type is application/x-www-form-urlencoded or is not registered with PHP).
- (gm at tlink dot de, Gustavo)
-
(autoload misbehaves if called from closing session).
- (ladislav at marek dot su)
-
(In html_entity_decode, failure to convert numeric entities
- with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of ENT_NOQUOTES
- in html_entity_decode that had introduced the bug (rev #185591) to other
- encodings. Additionaly, html_entity_decode() now doesn't decode " if
- ENT_NOQUOTES is given. (Gustavo)
-
(strripos not overloaded with function overloading enabled).
- (Felipe)
-
(var_dump() doesn't check for the existence of
- get_class_name before calling it). (Kalle, Gustavo)
-
(var_export array with negative key). (Felipe)
-
(base64_decode() improper handling of leading padding in
- strict mode). (Ilia)
-
(dns_get_record fails with non-existing domain on Windows).
- (a_jelly_doughnut at phpbb dot com, Pierre)
-
(socket will not connect to IPv4 address when the host has
- both IPv4 and IPv6 addresses, on Windows). (Gustavo, Pierre)
-
(proc_open on Windows does not respect cwd as it does on
- other platforms). (Pierre)
-
(utf8_decode vulnerabilities and deficiencies in the number
- of reported malformed sequences). (CVE-2010-3870) (Gustavo)
(php -i has different output to php --ini). (Richard,
- Pierre)
-
(array_diff() takes over 3000 times longer than php 5.2.4).
- (Felipe)
-
(printf of floating point variable prints maximum of 40
- decimal places). (Ilia)
-
(mt_rand() does not check that max is greater than min).
- (Ilia)
-
(bad default include_path on Windows). (Pierre)
-
(get_html_translation_table calls the ' ' instead of
- '). (Gustavo)
-
-
-
Zend engine:
-
-
Reverted fix for bug (Static calling in non-static method behaves
- like $this->). (Felipe)
-
Changed deprecated ini options on startup from E_WARNING to E_DEPRECATED.
- (Kalle)
-
Fixed NULL dereference in lex_scan on zend multibyte builds where the script
- had a flex incompatible encoding and there was no converter. (Gustavo)
-
Fixed covariance of return-by-ref constraints. (Etienne)
-
(E_NOTICE when defining a constant starts with
- __COMPILER_HALT_OFFSET__). (Felipe)
-
(zend_call_function does not respect ZEND_SEND_PREFER_REF).
- (Dmitry)
-
(Objects unreferenced in __get, __set, __isset or __unset
- can be freed too early). (mail_ben_schmidt at yahoo dot com dot au, Dmitry)
-
(PHP should reset section to [PHP] after ini sections).
- (Fedora at famillecollet dot com)
-
(newline problem with parse_ini_file+INI_SCANNER_RAW).
- (Felipe)
-
(__set() ignores setting properties with empty names).
- (Felipe)
-
(Throwing an exception in a destructor causes invalid
- catching). (Dmitry)
-
(Zend/tests/bug45877.phpt fails). (Dmitry)
-
-
-
Build issues:
-
-
(Compile error if systems do not have stdint.h)
- (Sriram Natarajan)
-
(nanosleep not detected properly on some solaris versions).
- (Ulf, Tony)
-
(make fails on glob_wrapper). (Felipe)
-
-
-
Calendar extension:
-
-
(cal_days_in_month incorrect for December 1 BCE).
- (gpap at internet dot gr, Adam)
-
-
-
cURL extension:
-
-
(curl_setopt does not accept persistent streams).
- (Gustavo, Ilia)
-
(cURL leaks handle and causes assertion error
- (CURLOPT_STDERR)). (Gustavo)
-
(CURLOPT_PRIVATE gets corrupted). (Ilia)
-
(curl extension slows down PHP on Windows). (Pierre)
-
-
-
DateTime extension:
-
-
(gettimeofday implementation in php/win32/time.c can return
- 1 million microsecs). (ped at 7gods dot org)
-
(Iterating over a dateperiod twice is broken). (Derick)
-
(Relative dates and getTimestamp increments by one day).
- (Derick)
-
(date_parse parse 24:xx:xx as valid time). (Derick)
-
Added support for the ( and ) delimiters/separators to
- DateTime::createFromFormat(). (Derick)
-
-
-
DBA extension:
-
-
Added Berkeley DB 5.1 support to the DBA extension. (Oracle Corp.)
-
-
-
DOM extension:
-
-
(DOMCdataSection does not work with splitText). (Ilia)
-
-
-
Filter extension:
-
-
Fixed the filter extension accepting IPv4 octets with a leading 0 as that
- belongs to the unsupported "dotted octal" representation. (Gustavo)
-
(problems in the validation of IPv6 addresses with leading
- and trailing :: in the filter extension). (Gustavo)
-
(problems in the validation of IPv6 addresses with IPv4
- addresses and ::). (Gustavo)
-
-
-
GD extension:
-
-
(fix crash if anti-aliasing steps are invalid). (Pierre)
-
-
-
GMP extension:
-
-
(gmp_mod returns negative result when non-negative is
- expected). (Stas)
-
(GNU MP invalid version match). (Adam)
-
-
-
Hash extension:
-
-
(unaligned memory access in ext/hash/hash_tiger.c).
- (Mike, Ilia)
-
-
-
Iconv extension:
-
-
(The 'iconv_mime_decode_headers' function is skipping
- headers). (Adam)
-
(iconv output handler outputs incorrect content type
- when flags are used). (Ilia)
-
(iconv_mime_decode() does not ignore malformed Q-encoded
- words). (Ilia)
-
-
-
Intl extension:
-
-
Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409). (Stas, Maksymilian
- Arciemowicz)
-
Added support for formatting the timestamp stored in a DateTime object.
- (Stas)
-
(IntlDateFormatter::parse result is limited to the integer
- range). (Stas)
-
-
-
Mbstring extension:
-
-
(mb_strcut() returns garbage with the excessive length
- parameter). (CVE-2010-4156) (Mateusz Kocielski, Pierre, Moriyoshi)
-
(Unicode casing table was out-of-date. Updated with
- UnicodeData-6.0.0d7.txt and included the source of the generator program with
- the distribution) (Gustavo).
-
(mb_send_mail() appends an extra MIME-Version header).
- (Adam)
-
-
-
MSSQL extension:
-
-
Fixed possible crash in mssql_fetch_batch(). (Kalle)
-
(Segfault when optional parameters are not passed in to
- mssql_connect). (Felipe)
-
-
-
MySQL extension:
-
-
(php_mysql_fetch_hash writes long value into int).
- (Kalle, rein at basefarm dot no)
-
-
-
MySQLi extension:
-
-
(Wrong data inserted with mysqli/mysqlnd when using
- mysqli_stmt_bind_param and value> PHP_INT_MAX). (Andrey)
-
(mysql_stmt_attr_[gs]et argument points to incorrect type).
- (rein at basefarm dot no)
-
(mysqli doesn't install headers with structures it uses).
- (Andrey)
-
(Call to undefined method mysqli::poll() - must be static).
- (Andrey)
-
(MySQLi build failure with mysqlnd on MacOS X). (Andrey)
-
(MySQLi/libmysql build failure on OS X, FreeBSD). (Andrey)
-
(mysqli_report() should be per-request setting). (Kalle)
-
(mysqli_fetch_all does not work with MYSQLI_USE_RESULT).
- (Andrey)
-
(Misbehaviour of magic_quotes_runtime (get/set)). (Andrey)
-
(Can't initialize character set hebrew). (Andrey)
-
-
-
MySQLnd:
-
-
(crash in mysqlnd after hitting memory limit). (Andrey)
-
-
-
ODBC extension:
-
-
(Broken error handling in odbc_execute).
- (mkoegler at auto dot tuwien dot ac dot at)
-
-
-
Openssl extension:
-
-
Fixed possible blocking behavior in openssl_random_pseudo_bytes on Windows.
- (Pierre)
-
(Invalid read on openssl_csr_new()). (Felipe)
-
(segfault when ssl stream option capture_peer_cert_chain
- used). (Felipe)
-
-
-
Oracle Database extension (OCI8):
-
-
(Valgrind warnings in oci_set_* functions) (Oracle Corp.)
-
(Using oci_connect causes PHP to take a long time to
- exit). Requires Oracle 11.2.0.2 client libraries (or Oracle bug fix
- 9891199) for this patch to have an effect. (Oracle Corp.)
-
-
-
PCNTL extension:
-
-
(Race condition when handling many concurrent signals).
- (nick dot telford at gmail dot com, Arnaud)
-
-
-
PCRE extension:
-
-
(PCRE-Meta-Characters not working with utf-8). (Felipe)
-
(Docs say preg_match() returns FALSE on error, but it
- returns int(0)). (slugonamission at gmail dot com)
-
-
-
PHAR extension:
-
-
(unaligned memory access in phar.c).
- (geissert at debian dot org, Ilia)
-
-
-
PHP-FPM SAPI:
-
-
(segfault when using -y). (fat)
-
Fixed inconsistent backlog default value (-1) in FPM on many systems. (fat)
-
(libevent made FPM crashed when forking - libevent has
- been removed). (fat)
-
(gcc builtin atomic functions were sometimes used when they
- were not available). (fat)
-
(configuration file errors are not logged to stderr). (fat)
-
(FPM Status page returns inconsistent Content-Type headers).
- (fat)
-
(libevent was not only linked to php-fpm). (fat)
-
-
-
PDO:
-
-
(PDO bindValue writes long int 32bit enum).
- (rein at basefarm dot no)
-
(PDO::FETCH_INTO leaks memory). (Felipe)
-
-
-
PDO DBLib driver:
-
-
(pdo_dblib segmentation fault when iterating MONEY values).
- (Felipe)
-
-
-
PDO Firebird driver:
-
-
Restored firebird support (VC9 builds only). (Pierre)
-
(pdo_firebird did not implement rowCount()).
- (preeves at ibphoenix dot com)
-
(pdo_firebird getAttribute() crash).
- (preeves at ibphoenix dot com)
-
-
-
PDO MySQL driver:
-
-
(Binding params doesn't work when selecting a date inside a
- CASE-WHEN). (Andrey)
-
-
-
PostgreSQL extension:
-
-
(pg_delete() fails on NULL). (ewgraf at gmail dot com)
-
-
-
Reflection extension:
-
-
Fixed ReflectionProperty::isDefault() giving a wrong result for properties
- obtained with ReflectionClass::getProperties(). (Gustavo)
-
(Reflection doesnt get dynamic property value from
- getProperty()). (Felipe)
-
(ReflectionClass::newInstanceArgs does not work for classes
- without constructors). (Johannes)
-
-
-
SOAP extension:
-
-
(RFC2616 transgression while HTTPS request through proxy
- with SoapClient object). (Dmitry)
-
-
-
SPL extension:
-
-
(Segmentation fault when extending SplFixedArray). (Felipe)
(SplFileInfo::getType() does not work symbolic link
- and directory). (Pierre)
-
(Storing many SPLFixedArray in an array crashes). (Felipe)
-
(RegexIterator::REPLACE doesn't work). (Felipe)
-
-
-
SQLite3 extension:
-
-
(sqlite3 columnName() segfaults on bad column_number).
- (Felipe)
-
-
-
Streams:
-
-
Fixed forward stream seeking emulation in streams that don't support seeking
- in situations where the read operation gives back less data than requested
- and when there was data in the buffer before the emulation started. Also made
- more consistent its behavior -- should return failure every time less data
- than was requested was skipped. (Gustavo)
-
(stream casting that relies on fdopen/fopencookie fails
- with streams opened with, inter alia, the 'xb' mode). (Gustavo)
-
(stream_get_contents has an unpredictable behavior when the
- underlying stream does not support seeking). (Gustavo)
-
(Invalid write on second and subsequent reads with an
- inflate filter fed invalid data). (Gustavo)
-
(writes to fopencookie FILE* not commited when seeking the
- stream). (Gustavo)
-
-
-
WDDX extension:
-
-
(wddx_deserialize corrupts integer field value when left
- empty). (Felipe)
-
-
-
Zlib extension:
-
-
(zlib fopen wrapper does not use context). (Gustavo)
-
-
-
-
-
-
-
-
Version 5.3.3
-
-
-
Upgraded bundled sqlite to version 3.6.23.1. (Ilia)
-
Upgraded bundled PCRE to version 8.02. (Ilia)
-
-
-
Added support for JSON_NUMERIC_CHECK option in json_encode() that converts numeric strings to integers. (Ilia)
-
Added stream_set_read_buffer, allows to set the buffer for read operation. (Pierre)
-
Added stream filter support to mcrypt extension (ported from mcrypt_filter). (Stas)
-
Added full_special_chars filter to ext/filter. (Rasmus)
-
Added backlog socket context option for stream_socket_server(). (Mike)
-
Added fifth parameter to openssl_encrypt()/openssl_decrypt() (string $iv) to use non-NULL IV.
- Made implicit use of NULL IV a warning. (Sara)
-
Added openssl_cipher_iv_length(). (Sara)
-
Added FastCGI Process Manager (FPM) SAPI. (Tony)
-
Added recent Windows versions to php_uname and fix undefined windows version support. (Pierre)
-
Added Berkeley DB 5 support to the DBA extension. (Johannes, Chris Jones)
-
Added support for copy to/from array/file for pdo_pgsql extension. (Denis Gasparin, Ilia)
-
Added inTransaction() method to PDO, with specialized support for Postgres. (Ilia, Denis Gasparin)
-
-
-
Changed namespaced classes so that the ctor can only be named __construct now. (Stas)
-
Reset error state in PDO::beginTransaction() reset error state. (Ilia)
-
-
-
(SQLite3::busyTimeout not existing). (Mark)
-
(Adding udate to imap_fetch_overview results). (Charles_Duffy at dell dot com )
-
Rewrote var_export() to use smart_str rather than output buffering, prevents data disclosure if a fatal error occurs (CVE-2010-2531). (Scott)
-
Fixed possible buffer overflows in mysqlnd_list_fields, mysqlnd_change_user. (Andrey)
-
Fixed possible buffer overflows when handling error packets in mysqlnd. Reported by Stefan Esser. (Andrey)
-
Fixed very rare memory leak in mysqlnd, when binding thousands of columns. (Andrey)
-
Fixed a crash when calling an inexistent method of a class that inherits PDOStatement if instantiated directly instead of doing by the PDO methods. (Felipe)
-
-
-
Fixed memory leak on error in mcrypt_create_iv on Windows. (Pierre)
-
Fixed a possible crash because of recursive GC invocation. (Dmitry)
-
Fixed a possible resource destruction issues in shm_put_var(). Reported by Stefan Esser. (Dmitry)
-
Fixed a possible information leak because of interruption of XOR operator. Reported by Stefan Esser. (Dmitry)
-
Fixed a possible memory corruption because of unexpected call-time pass by refernce and following memory clobbering through callbacks.
- Reported by Stefan Esser. (Dmitry)
-
Fixed a possible memory corruption in ArrayObject::uasort(). Reported by Stefan Esser. (Dmitry)
-
Fixed a possible memory corruption in parse_str(). Reported by Stefan Esser. (Dmitry)
-
Fixed a possible memory corruption in pack(). Reported by Stefan Esser. (Dmitry)
-
Fixed a possible memory corruption in substr_replace(). Reported by Stefan Esser. (Dmitry)
-
Fixed a possible memory corruption in addcslashes(). Reported by Stefan Esser. (Dmitry)
-
Fixed a possible stack exhaustion inside fnmatch(). Reported by Stefan Esser. (Ilia)
-
Fixed a possible dechunking filter buffer overflow. Reported by Stefan Esser. (Pierre)
-
Fixed a possible arbitrary memory access inside sqlite extension. Reported by Mateusz Kocielski. (Ilia)
-
Fixed string format validation inside phar extension. Reported by Stefan Esser. (Ilia)
-
Fixed handling of session variable serialization on certain prefix characters. Reported by Stefan Esser. (Ilia)
-
Fixed a NULL pointer dereference when processing invalid XML-RPC requests (Fixes CVE-2010-0397, bug ). (Raphael Geissert)
-
Fixed 64-bit integer overflow in mhash_keygen_s2k(). (Clément LECIGNE, Stas)
(extract() problem with array containing word "this"). (Ilia, chrisstocktonaz at gmail dot com)
-
($php_errormsg is limited in size of characters) (Oracle Corp.)
-
(htmlentities() uses obsolete mapping table for character entity references). (Moriyoshi)
-
(strip_tags() truncates rest of string with invalid attribute). (Ilia, hradtke)
-
(PDOStatement->execute() returns true then false for same statement). (Pierrick)
-
(define() allows :: in constant names). (Ilia)
-
(imap_utf8() returns only capital letters). (steffen at dislabs dot de, Pierre)
-
(Failure in odbc_exec() using oracle-supplied odbc driver). (tim dot tassonis at trivadis dot com)
-
-
-
-
-
Version 5.3.1
-
-
-
Security Fixes
-
-
Added "max_file_uploads" INI directive, which can be set to limit the number of file uploads per-request to 20 by default, to prevent possible DOS via temporary file exhaustion. (Ilia)
-
Added missing sanity checks around exif processing. (Ilia)
-
Fixed a safe_mode bypass in tempnam(). (Rasmus)
-
Fixed a open_basedir bypass in posix_mkfifo(). (Rasmus)
-
(safe_mode_include_dir fails). (Johannes, christian at elmerot dot se)
-
-
-
-
Added error constant when json_encode() detects an invalid UTF-8 sequence. (Scott)
-
Added support for ACL on Windows for thread safe SAPI (Apache2 for example) and fix its support on NTS. (Pierre)
-
-
Upgraded bundled sqlite to version 3.6.19. (Scott)
-
Updated timezone database to version 2009.17 (2009q). (Derick)
-
-
Fixed crash in com_print_typeinfo when an invalid typelib is given. (Pierre)
-
Fixed a safe_mode bypass in tempnam() identified by Grzegorz Stachowiak. (Rasmus)
-
Fixed a open_basedir bypass in posix_mkfifo() identified by Grzegorz Stachowiak. (Rasmus)
(php_uname() does not return nodename on Netware (Guenter Knauf)
-
(Mail() does not use FQDN when sending SMTP helo). (Kalle, Rick Yorgason)
-
(Sent incorrect RCPT TO commands to SMTP server) (Garrett)
-
(Impersonation with FastCGI does not exec process as impersonated user). (Pierre)
-
(oci_error return false when NO_DATA_FOUND is raised). (Chris Jones)
-
-
-
-
-
-
Version 5.3.0
-
-
-
-
Upgraded bundled PCRE to version 7.9. (Nuno)
-
Upgraded bundled sqlite to version 3.6.15. (Scott)
-
-
Moved extensions to PECL (Derick, Lukas, Pierre, Scott):
-
-
ext/dbase
-
ext/fbsql
-
ext/fdf
-
ext/ncurses
-
ext/mhash (BC layer is now entirely within ext/hash)
-
ext/ming
-
ext/msql
-
ext/sybase (not maintained anymore, sybase_ct has to be used instead)
-
-
-
-
Removed the experimental RPL (master/slave) functions from mysqli. (Andrey)
-
Removed zend.ze1_compatibility_mode. (Dmitry)
-
Removed all zend_extension_* php.ini directives. Zend extensions are now
- always loaded using zend_extension directive. (Derick)
-
Removed special treatment of "/tmp" in sessions for open_basedir.
- Note: This undocumented behaviour was introduced in 5.2.2. (Alexey)
-
Removed shebang line check from CGI sapi (checked by scanner). (Dmitry)
-
-
Changed PCRE, Reflection and SPL extensions to be always enabled. (Marcus)
-
Changed md5() to use improved implementation. (Solar Designer, Dmitry)
-
Changed HTTP stream wrapper to accept any code between and including
- 200 to 399 as successful. (Mike, Noah Fontes)
-
Changed __call() to be invoked on private/protected method access, similar to
- properties and __get(). (Andrei)
-
Changed dl() to be disabled by default. Enabled only when explicitly
- registered by the SAPI. Currently enabled with cli, cgi and embed SAPIs.
- (Dmitry)
-
Changed opendir(), dir() and scandir() to use default context when no context
- argument is passed. (Sara)
-
Changed open_basedir to allow tightening in runtime contexts. (Sara)
-
Changed PHP/Zend extensions to use flexible build IDs. (Stas)
-
Changed error level E_ERROR into E_WARNING in Soap extension methods
- parameter validation. (Felipe)
-
Changed openssl info to show the shared library version number. (Scott)
-
Changed floating point behaviour to consistently use double precision on all
- platforms and with all compilers. (Christian Seiler)
-
Changed round() to act more intuitively when rounding to a certain precision
- and round very large and very small exponents correctly. (Christian Seiler)
-
Changed session_start() to return false when session startup fails. (Jani)
-
Changed property_exists() to check the existence of a property independent of
- accessibility (like method_exists()). (Felipe)
-
Changed array_reduce() to allow mixed $initial (Christian Seiler)
-
-
Improved PHP syntax and semantics:
-
-
Added lambda functions and closures. (Christian Seiler, Dmitry)
Added HEREDOC syntax with double quotes. (Lars Strojny, Felipe)
-
Added support for using static HEREDOCs to initialize static variables and
- class members or constants. (Matt)
-
Improved syntax highlighting and consistency for variables in double-quoted
- strings and literal text in HEREDOCs and backticks. (Matt)
-
Added "?:" operator. (Marcus)
-
Added support for namespaces. (Dmitry, Stas, Gregory, Marcus)
-
Added support for Late Static Binding. (Dmitry, Etienne Kneuss)
-
Added support for __callStatic() magic method. (Sara)
-
Added forward_static_call(_array) to complete LSB. (Mike Lively)
-
Added support for dynamic access of static members using $foo::myFunc().
- (Etienne Kneuss)
-
Improved checks for callbacks. (Marcus)
-
Added __DIR__ constant. (Lars Strojny)
-
Added new error modes E_USER_DEPRECATED and E_DEPRECATED.
- E_DEPRECATED is used to inform about stuff being scheduled for removal
- in future PHP versions. (Lars Strojny, Felipe, Marcus)
-
Added "request_order" INI variable to control specifically $_REQUEST
- behavior. (Stas)
-
Added support for exception linking. (Marcus)
-
Added ability to handle exceptions in destructors. (Marcus)
-
-
-
-
Improved PHP runtime speed and memory usage:
-
-
Substitute global-scope, persistent constants with their values at compile
- time. (Matt)
-
Optimized ZEND_SIGNED_MULTIPLY_LONG(). (Matt)
-
Removed direct executor recursion. (Dmitry)
-
Use fastcall calling convention in executor on x86. (Dmitry)
-
Use IS_CV for direct access to $this variable. (Dmitry)
-
Use ZEND_FREE() opcode instead of ZEND_SWITCH_FREE(IS_TMP_VAR). (Dmitry)
Optimized ZEND_RETURN opcode to not allocate and copy return value if it is
- not used. (Dmitry)
-
Replaced all flex based scanners with re2c based scanners.
- (Marcus, Nuno, Scott)
-
Added garbage collector. (David Wang, Dmitry).
-
Improved PHP binary size and startup speed with GCC4 visibility control.
- (Nuno)
-
Improved engine stack implementation for better performance and stability.
- (Dmitry)
-
Improved memory usage by moving constants to read only memory.
- (Dmitry, Pierre)
-
Changed exception handling. Now each op_array doesn't contain
- ZEND_HANDLE_EXCEPTION opcode in the end. (Dmitry)
-
Optimized require_once() and include_once() by eliminating fopen(3) on
- second usage. (Dmitry)
-
Optimized ZEND_FETCH_CLASS + ZEND_ADD_INTERFACE into single
- ZEND_ADD_INTERFACE opcode. (Dmitry)
-
Optimized string searching for a single character.
- (Michal Dziemianko, Scott)
-
Optimized interpolated strings to use one less opcode. (Matt)
-
-
-
-
Improved php.ini handling: (Jani)
-
-
Added ".htaccess" style user-defined php.ini files support for CGI/FastCGI.
-
Added support for special [PATH=/opt/httpd/www.example.com/] and
- [HOST=www.example.com] sections. Directives set in these sections can
- not be overridden by user-defined ini-files or during runtime.
-
Added better error reporting for php.ini syntax errors.
-
Allowed using full path to load modules using "extension" directive.
-
Allowed "ini-variables" to be used almost everywhere ini php.ini files.
-
Allowed using alphanumeric/variable indexes in "array" ini options.
-
Added 3rd optional parameter to parse_ini_file() to specify the scanning
- mode of INI_SCANNER_NORMAL or INI_SCANNER_RAW. In raw mode option values
- and section values are treated as-is.
-
Fixed get_cfg_var() to be able to return "array" ini options.
-
Added optional parameter to ini_get_all() to only retrieve the current
- value. (Hannes)
-
-
-
-
Improved Windows support:
-
-
Update all libraries to their latest stable version. (Pierre, Rob, Liz,
- Garrett).
-
Added Windows support for stat(), touch(), filemtime(), filesize() and
- related functions. (Pierre)
-
Re-added socket_create_pair() for Windows in sockets extension. (Kalle)
-
Added inet_pton() and inet_ntop() also for Windows platforms.
- (Kalle, Pierre)
-
Added mcrypt_create_iv() for Windows platforms. (Pierre)
-
Added ACL Cache support on Windows.
- (Kanwaljeet Singla, Pierre, Venkat Raman Don)
-
Added constants based on Windows' GetVersionEx information.
- PHP_WINDOWS_VERSION_* and PHP_WINDOWS_NT_*. (Pierre)
-
Added support for ACL (is_writable, is_readable, reports now correct
- results) on Windows. (Pierre, Venkat Raman Don, Kanwaljeet Singla)
-
Added support for fnmatch() on Windows. (Pierre)
-
Added support for time_nanosleep() and time_sleep_until() on Windows.
- (Pierre)
-
Added support for symlink(), readlink(), linkinfo() and link() on Windows.
- They are available only when the running platform supports them. (Pierre)
-
the GMP extension now relies on MPIR instead of the GMP library. (Pierre)
-
Added Windows support for stream_socket_pair(). (Kalle)
-
Drop all external dependencies for the core features. (Pierre)
-
Drastically improve the build procedure (Pierre, Kalle, Rob):
-
-
VC9 (Visual C++ 2008) or later support
-
Initial experimental x64 support
-
-
-
MSI installer now supports all recent Windows versions, including
- Windows 7. (John, Kanwaljeet Singla)
-
-
-
-
Improved and cleaned CGI code:
-
-
FastCGI is now always enabled and cannot be disabled.
- See sapi/cgi/CHANGES for more details. (Dmitry)
-
Added CGI SAPI -T option which can be used to measure execution
- time of script repeated several times. (Dmitry)
-
-
-
-
Improved streams:
-
-
Fixed confusing error message on failure when no errors are logged. (Greg)
Added context parameter for copy() function. (Sara)
-
Added "glob://" stream wrapper. (Marcus)
-
Added "params" as optional parameter for stream_context_create(). (Sara)
-
Added ability to use stream wrappers in include_path. (Gregory, Dmitry)
-
-
-
-
Improved DNS API
-
-
Added Windows support for dns_check_record(), dns_get_mx(), checkdnsrr() and
- getmxrr(). (Pierre)
-
Added support for old style DNS functions (supports OSX and FBSD). (Scott)
-
Added a new "entries" array in dns_check_record() containing the TXT
- elements. (Felipe, Pierre)
-
-
-
-
Improved hash extension:
-
-
Changed mhash to be a wrapper layer around the hash extension. (Scott)
-
Added hash_copy() function. (Tony)
-
Added sha224 hash algorithm to the hash extension. (Scott)
-
-
-
-
Improved IMAP support (Pierre):
-
-
Added imap_gc() to clear the imap cache
-
Added imap_utf8_to_mutf7() and imap_mutf7_to_utf8()
-
-
-
-
Improved mbstring extension:
-
-
Added "mbstring.http_output_conv_mimetypes" INI directive that allows
- common non-text types such as "application/xhtml+xml" to be converted
- by mb_output_handler(). (Moriyoshi)
Added "compact" handler for Zend MM storage. (Dmitry)
-
Added "+" and "*" specifiers to zend_parse_parameters(). (Andrei)
-
Added concept of "delayed early binding" that allows opcode caches to
- perform class declaration (early and/or run-time binding) in exactly
- the same order as vanilla PHP. (Dmitry)
-
-
-
-
Improved crypt() function: (Pierre)
-
-
Added Blowfish and extended DES support. (Using Blowfish implementation
- from Solar Designer).
-
Made crypt features portable by providing our own implementations
- for crypt_r and the algorithms which are used when OS does not provide
- them. PHP implementations are always used for Windows builds.
-
-
-
-
Deprecated session_register(), session_unregister() and
- session_is_registered(). (Hannes)
-
Deprecated define_syslog_variables(). (Kalle)
-
Deprecated ereg extension. (Felipe)
-
-
Added new extensions:
-
-
Added Enchant extension as a way to access spell checkers. (Pierre)
-
Added fileinfo extension as replacement for mime_magic extension. (Derick)
-
Added intl extension for Internationalization. (Ed B., Vladimir I.,
- Dmitry L., Stanislav M., Vadim S., Kirti V.)
-
Added mysqlnd extension as replacement for libmysql for ext/mysql, mysqli
- and PDO_mysql. (Andrey, Johannes, Ulf)
-
Added phar extension for handling PHP Archives. (Greg, Marcus, Steph)
-
Added SQLite3 extension. (Scott)
-
-
-
-
Added new date/time functionality: (Derick)
-
-
date_parse_from_format(): Parse date/time strings according to a format.
-
date_create_from_format()/DateTime::createFromFormat(): Create a date/time
- object by parsing a date/time string according to a given format.
-
date_get_last_errors()/DateTime::getLastErrors(): Return a list of warnings
- and errors that were found while parsing a date/time string through:
-
support for abbreviation and offset based timezone specifiers for
- the 'e' format specifier, DateTime::__construct(), DateTime::getTimeZone()
- and DateTimeZone::getName().
-
support for selectively listing timezone identifiers by continent or
- country code through timezone_identifiers_list() / DateTimezone::listIdentifiers().
-
timezone_location_get() / DateTimezone::getLocation() for retrieving
- location information from timezones.
-
date_timestamp_set() / DateTime::setTimestamp() to set a Unix timestamp
- without invoking the date parser. (Scott, Derick)
-
date_timestamp_get() / DateTime::getTimestamp() to retrieve the Unix
- timestamp belonging to a date object.
-
two optional parameters to timezone_transitions_get() /
- DateTimeZone::getTranstions() to limit the range of transitions being
- returned.
-
support for "first/last day of <month>" style texts.
-
support for date/time strings returned by MS SQL.
-
support for serialization and unserialization of DateTime objects.
-
support for diffing date/times through date_diff() / DateTime::diff().
-
support for adding/subtracting weekdays with strtotime() and
- DateTime::modify().
-
DateInterval class to represent the difference between two date/times.
-
support for parsing ISO intervals for use with DateInterval.
-
date_add() / DateTime::add(), date_sub() / DateTime::sub() for applying an
- interval to an existing date/time.
-
proper support for "this week", "previous week"/"last week" and "next week"
- phrases so that they actually mean the week and not a seven day period
- around the current day.
-
support for "<xth> <weekday> of" and "last <weekday> of" phrases to be used
- with months - like in "last saturday of februari 2008".
-
support for "back of <hour>" and "front of <hour>" phrases that are used in
- Scotland.
-
DatePeriod class which supports iterating over a DateTime object applying
- DateInterval on each iteration, up to an end date or limited by maximum
- number of occurences.
-
-
-
-
Added compatibility mode in GD, imagerotate, image(filled)ellipse
- imagefilter, imageconvolution and imagecolormatch are now always enabled.
- (Pierre)
-
Added array_replace() and array_replace_recursive() functions. (Matt)
-
Added ReflectionProperty::setAccessible() method that allows non-public
- property's values to be read through ::getValue() and set through
- ::setValue(). (Derick, Sebastian)
-
Added msg_queue_exists() function to sysvmsg extension. (Benjamin Schulz)
-
Added Firebird specific attributes that can be set via PDO::setAttribute()
- to control formatting of date/timestamp columns: PDO::FB_ATTR_DATE_FORMAT,
- PDO::FB_ATTR_TIME_FORMAT and PDO::FB_ATTR_TIMESTAMP_FORMAT. (Lars W)
-
Added gmp_testbit() function. (Stas)
-
Added icon format support to getimagesize(). (Scott)
-
Added LDAP_OPT_NETWORK_TIMEOUT option for ldap_set_option() to allow
- setting network timeout (FR ). (Jani)
-
Added optional escape character parameter to fgetcsv(). (David Soria Parra)
-
Added an optional parameter to strstr() and stristr() for retrieval of either
- the part of haystack before or after first occurrence of needle.
- (Johannes, Felipe)
-
Added xsl->setProfiling() for profiling stylesheets. (Christian)
-
Added long-option feature to getopt() and made getopt() available also on
- win32 systems by adding a common getopt implementation into core.
- (David Soria Parra, Jani)
-
Added support for optional values, and = as separator, in getopt(). (Hannes)
-
Added lcfirst() function. (David C)
-
Added PREG_BAD_UTF8_OFFSET_ERROR constant. (Nuno)
-
Added native support for asinh(), acosh(), atanh(), log1p() and expm1().
- (Kalle)
-
Added LIBXML_LOADED_VERSION constant (libxml2 version currently used). (Rob)
-
Added JSON_FORCE_OBJECT flag to json_encode(). (Scott, Richard Quadling)
-
Added timezone_version_get() to retrieve the version of the used timezone
- database. (Derick)
-
Added 'n' flag to fopen to allow passing O_NONBLOCK to the underlying
- open(2) system call. (Mikko)
-
Added "dechunk" filter which can decode HTTP responses with chunked
- transfer-encoding. HTTP streams use this filter automatically in case
- "Transfer-Encoding: chunked" header is present in response. It's possible to
- disable this behaviour using "http"=>array("auto_decode"=>0) in stream
- context. (Dmitry)
-
Added support for CP850 encoding in mbstring extension.
- (Denis Giffeler, Moriyoshi)
-
Added stream_cast() and stream_set_options() to user-space stream wrappers,
- allowing stream_select(), stream_set_blocking(), stream_set_timeout() and
- stream_set_write_buffer() to work with user-space stream wrappers. (Arnaud)
-
Added header_remove() function. (chsc at peytz dot dk, Arnaud)
Fixed a possible stack exaustion inside fnmatch(). Reporeted by Stefan Esser (Ilia)
-
Reset error state in PDO::beginTransaction() reset error state. (Ilia)
-
Fixed a NULL pointer dereference when processing invalid XML-RPC requests (Fixes CVE-2010-0397, bug ). (Raphael Geissert)
-
Fixed handling of session variable serialization on certain prefix characters. Reported by Stefan Esser (Ilia)
-
Fixed a possible arbitrary memory access inside sqlite extension. Reported by Mateusz Kocielski. (Ilia)
-
Fixed a crash when calling an inexistent method of a class that inherits PDOStatement if instantiated directly instead of doing by the PDO methods. (Felipe)
-
-
-
(Segmentation fault when using mail() on a rhel 4.x (only 64 bit)). (Adam)
-
(Crash when an Exception occured in iterator_to_array). (Johannes)
-
(Crash when passing the reference of the property of a non-object). (Dmitry)
-
(SplFileObject::fgetss() fails due to parameter that can't be set). (Felipe)
-
(custom request header variables with numbers are removed). (Sriram Natarajan)
(Implementing Iterator and IteratorAggregate). (Etienne)
-
(SoapClient does not honor max_redirects). (Sriram)
-
(Content-type parameter "boundary" is not case-insensitive in HTTP uploads). (Ilia)
-
(defined() requires class to exist when testing for class constants). (Ilia)
-
(extract() problem with array containing word "this"). (Ilia, chrisstocktonaz at gmail dot com)
-
(Field truncation when reading from dbase dbs with more then 1024 fields). (Ilia, sjoerd-php at linuxonly dot nl)
-
(strip_tags() truncates rest of string with invalid attribute). (Ilia, hradtke)
-
(define() allows :: in constant names). (Ilia)
-
-
-
-
-
-
Version 5.2.12
-
-
-
Security Fixes
-
-
Fixed a safe_mode bypass in tempnam() identified by Grzegorz Stachowiak. (Rasmus)
-
Fixed a open_basedir bypass in posix_mkfifo() identified by Grzegorz Stachowiak. (Rasmus)
-
Added "max_file_uploads" INI directive, which can be set to limit the number of file uploads per-request to 20 by default, to prevent possible DOS via temporary file exhaustion. (Ilia)
-
Added protection for $_SESSION from interrupt corruption and improved "session.save_path" check, identified by Stefan Esser. (Stas)
-
(insufficient input string validation of htmlspecialchars()). (Moriyoshi, hello at iwamot dot com)
-
-
-
-
Updated timezone database to version 2009.19 (2009s). (Derick)
-
-
Added LIBXML_PARSEHUGE constant to overrides the maximum text size of a single text node when using libxml2.7.3+. (Kalle)
-
-
Changed "post_max_size" php.ini directive to allow unlimited post size by setting it to 0. (Rasmus)
-
-
Fixed error_log() to be binary safe when using message_type 3. (Jani)
-
Fixed unnecessary invocation of setitimer when timeouts have been disabled. (Arvind Srinivasan)
-
Fixed crash in com_print_typeinfo when an invalid typelib is given. (Pierre)
-
Fixed crash in SQLiteDatabase::ArrayQuery() and SQLiteDatabase::SingleQuery() when calling using Reflection. (Felipe)
-
Fixed crash when instantiating PDORow and PDOStatement through Reflection. (Felipe)
-
Fixed memory leak in openssl_pkcs12_export_to_file(). (Felipe)
-
-
(PDO-ODBC stored procedure call from Solaris 64-bit causes seg fault). (davbrown4 at yahoo dot com, Felipe)
-
(nanosleep not detected properly on some solaris versions). (Jani)
-
(Allow use of ; in values via ;; in PDO DSN). (Ilia, Pierrick)
-
(xmlrpc does not preserve keys in encoded indexed arrays). (Felipe)
-
(xmlrpc_encode_request() changes object into array in calling function). (Felipe)
-
(conflicting types for llabs). (Jani)
-
(isset() and empty() silently casts array to object). (Felipe)
-
(soap call Segmentation fault on a redirected url). (Pierrick)
-
(Compiling with libedit cannot find readline.h). (tcallawa at redhat dot com)
-
(segmentation fault when concatenating very large strings on 64bit linux). (Ilia)
-
(pg_copy_to() fails when table name contains schema. (Ilia)
-
(ldap_get_entries() return false instead of an empty array when there is no error). (Jani)
-
(Incorrectly matched docComment). (Felipe)
-
(FastCGI fails with wrong error on HEAD request to non-existent file). (Dmitry)
-
(Memory leak when fetching timestamp column from Oracle database). (Felipe)
-
(FILTER_VALIDATE_EMAIL fails with valid addresses containing = or ?). (Pierrick)
-
(parse_url() incorrect when ? in fragment). (Ilia)
-
(Segfault caused by uksort()). (Felipe)
-
(Throwing through Reflection modified Exception object makes segmentation fault). (Felipe)
-
(SNMP3 warning message about security level printed twice). (Jani)
(Sent incorrect RCPT TO commands to SMTP server) (Garrett)
-
-
-
-
-
-
-
Version 5.2.10
-
-
-
Security Fixes
-
-
(exif_read_data() segfaults on certain corrupted .jpeg files). (Pierre)
-
-
-
-
Updated timezone database to version 2009.9 (2009i) (Derick)
-
-
Added "ignore_errors" option to http fopen wrapper. (David Zulke, Sara)
-
Added new CURL options CURLOPT_REDIR_PROTOCOLS, CURLOPT_PROTOCOLS, and CURLPROTO_* for redirect fixes in CURL 7.19.4. (Yoram Bar Haim, Stas)
-
Added support for Sun CC (FR and FR ). (David Soria Parra)
-
-
Changed default value of array_unique()'s optional sorting type parameter back to SORT_STRING to fix backwards compatibility breakage introduced in PHP 5.2.9. (Moriyoshi)
-
-
Fixed memory corruptions while reading properties of zip files. (Ilia)
-
Fixed memory leak in ob_get_clean/ob_get_flush. (Christian)
-
Fixed segfault on invalid session.save_path. (Hannes)
-
Fixed leaks in imap when a mail_criteria is used. (Pierre)
-
Fixed missing erealloc() in fix for bug in spl_autoload_register. (Greg)
-
-
(Reference recursion causes segfault when used in wddx_serialize_vars()). (Felipe)
-
(Numeric string keys in Apache Hashmaps are not cast to integers). (David Zuelke)
-
(curl crashes when writing into invalid file handle). (Tony)
-
(cURL extension uses same resource name for simple and multi APIs). (Felipe)
-
(ldap_get_entries() leaks memory on empty search results). (Patrick)
-
(CPPFLAGS not restored properly in phpize.m4). (Jani, spisek at kerio dot com)
-
(Compile failure under IRIX 6.5.30 building cast.c). (Kalle)
-
(ldap_search() sizelimit, timelimit and deref options persist). (Patrick)
-
(Improve memory_get_usage() accuracy). (Arnaud)
-
(Force a cache limit in ereg() to stop excessive memory usage). (Scott)
-
(Crash when exception is thrown while passing function arguments). (Arnaud)
-
(exif_read_data() segfaults on certain corrupted .jpeg files). (Pierre)
-
(Script hangs on snmprealwalk if OID is not increasing). (Ilia, simonov at gmail dot com)
-
(ReflectionProperty::getDeclaringClass() does not work with redeclared property). (patch by Markus dot Lidel at shadowconnect dot com)
-
(constant MSG_DONTWAIT not defined). (Arnaud)
-
(fgetcsv() does not return null for empty rows). (Ilia)
-
(stream_copy_to_stream() and fpasstru() do not update stream position of plain files). (Arnaud)
-
(stream_copy_to_stream() copies 0 bytes when $source is a socket). (Arnaud)
-
(snmp*_real_walk() returns SNMP errors as values). (Ilia, lytboris at gmail dot com)
-
(Crash due to double-linking of history.o). (tstarling at wikimedia dot org)
-
(SIGSEGV when access to private property via &__get). (Felipe)
-
(Crash on errors during startup). (Stas)
-
(DBA Segmentation fault dba_nextkey). (Felipe)
-
(Incorrect shuffle in array_rand). (Etienne)
-
(memory leak when passing invalid xslt parameter). (Felipe)
-
(CURLOPT_(FILE|WRITEHEADER options do not error out when working with a non-writable stream). (Ilia)
-
(Iterating over an invalid data structure with RecursiveIteratorIterator leads to a segfault). (Scott)
-
(xmlwriter_open_uri() does not emit warnings on invalid paths). (Ilia)
-
(Crash when CURLOPT_STDERR is set to regular file). (Jani)
-
(Out of Memory error message when passing invalid file path) (Pierre)
-
(Added support for lcov v1.7). (Ilia)
-
(configure check for curl ssl support fails with --disable-rpath). (Jani)
-
(Don't try to bind ipv4 addresses to ipv6 ips via bindto). (Ilia)
-
(PDO_OCI: Segfault when using persistent connection). (Pierre, Matteo, jarismar dot php at gmail dot com)
-
(Year formatter goes wrong with out-of-int range). (Derick)
-
(odbc_execute changes variables used to form params array). (Felipe)
-
(stream_copy_to_stream returns 1 on empty streams). (Arnaud)
-
(SSL streams fail if error stack contains items). (Mikko)
-
(error handler not called regardless). (Hannes)
-
(ezmlm_hash() returns different values depend on OS). (Ilia)
-
(ImageConvolution overwrites background). (Ilia)
-
(memory leaks in imap_body). (Pierre, Jake Levitt)
-
(system() calls sapi_flush() regardless of output buffering). (Ilia)
-
("@" operator does not work with string offsets). (Felipe)
-
(CLI aborts on non blocking stdout). (Arnaud)
-
(Non-deep import loses the namespace). (Rob)
-
(PDO_Firebird omits first row from query). (Lars W)
-
(array operator [] inconsistency when the array has PHP_INT_MAX index value). (Matt)
-
(Compile warning for strnlen() in main/spprintf.c). (Ilia, rainer dot jung at kippdata dot de)
-
(openssl_x509_parse() segfaults when a UTF-8 conversion fails). (Scott, Kees Cook, Pierre)
-
(Segfault due to bound callback param). (Felipe)
-
(__call() accessed via parent:: operator is provided incorrect method name). (Felipe)
(Alignment issues in mbstring and sysvshm extension) (crrodriguez at opensuse dot org, Ilia)
-
(PHP crashes on some "bad" operations with string offsets). (Dmitry)
-
(build error when xmlrpc and iconv are compiled against different iconv versions). (Scott)
-
(ZipArchive::OVERWRITE seems to have no effect). (Mikko, Pierre)
-
(Valid integers are truncated with json_decode()). (Scott)
-
(pg_copy_from() WARNING: nonstandard use of \\ in a string literal). (Ilia)
-
(curl keeps crashing). (Felipe)
-
(FILTER_VALIDATE_EMAIL is locale aware). (Ilia)
-
(pcntl_wexitstatus() returns signed status). (patch by james at jamesreno dot com)
-
(unpacking unsigned long 32bit bit endian returns wrong result). (Ilia)
-
(performance degraded when reading large chunks after fix of bug ). (Arnaud)
-
(enable cli|cgi-only extensions for embed sapi). (Jani)
-
(FILTER_FLAG_NO_PRIV_RANGE does not work with ipv6 addresses in the filter extension). (Ilia)
-
(Errors after writing to nodeValue parameter of an absent previousSibling). (Rob)
-
(ip2long() may allow some invalid values on certain 64bit systems). (Ilia)
-
(Wrong Reflection for extends class). (Felipe)
-
(cgi sapi is incorrectly removing SCRIPT_FILENAME). (Sriram Natarajan, David Soria Parra)
-
(Serialize / Unserialize misbehaviour under OS with different bit numbers). (Matt)
-
(get_class_vars() does not include visible private variable looking at subclass). (Arnaud)
-
(Digest authentication with SOAP module fails against MSSQL SOAP services). (Ilia, lordelph at gmail dot com)
-
(Memory leak when mysqli::init() is called multiple times). (Andrey)
-
(safe_mode bypass with exec/system/passthru (windows only)). (Pierre)
-
(Array key '2147483647' left as string). (Matt)
-
(Near infinite-loops while parsing huge relative offsets). (Derick, Mike Sullivan)
-
(imagepng() crashes on empty image). (Martin McNickle, Takeshi Abe)
-
(isset($arrayObject->p) misbehaves with ArrayObject:: ARRAY_AS_PROPS set). (robin_fernandes at uk dot ibm dot com, Arnaud)
-
(ArrayIterator::current(), ::key() can show 1st private prop of wrapped object). (robin_fernandes at uk dot ibm dot com, Arnaud)
-
(stream_context_create creates bad http request). (Arnaud)
-
(zlib.output_compression can not be set with ini_set()). (Jani)
-
(error_log ignores date.timezone php.ini val when setting logging timestamps). (Derick)
-
(header HTTP context option not being used when compiled using --with-curlwrappers). (Jani)
-
(xmlrpc_decode() ignores time zone on iso8601.datetime). (Ilia, kawai at apache dot org)
-
(define() is missing error checks for class constants). (Ilia)
-
(Crash using preg_replace_callback() and global variables). (Nuno, Scott)
-
(TrueType bounding box is wrong for angle<>0). (Martin McNickle)
-
(gzinflate() try to allocate all memory with truncated data). (Arnaud)
-
(some odbc_*() functions incompatible with Oracle ODBC driver). (jhml at gmx dot net)
-
(HTTP status codes 204 and 304 should not be gzipped). (Scott, Edward Z. Yang)
-
(The constant NAN is reported as 0 on Windows) (Kanwaljeet Singla, Venkat Raman Don)
-
(PDO truncates text from SQL Server text data type field). (Steph)
-
-
-
-
-
Version 5.2.9
-
-
-
Security Fixes
-
-
Fixed security issue in imagerotate(), background colour isn't validated correctly with a non truecolour image. Reported by Hamid Ebadi, APA Laboratory (Fixes CVE-2008-5498). (Scott)
-
Fixed a crash on extract in zip when files or directories entry names contain a relative path. (Pierre)
-
Fixed explode() behavior with empty string to respect negative limit. (Shire)
-
Fixed a segfault when malformed string is passed to json_decode(). (Scott)
-
Fixed bug in xml_error_string() which resulted in messages being off by one. (Scott)
-
-
-
-
Changed __call() to be invoked on private/protected method access, similar to properties and __get(). (Andrei)
-
Added optional sorting type flag parameter to array_unique(). Default is SORT_REGULAR. (Andrei)
-
Fixed zip filename property read. (Pierre)
-
Fixed error conditions handling in stream_filter_append(). (Arnaud)
-
-
(modulus operator returns incorrect results on 64 bit linux). (Matt)
-
(mb_check_encoding() returns true for some illegal SJIS characters). (for-bugs at hnw dot jp, Moriyoshi)
-
(crash when creating a lot of objects in object destructor). (Tony)
-
(sscanf %d doesn't work). (Felipe)
-
(FILTER_VALIDATE_EMAIL is marking valid email addresses as invalid). (Ilia)
-
(segfault in dom_document_parser in recovery mode). (Rob)
-
(content-type is not set properly for file uploads). (Ilia)
-
(base64_decode() interprets pad char in mid string as terminator). (Ilia)
-
(Possible memory corruption when passing return value by reference). (Dmitry)
-
(gzseek/fseek using SEEK_END produces strange results). (Felipe)
-
(SOAP Extension ignores "user_agent" ini setting). (Ilia)
-
(Memory leak on $a->{"a"."b"} when $a is not an object). (Etienne, Dmitry)
-
(Linking shared extensions fails with icc). (Jani)
-
(SoapClient::__soapCall causes a segmentation fault). (Dmitry)
-
(Segfault with new pg_meta_data). (Felipe)
-
(PHP cgi sapi is removing SCRIPT_FILENAME for non apache). (Sriram Natarajan)
-
(No error when using fopen with empty string). (Cristian Rodriguez R., Felipe)
-
(dns_get_record returns a garbage byte at the end of a TXT record). (Felipe)
-
(var_export doesn't show numeric indices on ArrayObject). (Derick)
-
(OVERWRITE and binary mode does not work, regression introduced in 5.2.8). (Pierre)
(Incorrect lengths for date and boolean data types). (Ilia)
-
(Constructing DateTime with TimeZone Indicator invalidates DateTimeZone). (Derick)
-
(Warning "array_merge_recursive(): recursion detected" comes again...). (Felipe)
-
(oci8 extension not lib64 savvy). (Chris)
-
(Failing to call RecursiveIteratorIterator::__construct() causes a sefault). (Etienne)
-
(setTime() fails after modify() is used). (Derick)
-
(SimpleXML memory issue). (Rob)
-
(php_uname() does not return nodename on Netware (Guenter Knauf)
-
(Unexpected creation of cycle). (Dmitry)
-
(OpenSSL stream->fd casts broken in 64-bit build) (stotty at tvnet dot hu)
-
-
-
-
-
-
-
Version 5.2.5
-
-
-
Security Fixes
-
-
Fixed dl() to only accept filenames. reported by Laurent Gaffie.
-
Fixed dl() to limit argument size to MAXPATHLEN (CVE-2007-4887).
-
Fixed htmlentities/htmlspecialchars not to accept partial multibyte sequences.
-
Fixed possible triggering of buffer overflows inside glibc implementations of the fnmatch(), setlocale() and glob() functions. Reported by Laurent Gaffie.
-
Fixed "mail.force_extra_parameters" php.ini directive not to be modifiable in .htaccess due to the security implications reported by SecurityReason.
-
(automatic session id insertion adds sessions id to non-local forms).
-
(Values set with php_admin_* in httpd.conf can be overwritten with ini_set()).
-
-
-
-
Upgraded PCRE to version 7.3 (Nuno)
-
Added optional parameter $provide_object to debug_backtrace(). (Sebastian)
-
Added alpha support for imagefilter() IMG_FILTER_COLORIZE. (Pierre)
-
Added ability to control memory consumption between request using ZEND_MM_COMPACT environment variable. (Dmitry)
-
-
Improved speed of array_intersect_key(), array_intersect_assoc(), array_uintersect_assoc(), array_diff_key(), array_diff_assoc() and array_udiff_assoc(). (Dmitry)
-
-
Fixed move_uploaded_file() to always set file permissions of resulting file according to UMASK. (Andrew Sitnikov)
-
Fixed possible crash in ext/soap because of uninitialized value. (Zdash Urf)
-
Fixed regression in glob() when enforcing safe_mode/open_basedir checks on paths containing '*'. (Ilia)
-
Fixed PDO crash when driver returns empty LOB stream. (Stas)
-
Fixed iconv_*() functions to limit argument sizes as workaround to libc bug (CVE-2007-4783, CVE-2007-4840 by Laurent Gaffie). (Christian Hoffmann, Stas)
-
Fixed missing brackets leading to build warning and error in the log. Win32 code. (Andrey)
-
Fixed leaks with multiple connects on one mysqli object. (Andrey)
-
Fixed endianness detection on MacOS when building universal binary. (Uwe Schindler, Christian Speich, Tony)
-
Fixed imagerectangle regression with 1x1 rectangle (libgd #106). (Pierre)
-
-
(array_intersect_assoc() crashes with non-array input). (Jani)
-
(PDO ignores ATTR_DEFAULT_FETCH_MODE in some cases with fetchAll()). (Ilia)
-
(rmdir() and rename() do not clear statcache). (Jani)
-
(Bound parameters cannot have - in their name). (Ilia)
-
(XMLWriter::endElement() does not check # of params). (Ilia)
-
(Warning message is missing with shuffle() and more than one argument). (Scott)
-
(Crash when constructor for newInstance() or newInstanceArgs() fails) (Ilia)
-
(ext/mssql: Move *timeout initialization from RINIT to connect time). (Ilia)
-
(PDO::FETCH_KEY_PAIR doesn't work with setFetchMode). (Ilia)
-
(Constant "LIST" defined by mysqlclient and c-client). (Andrey)
-
($foo = clone(array()); leaks memory). (Dmitry)
-
(clone() on a non-object does not result in a fatal error). (Ilia)
-
(json_encode() formats doubles according to locale rather then following standard syntax). (Ilia)
-
(pg_insert() does not accept an empty list for insertion). (Ilia)
-
(WSDL error causes HTTP 500 Response). (Dmitry)
-
(Storing $this in a static var fails while handling a cast to string). (Dmitry)
(xmlrpc_set_type() crashes php on invalid datetime values). (Ilia)
-
(XMLReader option constants are broken using XML()). (Rob)
-
(SoapServer return Procedure '' not present for WSIBasic compliant wsdl). (Dmitry)
-
(Relative includes broken when getcwd() fails). (Ab5602, Jani)
-
(proc_open() append mode doesn't work on windows). (Nuno)
-
-
-
-
-
-
-
Version 5.2.4
-
-
-
Security Fixes
-
-
Fixed "Floating point exception" inside wordwrap(). (Mattias Bengtsson, Ilia)
-
Fixed several integer overflows in ImageCreate(), ImageCreateTrueColor(), ImageCopyResampled() and ImageFilledPolygon() reported by Mattias Bengtsson. (Tony)
-
Fixed size calculation in chunk_split(). (Stas)
-
Fixed integer overflow in str[c]spn(). (Stas)
-
Fixed money_format() not to accept multiple %i or %n tokens. (Stas, Ilia)
Updated timezone database to version 2007.6. (Derick)
-
-
Improved openssl_x509_parse() to return extensions in readable form. (Dmitry)
-
-
Enabled changing the size of statement cache for non-persistent OCI8 connections. (Chris Jones, Tony)
-
-
Changed display_errors php.ini option to accept stderr as value which makes the error messages to be outputted to STDERR instead of STDOUT with CGI and CLI SAPIs (). (Jani)
-
Changed error handler to send HTTP 500 instead of blank page on PHP errors. (Dmitry, Andrei Nigmatulin)
-
Changed mail() function to be always available. (Johannes)
-
-
Added check for unknown options passed to configure. (Jani)
-
Added persistent connection status checker to pdo_pgsql. (Elvis Pranskevichus, Ilia)
-
Added support for ATTR_TIMEOUT inside pdo_pgsql driver. (Ilia)
-
Added php_ini_loaded_file() function which returns the path to the actual php.ini in use. (Jani)
-
Added GD version constants GD_MAJOR_VERSION, GD_MINOR_VERSION GD_RELEASE_VERSION, GD_EXTRA_VERSION and GD_VERSION_STRING. (Pierre)
-
Added missing open_basedir checks to CGI. (anight at eyelinkmedia dot com, Tony)
-
Added missing format validator to unpack() function. (Ilia)
Made RecursiveFilterIterator::accept() abstract as stated in documentation.
-
-
-
Improved SOAP
-
-
Added ability to encode arrays with "SOAP-ENC:Array" type instead of WSDL type. To activate the ability use "feature"=>SOAP_USE_XSI_ARRAY_TYPE option in SoapClient/SoapServer constructors. (Rob, Dmitry)
-
-
-
Added GMP_VERSION constant. (Tony)
-
Added --ri switch to CLI which allows to check extension information. (Marcus)
-
Added tidyNode::getParent() method (John, Nuno)
-
Added openbasedir and safemode checks in zip:// stream wrapper and ZipArchive::open (Pierre)
-
Added php_pdo_sqlite_external.dll, a version of the PDO SQLite driver that links against an external sqlite3.dll. This provides Windows users to upgrade their sqlite3 version outside of the PHP release cycle. (Wez, Edin)
-
Added linenumbers to array returned by token_get_all(). (Johannes)
-
-
, allow a single filter as argument for filter_var_array (Pierre)
-
(openssl PKCS#12 support) (Marc Delling, Pierre)
-
-
Upgraded SQLite 3 to version 3.3.16 (Ilia)
-
Upgraded libraries bundled in the Windows distribution. (Edin)
-
-
c-client (imap) to version 2006e
-
libpq (PostgreSQL) to version 8.2.3
-
libmysql (MySQL) to version 5.0.37
-
openssl to version 0.9.8e
-
-
-
Upgraded PCRE to version 7.0 (Nuno)
-
Updated timezone database to version 2007.5. (Derick)
-
-
Fixed commandline handling for CLI and CGI. (Marcus, Johannes)
-
Fixed iterator_apply() with a callback using __call(). (Johannes)
-
Fixed possible multi bytes issues in openssl csr parser (Pierre)
-
Fixed shmop_open() with IPC_CREAT|IPC_EXCL flags on Windows. (Vladimir Kamaev, Tony).
-
Fixed possible leak in ZipArchive::extractTo when safemode checks fails (Ilia)
-
Fixed possible relative path issues in zip_open and TS mode (old API) (Pierre)
(Allow multiple instances of the same named PDO token in prepared statement emulation code). (Ilia)
-
(possible endless fork() loop when running fastcgi). (Dmitry)
-
(ext/posix does not compile on MacOS 10.3.9). (Tony)
-
(memory leaks in PHP milter SAPI). (tuxracer69 at gmail dot com, Tony)
-
(pg_client_encoding() not working on Windows). (Edin)
-
(FCGI_WEB_SERVER_ADDRS function get lost). (Dmitry)
-
(strtotime() returns unexpected result with particular timezone offset). (Derick)
-
(PHP fastcgi with PHP_FCGI_CHILDREN don't kill children when parent is killed). (Dmitry)
-
(Extremely slow data handling due to memory fragmentation). (Dmitry)
-
(php -a function allocation eats memory). (Dmitry)
-
(iptcembed fails on non-jfif jpegs). (Tony)
-
(Latitude and longitude are backwards in date_sun_info()). (Derick)
-
(SplObjectStorage empty after unserialize). (Marcus)
-
(Milliseconds in date()). (Derick)
-
(stream_set_blocking crashes on Win32). (Ilia, maurice at iceblog dot de)
-
(relative include fails on Solaris). (Dmitry, Tony)
-
(proc_terminate() destroys process resource). (Nuno)
-
(crash when assigning objects to SimpleXML attributes). (Tony)
-
(ftp_ssl_connect() falls back to non-ssl connection). (Nuno)
-
(SSL support in imap_open() not working on Windows). (Edin)
-
(Inconsistent handling when passing nillable arrays). (Dmitry)
-
(Avoid crash caused by object store being referenced during RSHUTDOWN). (Andy)
-
(proc_close() hangs when used with two processes). (jdolecek at netbsd dot org, Nuno)
-
(data leakage because of nonexisting boundary checking in statements in mysqli) (Stas)
-
(autocreating element doesn't assign value to first node). (Rob)
-
(server hangs when returning circular object references). (Dmitry)
-
Console window appears when using exec() (Richard Quadling, Stas)
-
(crash in Oracle client when memory limit reached in the callback). (Tony)
-
-
-
-
-
-
Version 5.2.1
-
-
-
Added CURLOPT_TCP_NODELAY constant to Curl extension. (Sara)
-
Added support for hex numbers of any size. (Matt)
-
Added function stream_socket_shutdown(). It is a wrapper for system shutdown() function, that shut downs part of a full-duplex connection. (Dmitry)
-
Added internal heap protection (Dmitry)
-
-
memory-limit is always enabled (--enable-memory-limit removed)
-
default value if memory-limit is set to 128M
-
safe unlinking
-
cookies
-
canary protection (debug build only)
-
random generation of cookies and canaries
-
-
-
Added forward support for 'b' prefix in front of string literals. (Andrei)
-
Added three new functions to ext/xmlwriter (Rob, Ilia)
-
-
xmlwriter_start_dtd_entity()
-
xmlwriter_end_dtd_entity()
-
xmlwriter_write_dtd_entity()
-
-
-
Added a meta tag to phpinfo() output to prevent search engines from indexing the page. (Ilia)
-
Added new function, sys_get_temp_dir(). (Hartmut)
-
Added missing object support to file_put_contents(). (Ilia)
-
Added support for md2, ripemd256 and ripemd320 algos to hash(). (Sara)
-
Added forward support for (binary) cast. (Derick)
-
Added optimization for imageline with horizontal and vertical lines (Pierre)
-
-
Removed dependency from SHELL32.DLL. (Dmitry)
-
Removed double "wrong parameter count" warnings in various functions. (Hannes)
-
Moved extensions to PECL:
-
-
ext/informix (Derick, Tony)
-
-
-
Changed double-to-string utilities to use BSD implementation. (Dmitry, Tony)
-
Updated bundled libcURL to version 7.16.0 in the Windows distro. (Edin)
-
Updated timezone database to version 2006.16. (Derick)
-
cgi.* and fastcgi.* directives are moved to INI subsystem. The new directive cgi.check_shebang_line can be used to omitting check for "#! /usr/bin/php" line. (Dmitry).
-
Improved proc_open(). Now on Windows it can run external commands not through CMD.EXE. (Dmitry)
-
VCWD_REALPATH() is improved to use realpath cache without VIRTUAL_DIR. (Dmitry)
-
ext/bcmath initialization code is moved from request startup to module startup. (Dmitry)
-
Zend Memory Manager Improvements (Dmitry)
-
-
use HeapAlloc() instead of VirtualAlloc()
-
use "win32" storage manager (instead of "malloc") on Windows by default
-
-
-
Zip Extension Improvements (Pierre)
-
-
Fixed leak in statName and stateIndex
-
Fixed return setComment (Hannes)
-
Added addEmptyDir method
-
-
-
Filter Extension Improvements (Ilia, Pierre)
-
-
Fixed a bug when callback function returns a non-modified value.
-
Added filter support for $_SERVER in cgi/apache2 sapis.
-
Make sure PHP_SELF is filtered in Apache 1 sapi.
-
(INSTALL_HEADERS contains incorrect reference to php_filter.h).
-
Added "default" option that allows a default value to be set for an invalid or missing value.
-
Invalid filters fails instead of returning unsafe value
-
Fixed possible double encoding problem with sanitizing filters
-
Make use of space-strict strip_tags() function
-
Fixed whitespace trimming
-
Added support for FastCGI environment variables. (Dmitry)
-
-
-
PDO_MySQL Extension Improvements (Ilia)
-
-
Enabled buffered queries by default.
-
Enabled prepared statement emulation by default.
-
-
-
-
Small optimization of the date() function. (Matt,Ilia)
-
Optimized the internal is_numeric_string() function. (Matt,Ilia)
COM initialization/deinitialization are done only if necessary
-
removed unnecessary checks for ISREG file and corresponding stat() calls
-
opendir() is reimplementation using GetFirstFile/GetNextFile those are faster then _findfirst/_findnext
-
implemented registry cache that prevent registry lookup on each request. In case of modification of corresponding registry-tree PHP will reload it automatic
-
start timeout thread only if necessary
-
stat() is reimplementation using GetFileAttributesEx(). The new implementation is faster then implementation in MS VC CRT, but it doesn't support Windows 95.
-
-
-
Streams optimization (Dmitry)
-
-
removed unnecessary ftell() calls (one call for each included PHP file)
-
disabled calls to read() after EOF
-
-
-
-
Fixed incorrect function names on FreeBSD where inet_pton() was named __inet_pton() and inet_ntop() was named __inet_ntop(). (Hannes)
-
Fixed FastCGI impersonation for persistent connections on Windows. (Dmitry)
-
Fixed wrong signature initialization in imagepng (Takeshi Abe)
-
Fixed ftruncate() with negative size on FreeBSD. (Hannes)
-
Fixed segfault in RegexIterator when given invalid regex. (Hannes)
-
Fixed segfault in SplFileObject->openFile()->getPathname(). (Hannes)
-
Fixed segfault in ZTS mode when OCI8 statements containing sub-statements are destroyed in wrong order. (Tony)
-
Fixed the validate email filter so that the letter "v" can also be used in the user part of the email address. (Derick)
-
(compile failure in ZTS mode when collections support is missing). (Tony)
-
(The PDO prepare parser goes into an infinite loop in some instances). (Ilia)
-
(Sessions fail with numeric root keys). (Ilia)
-
(ob_start call many times - memory error). (Dmitry)
-
(file_exists incorrectly reports false). (Dmitry)
-
(ZipArchive::extractTo does create empty directories recursively). (Pierre)
-
(The FastCgi version has different realpath results than thread safe version). (Dmitry)
-
(use of array_unique() with objects triggers segfault). (Tony)
-
(possible endless loop in zlib.inflate stream filter). (Greg, Tony)
-
(CURLOPT_TCP_NODELAY only available in curl >= 7.11.2). (Tony)
-
(iconv extension doesn't compile with CodeWarrior on Netware). (gk at gknw dot de, Tony)
-
(apache2handler doesn't compile on Netware). (gk at gknw dot de)
-
(PDO_DBLIB driver wont free statements). (Ilia)
-
(php_fopen_primary_script() not thread safe). (Ilia)
-
(chroot() doesn't clear realpath cache). (Dmitry)
-
(spl_autoload_register with 2 instances of the same class). (Ilia)
(serialNumber might be -1 when the value is too large). (Pierre, Tony)
-
(Inappropriate close of stdin/stdout/stderr). (Wez, Ilia)
-
(Possible crash in Apache 2 with 413 ErrorHandler). (Ilia)
-
(Parse error in recursiveiteratoriterator.php). (Marcus)
-
(Incorrect return array handling in non-wsdl soap client). (Dmitry)
-
(DirectoryFilterDots doxygen docs and example is wrong). (Marcus)
-
(XML-RPC Breaks iconv). (Hannes)
-
(unpack() broken with longs on 64 bit machines). (Ilia, David Soria Parra).
-
(for some keys cdbmake creates corrupted db and cdb can't read valid db). (Marcus)
-
(Added missing handling of basic types in json_decode). (Ilia)
-
(Fixed request time leak inside foreach() when iterating through virtual properties). (Dmitry)
-
(header( "HTTP/1.0 ..." ) does not change proto version). (Ilia)
-
(proc_get_status() returns wrong PID on windows). (Nuno)
-
(SOAP returns an array of values instead of an object). (Dmitry)
-
(Apache2 segfaults when virtual() is called in .php ErrorDocument). (Ilia)
-
(spl_autoload_register() gives wrong line for "class not found"). (Ilia)
-
(Remove bogus warnings from persistent PDO connections). (Ilia)
-
(Memlimit fatal error sent to "wrong" stderr when using fastcgi). (Dmitry)
-
(Incorrect PDO error message on invalid default fetch mode). (Ilia)
-
(Prevent trap when COM extension processes argument of type VT_DISPATCH|VT_REF) (Andy)
-
(iconv_substr() gives "Unknown error" when string length = 1"). (Ilia)
-
(session save_path check checks the parent directory). (Ilia)
-
(proc_open() closes stdin on fork() failure). (jdolecek at NetBSD dot org, Nuno)
-
(COM Property propputref converts to PHP function and can't be accesed). (Rob)
-
(natcasesort() causes array_pop() to misbehave). (Hannes)
-
(pg_execute() modifies input array). (Ilia)
-
(Error parsing named parameters with queries containing high-ascii chars). (Ilia)
-
(possible crash in variant_date_from_timestamp()). (Ilia)
-
(proc_open() / proc_close() leak handles on windows). (jdolecek at NetBSD dot org, Nuno)
-
(wrong number of decimal digits with %e specifier in sprintf). (Matt,Ilia)
-
(__get method works properly only when conditional operator is used). (Dmitry)
-
(Erroneous "Class declarations may not be nested" error raised). (Carl P. Corliss, Dmitry)
-
(nested foreach fails when array variable has a reference). (Dmitry)
-
(COM extension not returning modified "out" argument) (Andy)
-
(Something strange with COM Object). (Rob)
-
(ScriptControl only sees last function of class). (Rob)
-
(Re-assignment by reference does not clear the is_ref flag) (Ilia, Dmitry, Matt Wilmas)
-
(apparent symbol table error with extract($blah, EXTR_REFS)) (Brian)
-
(is_executable() does not honor safe_mode_exec_dir setting). (Ilia)
-
(ORA-01405: fetched column value is NULL on LOB fields). (Tony)
-
-
-
-
-
-
-
Version 5.2.0
-
-
-
Updated bundled OpenSSL to version 0.9.8d in the Windows distro. (Edin)
-
Updated Postgresql client libraries to 8.1.4 in the Windows distro. (Edin)
-
Updated PCRE to version 6.7. (Ilia)
-
Updated libsqlite in ext/pdo_sqlite to 3.3.7. (Ilia)
-
Updated bundled MySQL client library to version 5.0.22 in the Windows distribution. (Edin)
-
Updated timezonedb to version 2006.14. (Derick)
-
-
Added ability to make SOAP call userspace PHP<->XML converters. (Dmitry)
-
Added support for character sets in pg_escape_string() for PostgreSQL 8.1.4 and higher. (Ilia)
-
Added support for character sets in PDO quote() method for PostgreSQL 8.1.4 and higher. (Ilia)
-
Added DSA key generation support to openssl_pkey_new(), FR (marci at balabit dot hu, Tony)
-
Added SoapServer::setObject() method (it is a simplified version of SoapServer::setClass() method). (Dmitry)
-
Added support for hexadecimal entity in imagettftext() for the bundled GD. (Pierre)
-
Added support for httpOnly flag for session extension and cookie setting functions. (Scott MacVicar, Ilia)
-
Added version specific registry keys to allow different configurations for different php version. (Richard, Dmitry)
-
Added "PHPINIDir" Apache directive to apache and apache_hooks SAPIs. (Dmitry)
-
Added an optional boolean parameter to memory_get_usage() and memory_get_peak_usage() to get memory size allocated by emalloc() or real size of memory allocated from system. (Dmitry)
-
Added Zip Archive extension. (Pierre)
-
Added RFC1867 fileupload processing hook. (Stefan E.)
-
Added JSON and Filter extensions. (Derick, Rasmus, Pierre, Ilia)
-
Added error messages to disk_free_space() and disk_total_space() functions. FR (Tony)
-
Added PATHINFO_FILENAME option to pathinfo() to get the filename. (Toby S. and Christian S.)
-
Added array_fill_keys() function. (Marcus, Matt Wilmas)
-
Added posix_initgroups() function. (Ilia)
-
Added optional parameter to http_build_query() to allow specification of string separator. (Ilia)
Added "--enable-malloc-mm" configure option which is enabled by default in debug builds to allow using internal and external memory debuggers.
-
Allow tweaking the memory manager with ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE environment variables.
-
For more information: Zend/README.ZEND_MM
-
-
-
Improved safe_mode check for the error_log() function. (Ilia)
-
Improved the error reporting in SOAP extension on request failure. (Ilia)
-
Improved crypt() on win32 to be about 10 times faster and to have friendlier license. (Frank, Dmitry)
-
Improved performance of the implode() function on associated arrays. (Ilia)
-
Improved performance of str_replace() when doing 1 char to 1 char or 1 char to many chars replacement. (Ilia)
-
Improved apache2filter SAPI:
-
-
Allowed PHP to be an arbitrary filter in the chain and read the script from the Apache stream. (John)
-
Added support for apache2filter in the Windows build including binary support for both Apache 2.0.x (php5apache2_filter.dll) and Apache 2.2.x (php5apache2_2_filter.dll). (Edin)
-
-
-
Improved apache2handler SAPI:
-
-
Changed ap_set_content_type() to be called only once. (Mike)
-
Added support for Apache 2.2 handler in the Windows distribution. (Edin)
-
-
-
Improved FastCGI SAPI: (Dmitry)
-
-
Removed source compatibility with libfcgi.
-
Optimized access to FastCGI environment variables by using HashTable instead of linear search.
-
Allowed PHP_FCGI_MAX_REQUESTS=0 that assumes no limit.
-
Allowed PHP_FCGI_CHILDREN=0 that assumes no worker children. (FastCGI requests are handled by main process itself)
-
-
-
Improved CURL:
-
-
Added control character checks for "open_basedir" and "safe_mode" checks. (Ilia)
-
Added implementation of curl_multi_info_read(). (Brian)
Changed to passing libxml options when loading reader.
-
-
-
Fixed invalid read in imagecreatefrompng when an empty file is given (Pierre, Tony)
-
Fixed infinite loop when a wrong color index is given to imagefill (Pierre)
-
Fixed mess with CGI/CLI -d option (now it works with cgi; constants are working exactly like in php.ini; with FastCGI -d affects all requests). (Dmitry)
(sun_rise and sun_set don't return a GMT timestamp if one passes an offset). (Derick)
-
(date_sunrise and date_sunset don't handle GMT offset well). (Derick)
-
(is_dir and is_file (incorrectly) return true for any string greater then 255 characters). (Nuno, Ilia)
-
(date_sunrise() & date_sunset() don't handle endless day/night at high latitudes). (Derick)
-
(Remove MessageBox on win32 for E_CORE errors if display_startup_error is off). (Ilia)
-
(mb_strtoupper() / lower() broken with Turkish encoding). (Rui)
-
(mb_substr() and substr() behave differently when "mbstring.func_overload" is enabled). (Rui)
-
(number_format() crashes with large numbers). (Marcus)
-
-
-
-
-
-
Version 5.1.1
-
-
-
Disabled native date class to prevent pear::date conflict. (Ilia)
-
Improved safe_mode/open_basedir checks in cURL extension. (Ilia, Jani)
-
Changed reflection constants be both PHP and class constants. (Johannes)
-
Added an additional field $frame['object'] to the result array of debug_backtrace() that contains a reference to the respective object when the frame was called from an object. (Sebastian)
-
(RecursiveDirectoryIterator doesnt appear to recurse with RecursiveFilterIterator). (Marcus)
-
(Removed -dev flag from Zend Engine version). (Ilia)
-
(Regression with \{$ handling). (Ilia)
-
(eval hangs when evall'ed code ends with comment w/o newline). (Marcus)
-
(pdo_mysql::exec does not return number of affected rows). (Tony)
-
(Comment in end of file produces fatal error). (Ilia)
-
(exceptions in interactive mode (php -a) may cause crash). (Dmitry)
-
(Incorrect error messages for PDO class constants). (Ilia)
-
(pdo_pgsql does not handle binary bound params). (Wez)
-
(Application exception trying to create COM object). (Rob)
-
(PHP_AUTH_DIGEST differs under Apache 1.x and 2.x). (Ilia)
-
-
-
-
-
-
Version 5.1.0
-
-
-
Added support for class constants and static members for internal classes. (Dmitry, Michael Wallner)
-
Added "new_link" parameter to mssql_connect() (Bug ). (Frank)
-
Added missing safe_mode checks for image* functions and cURL. (Ilia)
-
Added missing safe_mode/open_basedir checks for file uploads. (Ilia)
-
Added PDO_MYSQL_ATTR_USE_BUFFERED_QUERY parameter for pdo_mysql. (Ilia)
-
Added date_timezone_set() function to set the timezone that the date functions will use. (Derick)
-
Added pg_fetch_all_columns() function to fetch all values of a column from a result cursor. (Ilia)
-
Added support for LOCK_EX flag for file_put_contents(). (Ilia)
-
Added bindto socket context option. (Ilia)
-
Added offset parameter to the stream_copy_to_stream() function. (Ilia)
-
Added offset & length parameters to substr_count() function. (Ilia)
-
Added man pages for "phpize" and "php-config" scripts. (Jakub Vrana)
-
Added support for .cc files in extensions. (Brian)
-
Added PHP_INT_MAX and PHP_INT_SIZE as predefined constants. (Andrey)
-
Added user opcode API that allow overloading of opcode handlers. (Dmitry)
-
Added an optional remove old session parameter to session_regenerate_id(). (Ilia)
-
Added array type hinting. (Dmitry)
-
Added the tidy_get_opt_doc() function to return documentation for configuration options in tidy. (Patch by: nlopess@php.net)
-
Added support for .cc files in extensions. (Brian)
-
Added imageconvolution() function which can be used to apply a custom 3x3 matrix convolution to an image. (Pierre)
-
Added optional first parameter to XsltProcessor::registerPHPFunctions to only allow certain functions to be called from XSLT. (Christian)
-
Added the ability to override the autotools executables used by the buildconf script via the PHP_AUTOCONF and PHP_AUTOHEADER environmental variables. (Jon)
-
Added several new functions to support the PostgreSQL v3 protocol introduced in PostgreSQL 7.4. (Christopher)
-
-
pg_transaction_status() - in-transaction status of a database connection.
-
pg_query_params() - execution of parameterized queries.
-
pg_prepare() - prepare named queries.
-
pg_execute() - execution of named prepared queries.
-
pg_send_query_params() - async equivalent of pg_query_params().
-
pg_send_prepare() - async equivalent of pg_prepare().
-
pg_send_execute() - async equivalent of pg_execute().
-
pg_result_error_field() - highly detailed error information, most importantly the SQLSTATE error code.
-
pg_set_error_verbosity() - set verbosity of errors.
-
-
Added optional fifth parameter "count" to preg_replace_callback() and preg_replace() to count the number of replacements made. FR . (Andrey)
-
Added optional third parameter "charlist" to str_word_count() which contains characters to be considered as word part. FR . (Andrey, Ilia)
-
Added interface Serializable. (Stanislav, Marcus)
-
Added pg_field_type_oid() PostgreSQL function. (mauroi at digbang dot com)
-
Added zend_declare_property_...() and zend_update_property_...() API functions for bool, double and binary safe strings. (Hartmut)
-
Added possibility to access INI variables from within .ini file. (Andrei)
Added DomDocument::$recover property for parsing not well-formed XML Documents. (Christian)
-
Added Cursor support for MySQL 5.0.x in mysqli (Georg)
-
Added proxy support to ftp wrapper via http. (Sara)
-
Added MDTM support to ftp_url_stat. (Sara)
-
Added zlib stream filter support. (Sara)
-
Added bz2 stream filter support. (Sara)
-
Added max_redirects context option that specifies how many HTTP redirects to follow. (Ilia)
-
Added support of parameter=>value arrays to xsl_xsltprocessor_set_parameter(). (Tony)
-
Improved PHP extension loading mechanism with support for module dependencies and conflicts. (Jani, Dmitry)
-
Improved interactive mode of PHP CLI (php -a). (Johannes, Marcus)
-
Improved performance of:
-
-
general execution/compilation. (Andi, Thies, Sterling, Dmitry, Marcus)
-
switch() statement. (Dmitry)
-
several array functions. (Marcus)
-
virtual path handling by adding a realpath() cache. (Andi)
-
variable fetches. (Andi)
-
magic method invocations. (Marcus)
-
-
Improved support for embedded server in mysqli. (Georg)
-
Improved mysqli extension. (Georg)
-
-
added constructor for mysqli_stmt and mysqli_result classes
-
added new function mysqli_get_charset()
-
added new function mysqli_set_charset()
-
added new class mysqli_driver
-
added new class mysqli_warning
-
added new class mysqli_exception
-
added new class mysqli_sql_exception
-
-
Improved SPL extension. (Marcus)
-
-
Moved RecursiveArrayIterator from examples into extension
-
Moved RecursiveFilterIterator from examples into extension
-
Added SplObjectStorage
-
Made all SPL constants class constants
-
Renamed CachingRecursiveIterator to RecursiveCachingIterator to follow Recursive<*>Iterator naming scheme.
-
added standard hierarchy of Exception classes
-
added interface Countable
-
added interfaces Subject and SplObserver
-
added spl_autoload*() functions
-
converted several 5.0 examples into c code
-
added class SplFileObject
-
added possibility to use a string with class_parents() and class_implements(). (Andrey)
-
-
Changed type hints to allow "null" as default value for class and array. (Marcus, Derick, Dmitry)
-
Changed SQLite extension to be a shared module in Windows distribution. (Edin)
-
Changed "instanceof" and "catch" operators, is_a() and is_subclass_of() functions to not call __autoload(). (Dmitry)
-
Changed sha1_file() and md5_file() functions to use streams instead of low level IO. (Uwe)
-
Changed abstract private methods to be not allowed anymore. (Stas)
-
Changed stream_filter_(ap|pre)pend() to return resource. (Sara)
-
Changed mysqli_exception and sqlite_exception to use RuntimeException as base if SPL extension is present. (Georg, Marcus)
-
Upgraded bundled libraries:
-
-
PCRE library to version 6.2. (Andrei)
-
SQLite 3 library in ext/pdo_sqlite to 3.2.7. (Ilia)
-
SQLite 2 library in ext/sqlite to 2.8.16. (Ilia)
-
-
Upgraded bundled libraries in Windows distribution. (Edin)
-
-
zlib 1.2.3
-
curl 7.14.0
-
openssl 0.9.8
-
ming 0.3b
-
libpq (PostgreSQL) 8.0.1
-
-
(Year belonging to ISO week). (Derick)
-
Allowed return by reference from internal functions. (Marcus, Andi, Dmitry)
-
Rewrote strtotime() with support for timezones and many new formats. Implements feature requests , , , , and . (Derick)
-
Moved extensions to PECL:
-
-
ext/cpdf (Tony, Derick)
-
ext/dio (Jani, Derick)
-
ext/fam (Jani, Derick)
-
ext/ingres_ii (Jani, Derick)
-
ext/mnogosearch (Jani, Derick)
-
ext/w32api (Jani, Derick)
-
ext/yp (Jani, Derick)
-
ext/mcve (Jani, Derick, Pierre)
-
ext/oracle (Jani, Derick)
-
ext/ovrimos (Jani, Derick, Pierre)
-
ext/pfpro (Jani, Derick, Pierre)
-
ext/dbx (Jani, Derick)
-
ext/ircg (Jani, Derick)
-
-
Removed php_check_syntax() function which never worked properly. (Ilia)
-
Removed garbage manager in Zend Engine which results in more aggressive freeing of data. (Dmitry, Andi)
-
Fixed "make test" to work for phpized extensions. (Hartmut, Jani)
-
Fixed Apache 2 regression with sub-request handling on non-linux systems. (Ilia, Tony)
-
Fixed PDO shutdown problem (possible infinite loop running rollback on shutdown). (Wez)
-
(PDO: beginTransaction doesn't work if you're in auto-commit mode). (Wez)
-
Fixed ZTS destruction. (Marcus)
-
Fixed __get/__set to allow recursive calls for different properties. (Dmitry)
-
Fixed a bug where stream_get_meta_data() did not return the "uri" element for files opened with tmpname(). (Derick)
-
Fixed a problem with SPL iterators aggregating the inner iterator. (Marcus)
-
Fixed an error in mysqli_fetch_fields (returned NULL instead of an array when row number > field_count). (Georg)
-
Fixed bug in mysql::client_version(). (Georg)
-
Fixed bug in mysqli extension with unsigned int(11) being represented as signed integer in PHP instead of string in 32bit systems. (Andrey)
-
Fixed bug with $HTTP_RAW_POST_DATA not getting set. (Brian)
-
Fixed crash inside stream_get_line() when length parameter equals 0. (Ilia)
-
Fixed ext/mysqli to allocate less memory when fetching bound params of type (MEDIUM|LONG)BLOB/(MEDIUM|LONG)TEXT. (Andrey)
-
Fixed extension initialization to respect dependencies between extensions. (Wez)
-
Fixed failing queries (FALSE returned) with mysqli_query() on 64 bit systems. (Andrey)
-
Fixed fgetcsv() and fputcsv() inconsistency. (Dmitry)
-
Fixed inheritance check to control return by reference and pass by reference correctly (ArrayAccess can no longer support references correctly). (Marcus, Andi, Dmitry)
-
Fixed initializing and argument checking for posix_mknod(). (Derick)
-
Fixed memory corruption in ImageTTFText() with 64bit systems. (Andrey)
-
Fixed memory corruption in pg_copy_from() in case the as_null parameter was passed. (Derick)
-
Fixed memory corruption in stristr(). (Derick)
-
Fixed possible GLOBALS variable override when register_globals are ON. (Ilia, Stefan)
-
Fixed possible INI setting leak via virtual() in Apache 2 sapi. (Ilia)
-
Fixed possible register_globals toggle via parse_str(). (Ilia, Stefan)
-
Fixed potential GLOBALS overwrite via import_request_variables() and possible crash and/or memory corruption. (Ilia)
-
Fixed segfaults when CURL callback functions throw exception. (Tony)
-
Fixed support for shared extensions on AIX. (Dmitry)
-
(isset(DOMNodeList->length) returns false). (Rob)
-
(Fix for bug breaks build with older curl). (Tony)
-
(crash on PDO::FETCH_CLASS + __set()). (Tony)
-
(PDO prepare() crashes with invalid parameters). (Ilia)
-
(PDO segfaults when using persistent connections). (Tony)
(private/protected properties not serialized when user declared method __sleep() exists). E_NOTICE thrown when __sleep() returns name of non-existing member. (Andrey, Curt)
-
-
-
-
-
-
Version 5.0.1
-
-
-
Changed destructor mechanism so that destructors are called prior to request shutdown. (Marcus)
-
Rewritten UNIX and Windows install help files. (Documentation Team)
-
Updated several libraries bundled with the windows release which now includes libxml2-2.6.11, libxslt-1.1.7 and iconv-1.9.1. (Rob, Edin)
-
Improved and moved ActiveScript SAPI to PECL. (Wez)
-
Fixed unloading of dynamically loaded extensions. (Marcus, kameshj at fastmail dot fm)
-
Fixed ReflectionClass::getMethod() and ReflectionClass::getProperty() to raise an ReflectionException instead of returning NULL on failure. (Sebastian)
-
Fixed convert.* filters to consume remaining buckets_in on flush. (Sara)
-
Fixed bug in mysqli->client_version. (Georg)
-
(php_strip_whitespace() prints to stdout rather then returning the value). (Ilia)
-
(MYSQLI_CLIENT_FOUND_ROWS undefined) (Georg)
-
(Segmentation fault, when exception thrown within PHP function called from XSLT). (Christian)
-
(accessing properties without connection) (Georg)
-
(get_class_vars() severely broken when used with arrays). (Marcus)
(SPL: change visibility of ArrayIterator::__construct). (Marcus)
-
(memory leak of registered_zend_ini_directives). (Dmitry)
-
(SPL: ArrayObject does not handle PPP correctly). (Marcus)
-
-
-
-
-
-
-
Version 5.0.0 Release Candidate 2
-
-
-
Implementing an interface/abstract method with the wrong prototype is now
- a fatal error. (Zeev)
-
-
Reimplemented zend.ze1_compatibility_mode to have better PHP 4 compliance.
- (Dmitry, Andi)
-
-
Under CLI, fclose() on php://stdin, php://stdout and php://stderr will now
- close the real stream. Please update your CLI scripts to use STDIN, STDOUT
- and STDERR constants instead of fopen()/fclose(). (Wez)
-
-
Moved yaz extension to PECL. (Wez)
-
-
Added pty support to proc_open(). (Wez)
-
-
Added possibility to check in which extension an internal class was defined
- in using reflection API. (Marcus)
-
-
Changed tidy error handling to no longer use exceptions and
- renamed the "error_buf" property to errorBuffer. (John)
-
-
Changed class and method names to use studlyCaps convention. (Marcus)
-
-
Changed language parser to throw errors when a non-empty signature is used in
- a destructor definition. (Marcus)
-
-
Changed HTTP file uploads not to throw E_WARNINGs and E_NOTICEs. The error
- value in the $_FILES global should be used for error handling. (Derick)
-
-
Changed __construct() to always take precedence over old style constructor.
- (Dmitry)
-
-
Fixed handling of return values from storred procedures in mssql_execute()
- with multiple result sets returned. (Frank)
-
-
(stream_socket_accept() doesn't work with ssl). (Wez)
-
-
(compile mssql extension with old versions of FreeTDS
- fails). (Frank)
-
(in some cases using foreach() to iterate over values
- led to a false error message about the key being a reference). (Adam)
-
-
(STDIN, STDOUT, STDERR are dup()d under CLI). (Wez)
-
-
(xml_parse() segfaults when xml_set_object() is called from
- class method). (Andi, Rob)
-
-
(WDSL SOAP Parsing Schema bug). (Dmitry)
-
-
(Segfault on schema without targetNamespace). (Dmitry)
-
-
(mktime issues on and around DST changeover). (Rasmus)
-
-
(soap extension fails without HAVE_TM_GMTOFF). (Dmitry)
-
-
(Object cloning in ze1_compatibility_mode was reimplemented)
- (Dmitry, Andi)
-
-
(Simplify the process of making a POST request via stream
- context). (Ilia)
-
-
(filters not applied to pre-buffered stream data). (Sara)
-
-
(Reflection_Function constructor crashes with non-existant
- function's name). (Marcus)
-
-
(serialize() objects of incomplete class). (Dmitry)
-
-
(handling of numeric indexes in strtr()). (Dmitry)
-
-
(debug_backtrace() not showing function arguments). (Zeev)
-
-
(The last catch statement was sometimes skipped). (Andi)
-
-
(When __set() returned a value it corrupted it). (Andi)
-
-
(shouldn't mmap() files larger than memory_limit). (Wez)
-
-
-
-
-
-
-
Version 5.0.0 Release Candidate 1
-
-
-
Fixed numerous bugs with the just-in-time auto-global initialization, that
- could cause $_SERVER, $argv/$argc and other variables not to work properly.
- (Zeev)
-
-
Fixed data corruption with constant assignments to object properties. (Zeev)
-
-
Changed __toString() to be called automatically only with print and echo
- statements. (Andi)
-
-
Replaced the exec_finished hook by the zend_post_deactive hook for
- extensions. The new hook will be run after the symbol table and destructors
- are run. (Derick)
-
-
Fixed possible crash when internal get_method() is not defined. (Andi)
-
-
Fixed calling methods using call_user_func() in conjunction with
- the array("Class","Method") syntax to use the scope of the PHP user function.
- (Dmitry)
-
-
Fixed php-cgi to not ignore command-line switches when run in a web context.
- This fixes our test cases allowing INI with GET sections to work. (Rasmus)
-
-
Fixed getopt() so it works without $_SERVER. (Rasmus, bfrance)
-
-
Added support for PHP 4 style object comparisons which is enabled in
- ze1_compatiblity_mode. (Andi)
-
-
Added support for PHP 4 style object conversion to long, double, and boolean
- values which is enabled in ze1_compatibility_mode. (Andi, Stas)
-
-
Allow object oriented extensions to overload comparison functions and other
- operations. Solves problems using SimpleXML values. (Andi, Zeev)
-
-
Fixed crash when accessing a class constant with a value which in turn is
- also a constant. (Dmitry)
-
-
Fixed object's truth value conversion. It is always true unless
- ze1_compatibility_mode is on in which it behaves like in PHP 4. (Stas)
-
-
Improved out of memory handling in new memory manager. (Stas)
-
-
Fixed crash when an object references itself during destructor call. (Andi)
-
-
Fixed crash in foreach() when iterating over object properties or a method's
- return values. (Andi)
-
-
Fixed crash when an exception is thrown in a destructor. Such exceptions are
- now ignored as destruction happens out of context at no definite time. (Andi)
-
-
Fixed crashes in exception handling. (Dmitry, Andi)
-
-
Changed prototype checks so that they aren't done on constructors. (Andi)
-
-
Changed prototype checks to output an E_STRICT message instead of
- an E_COMPILE_ERROR. (Andi)
-
-
Changed Iterator::has_more() to Iterator::valid(). (Marcus)
-
-
Upgraded bundled oniguruma library to version 2.2.2. (Rui, Moriyoshi)
-
-
Added mb_list_encoding() to return an array with all mbstring supported
- encodings. (Derick)
-
-
Added support for more ISO8601 datetime formats in strtotime(). (Moriyoshi)
-
Renamed php.ini option "zend2.implicit_clone" to
- "zend.ze1_compatibility_mode" as it doesn't only affect implicit cloning.
- (Andi, Zeev)
-
-
Methods that override parent methods are now subject to prototype checking,
- and have to be compatible with the method they're overriding - this check is
- disabled in compatibility mode. (Andi, Zeev)
-
-
Fixed crash in php_ini_scanned_files() when no additional INI files were
- actually parsed. (Jon)
-
-
Fixed bug in gdImageFilledRectangle in the bundled GD library, that required
- x1 < x2 and y1 < y2 for coordinates. (Derick)
-
-
Fixed crash with foreach() and temporary objects($obj->method()->a ...) where
- method returns a non-referenced object. (Andi, Zeev)
-
-
Fixed problem preventing startup errors from being displayed. (Marcus)
-
-
Fixed start-up problem if both SPL and SimpleXML were enabled. The double
- initialization of apache 1.3 was causing problems here. (Marcus, Derick)
-
-
(Expression must be a modifiable lvalue compiler error).
- (Derick)
-
-
(pg_fetch_array not returning false). (Marcus)
-
-
(ArrayObject::getIterator crashes with [] assignment).
- (Marcus)
-
-
(Objects pointing to each other segfaults). (Dmitry)
-
-
(Problem with object freeing mechanism). (Dmitry)
-
-
(Visibility bugs in call_user_function()). (Dmitry)
-
-
(handling of numeric indexes in strtr()). (Dmitry)
-
-
(memory leak inside tsrm_virtual_cwd.c on win32). (Ilia)
-
Changed exceptions so that they must now inherit from the built-in Exception
-class. This allows for a general catch(Exception $e) statement to catch all
-exceptions. (Andi, Zeev)
-
Added SPL extension. (Marcus, Derick)
-
Added checks for invalid characters in a cookie name and cookie data
-into set[raw]cookie(). (Brian)
-
Added support for ++ and += (and similar) to SimpleXML. (Andi, Zeev)
-
Added infrastructure for ++ and += (and similar) to object overloading
-modules. (Andi, Zeev)
-
Added error message when trying to re-assign to $this variable. (Zeev, Andi)
-
Added support for an interface to extend another interface. (Zeev)
-
Added new pspell functions: (Brian)
-
-
pspell_config_dict_dir()
-
pspell_config_data_dir()
-
-
Added new Interbase functions: (Ard)
-
-
ibase_service_attach() and ibase_service_detach().
-
ibase_backup() and ibase_restore().
-
ibase_maintain_db(), ibase_db_info() and ibase_server_info().
-
-
Added context option "http"/"request_fulluri" to send entire URI in request
-which is required format for some proxies. (Sara)
-
Added optional third parameter 'strict' to array_keys(). (Andrey)
-
Added stream_lock() method to userspace streams interface. (Hartmut, Wez)
Readded support for using classes before they are declared according to
-the behavior in PHP 4. This won't work with classes who are using PHP 5
-features such as interfaces. (Zeev, Andi)
Upgraded bundled SQLite library to version 2.8.11. (Ilia, Wez)
-
Improved destructor implementation to always call destructors on clean
-shutdown. An order of destruction is not guaranteed. (Zeev, Andi)
-
Redesigned exception support. This fixes many bugs in the previous design
-such as nested try's and problems with overloaded extensions. (Zeev, Andi)
-
Redesigned clone by adding a clone keyword (clone $obj) and copying all
-properties before __clone() is called. Also allows calling parent __clone
-function by using parent::__clone(). (Zeev, Andi)
-
Fixed interfaces to check for function return-by-reference equality when
-inheriting and implementing interfaces. (Andi, Zeev)
-
Fixed foreach() to respect property visibility. (Marcus)
-
Fixed problem with parse error in include() file not stopping PHP's
-execution. (Ilia)
-
Fixed var_export() to show public, protected and private modifiers properly.
-(Derick)
-
Fixed problems with longlong values in mysqli. (Georg)
-
Fixed class name case preserving of user defined classes. (Marcus)
Improved the speed of internal functions that use callbacks by 40% due to a
-new internal fast_call_user_function() function. (Sterling)
-
Completely Overhauled XML support (Rob, Sterling, Chregu, Marcus)
-
-
Brand new Simplexml extension
-
New DOM extension
-
New XSL extension
-
Moved the old DOM-XML and XSLT extensions to PECL
-
ext/xml can now use both libxml2 and expat to parse XML
-
Removed bundled expat
-
-
-
Removed the bundled MySQL client library. (Sterling)
-
New php.ini options:
-
-
"session.hash_function" and "session.hash_bits_per_character". (Sascha)
-
"mail.force_extra_paramaters". (Derick)
-
"register_long_arrays". (Zeev)
-
-
-
Improved the streams support: (Wez, Sara, Ilia)
-
-
Improved performance of readfile(), fpassthru() and some internal streams
- operations under Win32.
-
stream_socket_client() - similar to fsockopen(), but more powerful.
-
stream_socket_server() - Creates a server socket.
-
stream_socket_accept() - Accept a client connection.
-
stream_socket_get_name() - Get local or remote name of socket.
-
stream_copy_to_stream()
-
stream_get_line() - Reads either the specified number of bytes or until
- the ending string is found.
-
Added context property to userspace streams object.
-
Added generic crypto interface for streams (supports dynamic loading of
- OpenSSL)
-
Added lightweight streaming input abstraction to the Zend Engine scanners
- to provide uniform support for include()'ing data from PHP streams across
- all platforms.
-
Added 'string.base64' stream filter.
-
Renamed stream_register_wrapper() to stream_wrapper_register().
-
Added "ftp://" wrapper support to opendir(), stat() and unlink().
-
Added context options 'method', 'header' and 'content' for "http://" fopen
- wrapper.
-
-
-
Improved the GD extension: (Pierre-Alain Joye, Ilia)
-
-
imagefilter() - Apply different filters to image. (Only available
- with bundled GD library)
-
Antialiased drawing support:
-
-
imageantialias() - (de)active antialias
-
imageline() and imagepolygon() antialias support
-
-
-
-
-
Changed the length parameter in fgetss() to be optional. (Moriyoshi)
-
Changed ini parser to allow for handling of quoted multi-line values. (Ilia)
-
Changed get_extension_funcs() to return list of the built-in Zend Engine
-functions if "zend" is specified as the module name. (Ilia)
-
Changed array_search() to accept also objects as a needle. (Moriyoshi)
-
Changed ext/mcrypt to require libmcrypt version 2.5.6 or greater. (Derick)
-
Changed uniqid() parameters to be optional and allow any prefix length. (Marcus)
-
Added new iconv functions. (Moriyoshi)
-
-
iconv_strlen()
-
iconv_substr()
-
iconv_strpos()
-
iconv_strrpos()
-
iconv_mime_decode()
-
iconv_mime_encode()
-
-
-
Added misc. new functions:
-
-
ldap_sasl_bind(). (peter_c60@hotmail.com, Jani)
-
imap_getacl(). (Dan, Holger Burbach)
-
file_put_contents(). (Sterling)
-
proc_nice() - Changes priority of the current process. (Ilia)
-
pcntl_getpriority() and pcntl_setpriority(). (Ilia)
-
idate(), date_sunrise() and date_sunset(). (Moshe Doron)
-
strpbrk() - Searches a string for a list of characters. (Ilia)
-
get_headers() - Returns headers sent by the server of the specified URL. (Ilia)
-
str_split() - Breaks down a string into an array of elements based on length. (Ilia)
-
array_walk_recursive(). (Ilia)
-
array_combine(). (Andrey)
-
-
-
Added optional parameter to get_browser() to make it return an array. (Jay)
-
Added optional parameter to openssl_sign() to specify the hashing algorithm.(scott@planetscott.ca, Derick)
-
Added optional parameter to sha1(), sha1_file(), md5() and md5_file() which
-makes them return the digest as binary data. (Michael Bretterklieber, Derick)
-
Added optional parameter to mkdir() to make directory creation recursive. (Ilia)
-
Added optional parameter to file() which makes the result array not contain
-the line endings and to skip empty lines. (Ilia)
-
Added new range() functionality:
-
-
Support for float modifier. (Ilia)
-
Detection of numeric values inside strings passed as high & low. (Ilia)
-
Proper handle the situations where high == low. (Ilia)
-
Added an optional step parameter. (Jon)
-
-
-
Added encoding detection feature for expat XML parser. (Adam Dickmeiss, Moriyoshi)
-
Added missing multibyte (unicode) support and numeric entity support to
-html_entity_decode(). (Moriyoshi)
-
Added IPv6 support to ext/sockets. (Sara)
-
Added input filter support. See README.input_filter for more info. (Rasmus)
-
Added a replace count for str_[i]replace(), see . (Sara)
-
Fixed is_executable() to be available also on Windows. (Shane)
-
Fixed dirname() and strip_tags() to be binary-safe. (Moriyoshi)
-
(crash in pathinfo()). (Ilia)
-
and (various mb_send_mail() issues). (Moriyoshi)
-
(Assign by reference function call changes variable
-contents). (Zeev)
-
-
-
-
-
-
-
-
Version 7.4.33
-
-
GD:
-
-
: OOB read due to insufficient input validation in imageloadfont(). (CVE-2022-31630)
-
-
Hash:
-
-
: buffer overflow in hash_update() on long parameter. (CVE-2022-37454)
-
-
-
-
-
-
-
-
Version 7.4.32
-
-
Core:
-
-
: phar wrapper: DOS when using quine gzip file. (CVE-2022-31628)
-
: Don't mangle HTTP variable names that clash with ones that have a specific semantic meaning. (CVE-2022-31629)
: Uninitialized array in pg_query_params(). (CVE-2022-31625)
-
-
-
-
-
-
-
-
Version 7.4.29
-
-
Core:
-
-
No source changes to this release. This update allows for re-building the
- Windows binaries against upgraded dependencies which have received security
- updates.
-
-
Date:
-
-
Updated to latest IANA timezone database (2022a).
-
-
-
-
-
-
-
-
Version 7.4.28
-
-
Filter:
-
-
Fix #81708: UAF due to php_filter_float() failing for ints (CVE-2021-21708)
-
-
-
-
-
-
-
-
Version 7.4.27
-
-
Core:
-
-
(Error on use static:: in __сallStatic() wrapped to Closure::fromCallable()).
-
-
FPM:
-
-
(Future possibility for heap overflow in FPM zlog).
-
-
GD:
-
-
(libpng warning from imagecreatefromstring).
-
-
OpenSSL:
-
-
(./configure: detecting RAND_egd).
-
-
PCRE:
-
-
(Out of bounds in php_pcre_replace_impl).
-
-
Standard:
-
-
(dns_get_record fails on FreeBSD for missing type).
-
(stream_get_contents() may unnecessarily overallocate).
-
-
-
-
-
-
-
-
Version 7.4.26
-
-
Core:
-
-
(Header injection via default_mimetype / default_charset).
-
-
Date:
-
-
(Interval serialization regression since 7.3.14 / 7.4.2).
-
-
MBString:
-
-
(mbstring may use pointer from some previous request).
-
-
MySQLi:
-
-
(Stopped unbuffered query does not throw error).
-
-
PCRE:
-
-
(PCRE2 10.35 JIT performance regression).
-
-
Streams:
-
-
(Memory corruption with user_filter).
-
-
XML:
-
-
(special character is breaking the path in xml function). (CVE-2021-21707)
-
-
-
-
-
-
-
-
Version 7.4.25
-
-
DOM:
-
-
(DOMElement::setIdAttribute() called twice may remove ID).
-
-
FFI:
-
-
("TYPE *" shows unhelpful message when type is not defined).
(CGI doesn't properly validate shebang line contains #!).
-
(Self-assignment in list() may have inconsistent behavior).
-
(Use After Free in GC with Certain Destructors).
-
(Inconsistent: No warning in some cases when stdObj is created on the fly).
-
(Add array_key_exists() to the list of specially compiled functions).
-
(__METHOD__ inconsistent outside of method).
-
(Aliases during inheritance type checks affected by opcache).
-
(Support custom CFLAGS and LDFLAGS from environment).
-
(Stack Overflow caused by circular reference in garbage collection).
-
(Interactive mode does not support PHP 7.3-style heredoc).
-
(call_user_func() passes $this to static methods).
-
(PHP eats the first byte of a program that comes from process substitution).
-
(Segfault caused by indirect expressions in PHP 7.4a1).
-
(SEND_VAR_NO_REF does not always send reference).
-
(Segmentation fault during by-reference property assignment).
-
(Segfault in built-in webserver).
-
(Can't access OneDrive folder).
-
(Unexpected __set behavior with typed properties).
-
(Deprecation notice during string conversion converted to exception hangs).
-
(Static properties/variables containing cycles report as leak).
-
(Include of stream wrapper not reading whole file).
-
(Segmentation fault on zend_check_protected).
-
(Array returned from ArrayAccess is incorrectly unpacked as argument).
-
(Cast to object confuses GC, causes crash).
-
(fstat mode has unexpected value on PHP 7.4).
-
(Second file_put_contents in Shutdown hangs script).
-
(Broken file includes with user-defined stream filters).
-
(Corruption when __unserializing deeply nested structures).
-
(Parse error due to heredoc identifier followed by digit).
-
(Consecutive numeric separators cause OOM error).
-
(PEAR installation failure).
-
(Crash when using undefined variable as object).
-
(auto_detect_line_endings value not parsed as bool).
-
(token_get_all() does not properly tokenize FOO<?php with short_open_tag=0).
-
(Does not compile with DTRACE anymore).
-
(Out of memory error).
-
(method_exists() in php74 works differently from php73 in checking priv. methods).
-
(SEGFAULT in ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER).
-
(Memory corruption using Closure::bindTo).
-
(Parse errors classified as highest log-level).
-
(stream_write bad error detection).
-
(redefinition of typedef zend_property_info).
-
(./configure generates invalid php_version.h).
-
Fixed incorrect usage of QM_ASSIGN instruction. It must not return IS_VAR. As a side effect, this allowed passing left hand list() "by reference", instead of compile-time error.
-
-
-
CLI:
-
-
The built-in CLI server now reports the request method in log files.
-
-
-
COM:
-
-
Deprecated registering of case-insensitive constants from typelibs.
-
(new COM Crash).
-
(Appending to a variant array causes segfault).
-
-
-
CURL:
-
-
(Use curl_multi_wait() so that timeouts are respected).
-
(CURLFile should support UNICODE filenames).
-
Deprecated CURLPIPE_HTTP1.
-
Deprecated $version parameter of curl_version().
-
-
-
Date:
-
-
Updated timelib to 2018.02.
-
(discrepency between time and microtime).
-
(\DateInterval incorrectly unserialized).
-
(print_r of DateTime creating side-effect).
-
(Casting a DateTime to array no longer returns its properties).
(Disable cloning of PDO handle/connection objects).
-
-
phpdbg:
-
-
(too many open files).
-
(phpdbg segfaults on listing some conditional breakpoints).
-
(phpdbg build fails when readline is shared).
-
-
Reflection:
-
-
(ReflectionClass::getMethods(null) doesn't work).
-
(Different behavior: always calls destructor).
-
-
Standard:
-
-
(Segmentation fault in extract() when overwriting reference with itself).
-
(Crash due to null pointer in parse_ini_string with INI_SCANNER_TYPED).
-
(Inconsistent substr_compare behaviour with empty haystack).
-
-
-
-
-
-
Version 7.3.4
-
-
Core:
-
-
(Nullptr deref in zend_compile_expr).
-
(Segmentation fault on break 2147483648).
-
(Anonymous classes can lose their interface information).
-
(Stack Overflow caused by circular reference in garbage collection).
-
(Wrong value for 'syslog.filter' documented in php.ini).
-
-
Apache2Handler:
-
-
(BOM in sapi/apache2handler/php_functions.c).
-
-
Bcmath:
-
-
(bcpow() implementation related to gcc compiler optimization).
-
-
CLI Server:
-
-
(Incorrect IP set to $_SERVER['REMOTE_ADDR'] on the localhost).
-
-
COM:
-
-
(Crash when php unload).
-
-
EXIF:
-
-
(Heap-buffer-overflow in php_ifd_get32s). (CVE-2019-11034)
-
(Heap-buffer-overflow in exif_iif_add_value). (CVE-2019-11035)
-
-
FPM:
-
-
(FPM fails to build on AIX due to missing WCOREDUMP).
-
-
GD:
-
-
(Writing truecolor images as GIF ignores interlace flag).
-
-
MySQLi:
-
-
(mysqli_fetch_field hangs scripts).
-
-
Opcache:
-
-
(Incorrect pi node insertion for jmpznz with identical successors).
-
-
PCRE:
-
-
(preg_split does not raise an error on invalid UTF-8).
-
-
Phar:
-
-
(Crash on Big_Endian platform).
-
-
phpdbg:
-
-
(phpdbg break cmd aliases listed in help do not match actual aliases).
-
-
sodium:
-
-
(sign_detached() strings not terminated).
-
-
SQLite3:
-
-
Added sqlite3.defensive INI directive.
-
-
Standard:
-
-
(Segmentation fault when using undefined constant in custom wrapper).
-
(Crash in extract() when overwriting extracted array).
-
(var_export() does not create a parsable value for PHP_INT_MIN).
-
(FTP stream wrapper should set the directory as executable).
-
-
-
-
-
-
Version 7.3.3
-
-
Core:
-
-
(Core dump using parse_ini_string with numeric sections).
-
(Buffer Overflow via overly long Error Messages).
-
(Disabling class causes segfault on member access).
-
(Custom extension Segmentation fault when declare static property).
-
(PHP crashes when parsing `(2)::class`).
-
(iptcembed broken function).
-
(rename() across the device may allow unwanted access during processing). (CVE-2019-9637)
-
-
COM:
-
-
(Already defined constants are not properly reported).
-
(Persistence confusion in php_com_import_typelib()).
-
-
EXIF:
-
-
(Uninitialized read in exif_process_IFD_in_TIFF). (CVE-2019-9641)
-
(Invalid Read on exif_process_SOFn). (CVE-2019-9640)
-
(Uninitialized read in exif_process_IFD_in_MAKERNOTE). (CVE-2019-9638)
-
(Uninitialized read in exif_process_IFD_in_MAKERNOTE). (CVE-2019-9639)
-
-
Mbstring:
-
-
(mb_ereg_replace() with trailing backslash adds null byte).
-
-
MySQL:
-
-
Disabled LOCAL INFILE by default, can be enabled using php.ini directive mysqli.allow_local_infile for mysqli, or PDO::MYSQL_ATTR_LOCAL_INFILE attribute for pdo_mysql.
-
-
OpenSSL:
-
-
(feof might hang on TLS streams in case of fragmented TLS records).
-
-
PDO_OCI:
-
-
Support Oracle Database tracing attributes ACTION, MODULE, CLIENT_INFO, and CLIENT_IDENTIFIER.
-
-
PHAR:
-
-
(Null Pointer Dereference in phar_create_or_parse_filename).
-
(phar_tar_writeheaders_int() buffer overflow).
-
-
phpdbg:
-
-
(phpdbg support for display_errors=stderr).
-
-
SPL:
-
-
(DirectoryIterator glob:// don't support current path relative queries).
-
(openFile() silently truncates after a null byte).
-
-
Standard:
-
-
(Unintialized php_stream_statbuf in stat functions).
-
(setcookie() sets incorrect SameSite header if all of its options filled).
-
-
-
-
-
-
Version 7.3.2
-
-
Core:
-
-
(memcpy with negative length via crafted DNS response). (CVE-2019-9022)
-
(Recursion detection broken when printing GLOBALS).
-
("undefined function" message no longer includes namespace).
-
(base64_encode / base64_decode doest not work on nested VM).
-
(__callStatic may get incorrect arguments).
-
(__DIR__, __FILE__, realpath() reveal physical path for subst virtual drive).
-
(Segfault when using 2 RecursiveFilterIterator).
-
(PHP 7.3 built with ASAN crashes in zend_cpu_supports_avx2).
-
(Zend engine crashes when calling realpath in invalid working dir).
-
-
Curl:
-
-
(Segfault with H2 server push).
-
-
Fileinfo:
-
-
(webm files incorrectly detected as application/octet-stream).
-
-
FPM:
-
-
(php-fpm crashes with Main process exited, code=dumped, status=11/SEGV).
-
-
GD:
-
-
(imagescale(…, IMG_BILINEAR_FIXED) can cause black border).
-
(gdImageFilledArc() doesn't properly draw pies).
-
(imagescale() may return image resource on failure).
-
(1bpp BMPs may fail to be loaded).
-
(imagewbmp() segfaults with very large images).
-
-
ldap:
-
-
(ldap_bind using ldaps or ldap_start_tls()=exception in libcrypto-1_1-x64.dll).
-
-
Mbstring:
-
-
(mb_ereg_replace() doesn't replace a substitution variable).
-
(mb_scrub() silently truncates after a null byte).
-
-
MySQLnd:
-
-
(Unbuffered queries memory leak).
-
(In mysqlnd_ext_plugin.h the plugin methods family has no external visibility).
-
-
Opcache:
-
-
(Assertion failed in dce_live_ranges).
-
(value of variable assigned in a switch() construct gets lost).
-
(php-fpm workers are segfaulting in zend_gc_addre).
-
(configure fails on 64-bit AIX when opcache enabled).
-
(Opcache literal compaction is incompatible with EXT opcodes).
-
-
PCRE:
-
-
(get_browser with empty string).
-
-
PDO:
-
-
(array_walk_recursive corrupts value types leading to PDO failure).
-
-
PDO MySQL:
-
-
(PDO MySQL segfaults with persistent connection).
-
-
SOAP:
-
-
(Segmentation Fault when executing method with an empty parameter).
-
-
Sockets:
-
-
(socket_recvfrom may return an invalid 'from' address on MacOS).
-
-
SPL:
-
-
(segfault occurs when add property to unserialized empty ArrayObject).
-
-
Standard:
-
-
(segfault about array_multisort).
-
(parse_str segfaults when inserting item into existing array).
-
-
-
-
-
-
Version 7.3.1
-
-
Core:
-
-
(Build failure on Mac OS X on 32-bit Intel).
-
(zend_signal_startup() needs ZEND_API).
-
(PHP generates "FE_FREE" opcode on the wrong line).
-
(magic methods inherited from a trait may be ignored).
-
-
CURL:
-
-
(curl_getinfo returning microseconds, not seconds).
-
-
COM:
-
-
(Serializing or unserializing COM objects crashes).
-
-
Exif:
-
-
(Unsigned rational numbers are written out as signed rationals).
-
-
GD:
-
-
(Incorrect error handling of imagecreatefromjpeg()).
-
(auto cropping has insufficient precision).
-
(imagecropauto(…, GD_CROP_SIDES) crops left but not right).
-
(efree() on uninitialized Heap data in imagescale leads to use-after-free). (CVE-2016-10166)
-
(imagecolormatch Out Of Bounds Write on Heap). (CVE-2019-6977)
-
-
MBString:
-
-
(Negative size parameter in mb_split). (CVE-2019-9025)
-
(Buffer overflow on mb regex functions - fetch_token). (CVE-2019-9023)
-
(heap buffer overflow in mb regex functions - compile_string_node). (CVE-2019-9023)
-
(heap buffer overflow in multibyte match_at). (CVE-2019-9023)
-
(heap buffer overflow due to incorrect length in expand_case_fold_string). (CVE-2019-9023)
-
(buffer overflow in fetch_token). (CVE-2019-9023)
-
(Buffer overflow in multibyte case folding - unicode). (CVE-2019-9023)
-
(Heap overflow in utf32be_mbc_to_code). (CVE-2019-9023)
-
-
OCI8:
-
-
(oci_pconnect with OCI_CRED_EXT not working).
-
Added oci_set_call_timeout() for call timeouts.
-
Added oci_set_db_operation() for the DBOP end-to-end-tracing attribute.
-
-
Opcache:
-
-
(CFG assertion failure on multiple finalizing switch frees in one block).
-
(OPcache optimization problem for ArrayAccess->offsetGet).
-
-
PCRE:
-
-
(Infinite loop in preg_replace_callback).
-
-
PDO:
-
-
Handle invalid index passed to PDOStatement::fetchColumn() as error.
-
-
Phar:
-
-
(heap buffer overflow in phar_detect_phar_fname_ext). (CVE-2019-9021)
-
-
Soap:
-
-
(Segfault when using SoapClient with null options).
-
-
Sockets:
-
-
(Unsupported IPV6_RECVPKTINFO constants on macOS).
-
-
Sodium:
-
-
(SodiumException segfaults on PHP 7.3).
-
-
SPL:
-
-
(spl_autoload causes segfault).
-
(class_uses causes segfault).
-
-
SQLite3:
-
-
(Issue with re-binding on SQLite3).
-
-
Xmlrpc:
-
-
(heap out of bounds read in xmlrpc_decode()). (CVE-2019-9020)
-
(Global out of bounds read in xmlrpc base64 code). (CVE-2019-9024)
-
-
-
-
-
-
Version 7.3.0
-
-
Core:
-
-
Improved PHP GC.
-
Redesigned the old ext_skel program written in PHP, run: 'php ext_skel.php' for all options. This means there are no dependencies, thus making it work on Windows out of the box.
-
Removed support for BeOS.
-
Add PHP_VERSION to phpinfo() <title/>.
-
Add net_get_interfaces().
-
Implemented flexible heredoc and nowdoc syntax, per RFC https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes.
-
Added support for references in list() and array destructuring, per RFC https://wiki.php.net/rfc/list_reference_assignment.
-
Improved effectiveness of ZEND_SECURE_ZERO for NetBSD and systems without native similar feature.
-
Added syslog.facility and syslog.ident INI entries for customizing syslog logging.
-
(Memory leak in zend_register_functions() in ZTS mode).
-
(support append mode in temp/memory streams).
-
(Uncaught exceptions not being formatted properly when error_log set to "syslog").
-
(Segfault when calling is_callable on parent).
-
(broken links and unused config items in distributed ini files).
-
(Composed class has fatal error with duplicate, equal const properties).
-
(identical trait methods raise errors during composition).
-
(Clang ignores fastcall calling convention on variadic function).
-
(Remove inconsitency of internal exceptions and user defined exceptions).
-
(Mathematical operations convert objects to integers).
-
(Internal class cast handler uses integer instead of float).
-
(Fatal error instead of Error exception when base class is not found).
-
(Wording: "iterable" is not a scalar type).
-
(config.guess/config.sub do not recognize RISC-V).
-
(Segfault in zend_objects_store_put).
-
(ftruncate fails on files > 2GB).
-
(Inherited static properties can be desynchronized from their parent by ref).
-
(Changed behaviour in unclosed HereDoc).
-
(Constant numeric strings become integers when used as ArrayAccess offset).
-
(Some nullary functions don't check the number of arguments).
-
(Error relocating sapi/cli/php: unsupported relocation type 37).
-
The declaration and use of case-insensitive constants has been deprecated.
-
Added syslog.filter INI entry for syslog filtering.
-
(Segfault with divide-assign op and __get + __set).
-
(RE2C_FLAGS rarely honoured) (Cristian Rodríguez)
-
Fixed broken zend_read_static_property (Laruence)
-
(Traits used on the parent are ignored for child classes).
-
(‘asm’ operand has impossible constraints in zend_operators.h).
-
(Crash in ZEND_COALESCE_SPEC_TMP_HANDLER - assertion in _get_zval_ptr_tmp failed).
(Output after stdout/stderr closed cause immediate exit with status 0).
-
(php-win.exe corrupts unicode symbols from cli parameters).
-
-
cURL:
-
-
Expose curl constants from curl 7.50 to 7.61.
-
(Fixed finding CURL on systems with multiarch support).
-
-
Date:
-
-
: Add DateTime::createFromImmutable() method.
-
(DateInterval microseconds property always 0).
-
(calling var_dump on a DateTimeZone object modifies it).
-
(mismatch arginfo for date_create).
-
Updated timelib to 2018.01RC1 to address several bugs:
-
(DateTime::createFromFormat does not accept 'v' format specifier).
-
(Wrap around behaviour for microseconds is not working).
-
(DateTime::diff gives wrong diff when the actual diff is less than 1 second).
-
-
DBA:
-
-
(compiler warnings emitted).
-
-
DOM:
-
-
(DOMDocument::formatOutput attribute sometimes ignored).
-
-
Fileinfo:
-
-
(slowness regression in 7.2/7.3 (compared to 7.1)).
-
-
Filter:
-
-
Added the 'add_slashes' sanitization mode (FILTER_SANITIZE_ADD_SLASHES).
-
-
FPM:
-
-
Added fpm_get_status function.
-
(getallheaders() missing with PHP-FPM).
-
(Long messages into stdout/stderr are truncated incorrectly) - added new log related FPM configuration options: log_limit, log_buffering and decorate_workers_output.
-
-
ftp:
-
-
(ftp_close(): SSL_read on shutdown).
-
-
GD:
-
-
Added support for WebP in imagecreatefromstring().
-
-
GMP:
-
-
Export internal structures and accessor helpers for GMP object.
-
Added gmp_binomial(n, k).
-
Added gmp_lcm(a, b).
-
Added gmp_perfect_power(a).
-
Added gmp_kronecker(a, b).
-
-
iconv:
-
-
(iconv_mime_encode() fails to Q-encode UTF-8 string).
(preg_quote() does not quote # control character).
-
(\w no longer includes unicode characters).
-
(Regression in preg_match makes it fail with PREG_JIT_STACKLIMIT_ERROR).
-
(preg_match difference between 7.3 and < 7.3).
-
-
PDO_DBlib:
-
-
(allow 0-column rowsets to be skipped automatically).
-
Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO instance.
-
Treat DATETIME2 columns like DATETIME.
-
(allow locales.conf to drive datetime format).
-
-
PDO_Firebird:
-
-
(PDO_Firebird returns only NULLs for results with boolean for FIREBIRD >= 3.0).
-
-
PDO_OCI:
-
-
(PDO_PCO with PHP-FPM: OCI environment initialized before PHP-FPM sets it up).
-
-
PDO SQLite:
-
-
Add support for additional open flags
-
-
pgsql:
-
-
Added new error constants for pg_result_error(): PGSQL_DIAG_SCHEMA_NAME, PGSQL_DIAG_TABLE_NAME, PGSQL_DIAG_COLUMN_NAME, PGSQL_DIAG_DATATYPE_NAME, PGSQL_DIAG_CONSTRAINT_NAME and PGSQL_DIAG_SEVERITY_NONLOCALIZED.
-
(pg_convert has a broken regex for the 'TIME WITHOUT TIMEZONE' data type).
-
-
phar:
-
-
(include_path has a 4096 char limit in some cases).
-
(deal with leading slash when adding files correctly).
-
(PharData always creates new files with mode 0666).
-
(Heap Buffer Overflow (READ: 4) in phar_parse_pharfile). (CVE-2018-20783)
-
-
readline:
-
-
Added completion_append_character and completion_suppress_append options to readline_info() if linked against libreadline.
-
-
Session:
-
-
(session fails to start after having headers sent).
-
-
SimpleXML:
-
-
(SimpleXML casts integers wrong).
-
(Assignment of empty string creates extraneous text node).
-
-
Sockets:
-
-
(Validate length on socket_write).
-
-
SOAP:
-
-
(Wrong reflection on SoapClient::__setSoapHeaders).
-
(SoapClient generates E_ERROR even if exceptions=1 is used).
(Heap-buffer-overflow in php_ifd_get32s). (CVE-2019-11034)
-
(Heap-buffer-overflow in exif_iif_add_value). (CVE-2019-11035)
-
-
FPM:
-
-
(FPM fails to build on AIX due to missing WCOREDUMP).
-
-
GD:
-
-
(Writing truecolor images as GIF ignores interlace flag).
-
-
MySQLi:
-
-
(mysqli_fetch_field hangs scripts).
-
-
Opcache:
-
-
(Opcache passes wrong value for inline array push assignments).
-
(Incorrect pi node insertion for jmpznz with identical successors).
-
-
phpdbg:
-
-
(phpdbg break cmd aliases listed in help do not match actual aliases).
-
-
sodium:
-
-
(sign_detached() strings not terminated).
-
-
SQLite3:
-
-
Added sqlite3.defensive INI directive.
-
-
Standard:
-
-
(Segmentation fault when using undefined constant in custom wrapper).
-
(Crash in extract() when overwriting extracted array).
-
(var_export() does not create a parsable value for PHP_INT_MIN).
-
(FTP stream wrapper should set the directory as executable).
-
-
-
-
-
-
Version 7.2.16
-
-
Core:
-
-
(Core dump using parse_ini_string with numeric sections).
-
(rename() across the device may allow unwanted access during processing). (CVE-2019-9637)
-
-
COM:
-
-
(Already defined constants are not properly reported).
-
-
EXIF:
-
-
(Uninitialized read in exif_process_IFD_in_TIFF). (CVE-2019-9641)
-
(Invalid Read on exif_process_SOFn). (CVE-2019-9640)
-
(Uninitialized read in exif_process_IFD_in_MAKERNOTE). (CVE-2019-9638)
-
(Uninitialized read in exif_process_IFD_in_MAKERNOTE). (CVE-2019-9639)
-
-
PDO_OCI:
-
-
Support Oracle Database tracing attributes ACTION, MODULE, CLIENT_INFO, and CLIENT_IDENTIFIER.
-
-
PHAR:
-
-
(Null Pointer Dereference in phar_create_or_parse_filename).
-
-
SPL:
-
-
(DirectoryIterator glob:// don't support current path relative queries).
-
(openFile() silently truncates after a null byte).
-
-
Standard:
-
-
(Unintialized php_stream_statbuf in stat functions).
-
-
MySQL:
-
-
Disabled LOCAL INFILE by default, can be enabled using php.ini directive mysqli.allow_local_infile for mysqli, or PDO::MYSQL_ATTR_LOCAL_INFILE attribute for pdo_mysql.
-
-
-
-
-
-
Version 7.2.15
-
-
Core:
-
-
(__callStatic may get incorrect arguments).
-
(Disabling class causes segfault on member access).
-
(PHP crashes when parsing `(2)::class`).
-
-
Curl:
-
-
(Segfault with H2 server push).
-
-
GD:
-
-
(imagescale(…, IMG_BILINEAR_FIXED) can cause black border).
-
(gdImageFilledArc() doesn't properly draw pies).
-
(imagescale() may return image resource on failure).
-
(1bpp BMPs may fail to be loaded).
-
(imagewbmp() segfaults with very large images).
-
-
ldap:
-
-
(ldap_bind using ldaps or ldap_start_tls()=exception in libcrypto-1_1-x64.dll).
-
-
Mbstring:
-
-
(mb_scrub() silently truncates after a null byte).
-
-
MySQLnd:
-
-
(In mysqlnd_ext_plugin.h the plugin methods family has no external visibility).
-
-
Opcache:
-
-
(configure fails on 64-bit AIX when opcache enabled).
-
-
OpenSSL:
-
-
(feof might hang on TLS streams in case of fragmented TLS records).
-
-
PDO:
-
-
(array_walk_recursive corrupts value types leading to PDO failure).
-
-
Sockets:
-
-
(socket_recvfrom may return an invalid 'from' address on MacOS).
-
-
Standard:
-
-
(segfault about array_multisort).
-
(parse_str segfaults when inserting item into existing array).
-
-
-
-
-
-
Version 7.2.14
-
-
Core:
-
-
(memcpy with negative length via crafted DNS response). (CVE-2019-9022)
-
(zend_signal_startup() needs ZEND_API).
-
(PHP generates "FE_FREE" opcode on the wrong line).
-
-
COM:
-
-
(Serializing or unserializing COM objects crashes).
-
-
Date:
-
-
(DateTime::diff gives wrong diff when the actual diff is less than 1 second).
-
-
Exif:
-
-
(Unsigned rational numbers are written out as signed rationals).
-
-
GD:
-
-
(efree() on uninitialized Heap data in imagescale leads to use-after-free). (CVE-2016-10166)
-
(imagecolormatch Out Of Bounds Write on Heap). (CVE-2019-6977)
-
(Incorrect error handling of imagecreatefromjpeg()).
-
(auto cropping has insufficient precision).
-
(imagecropauto(…, GD_CROP_SIDES) crops left but not right).
-
-
IMAP:
-
-
(null pointer dereference in imap_mail).
-
-
Mbstring:
-
-
(Buffer overflow on mb regex functions - fetch_token). (CVE-2019-9023)
-
(heap buffer overflow in mb regex functions - compile_string_node). (CVE-2019-9023)
-
(heap buffer overflow in multibyte match_at). (CVE-2019-9023)
-
(heap buffer overflow due to incorrect length in expand_case_fold_string). (CVE-2019-9023)
-
(buffer overflow in fetch_token). (CVE-2019-9023)
-
(Buffer overflow in multibyte case folding - unicode). (CVE-2019-9023)
-
(Heap overflow in utf32be_mbc_to_code). (CVE-2019-9023)
-
-
OCI8:
-
-
(oci_pconnect with OCI_CRED_EXT not working).
-
Added oci_set_call_timeout() for call timeouts.
-
Added oci_set_db_operation() for the DBOP end-to-end-tracing attribute.
-
-
Opcache:
-
-
(CFG assertion failure on multiple finalizing switch frees in one block).
-
-
PDO:
-
-
Handle invalid index passed to PDOStatement::fetchColumn() as error.
-
-
Phar:
-
-
(heap buffer overflow in phar_detect_phar_fname_ext). (CVE-2019-9021)
-
-
Sockets:
-
-
(Unsupported IPV6_RECVPKTINFO constants on macOS).
-
-
SQLite3:
-
-
(Issue with re-binding on SQLite3).
-
-
Xmlrpc:
-
-
(heap out of bounds read in xmlrpc_decode()). (CVE-2019-9020)
-
(Global out of bounds read in xmlrpc base64 code). (CVE-2019-9024)
-
-
-
-
-
-
Version 7.2.13
-
-
ftp:
-
-
(ftp_close(): SSL_read on shutdown).
-
-
CLI:
-
-
(php-win.exe corrupts unicode symbols from cli parameters).
-
-
Fileinfo:
-
-
(slowness regression in 7.2/7.3 (compared to 7.1)).
Added ZEND_IN_ARRAY instruction, implementing optimized in_array() builtin function, through hash lookup in flipped array.
-
Removed IS_TYPE_IMMUTABLE (it's the same as COPYABLE & !REFCOUNTED).
-
Removed the sql.safe_mode directive.
-
Removed support for Netware.
-
Renamed ReflectionClass::isIterateable() to ReflectionClass::isIterable() (alias original name for BC).
-
(WSA cleanup executes before MSHUTDOWN).
-
(Disallow mail header injections by extra headers) (Yasuo)
-
(proc_nice() for Windows).
-
Fix pthreads detection when cross-compiling (ffontaine)
-
Fixed memory leaks caused by exceptions thrown from destructors. (Bob, Dmitry).
-
(uniqid() should use better random source).
-
(Add ENABLE_VIRTUAL_TERMINAL_PROCESSING flag for php.exe).
-
Implemented "Convert numeric keys in object/array casts" RFC, fixes bugs , , , , , etc.
-
Implemented "Deprecate and Remove Bareword (Unquoted) Strings" RFC.
-
Raised minimum supported Windows versions to Windows 7/Server 2008 R2.
-
Implemented minor optimization in array_keys/array_values().
-
Added PHP_OS_FAMILY constant to determine on which OS we are.
-
(Method compatibility check looks to original definition and not parent).
-
(JSON_OBJECT_AS_ARRAY not respected).
-
(Corrupted class entries on shutdown when a destructor spawns another object).
-
(Filename got limited to MAX_PATH on Win32 when scan directory).
-
, bug , bug , bug and others related to interned strings handling in TS builds.
-
Implemented "Trailing Commas In List Syntax" RFC for group use lists only.
-
(It's possible to override trait property with different loosely-equal value).
-
(Restraining __construct() access level in subclass gives a fatal error).
-
(Cannot override an abstract method with an abstract method).
-
(Traits enforce different inheritance rules).
-
Fixed misparsing of abstract unix domain socket names.
-
Change PHP_OS_FAMILY value from "OSX" to "Darwin".
-
Allow loading PHP/Zend extensions by name in ini files (extension=<name>).
-
Added object type annotation.
-
(crash with a combination of INI entries at startup).
-
(isset on zero-prefixed numeric indexes in array broken).
-
Added new VM instuctions ISSET_ISEMPTY_CV and UNSET_CV. Previously they were implemented as ISSET_ISEMPTY_VAR and UNSET_VAR variants with ZEND_QUICK_SET flag.
-
(unserialize() doesn't handle changes in property visibility).
-
(extension_dir = "./ext" now use current directory for base).
-
(Improved error message on fetching property of non-object).
-
(buildcheck.sh check for autoconf version needs to be updated for v2.64).
-
(Data race in ZTS builds).
-
("stream_copy_to_stream" doesn't stream anymore).
-
-
cURL:
-
-
(OpenSSL support not detected).
-
Better fix for (use pkg-config instead of curl-config).
-
-
Date:
-
-
(Impossible to prototype DateTime::createFromFormat).
-
(Adding the DateTime constants to the DateTimeInterface interface).
-
(Out-Of-Bounds Read in timelib_meridian()). (CVE-2017-16642)
-
(redefinition of typedefs ttinfo and t1info).
-
(DateInterval microseconds property always 0).
-
-
Dba:
-
-
(flatfile: dba_fetch() fails to read replaced entry).
-
-
DOM:
-
-
(Implement Countable for DomNodeList and DOMNamedNodeMap).
-
-
EXIF:
-
-
Added support for vendor specific tags for the following formats: Samsung, DJI, Panasonic, Sony, Pentax, Minolta, Sigma/Foveon, AGFA, Kyocera, Ricoh & Epson.
-
(exif_read_data() fails to read all data for some images).
-
(Type confusion in exif_read_data() leading to heap overflow in debug mode).
-
(Exif Header component value check error).
-
(Corrupt EXIF header: maximum directory nesting level reached for some cameras).
-
Fixed Redhat bug #1362571 (PHP not returning full results for exif_read_data function).
-
(exif_read_data/thumbnail: add support for stream resource).
-
Deprecated the read_exif_data() alias.
-
(exif_read_data(): "Illegal IFD size" warning occurs with correct exif format).
-
(EXIF thumbnails not read anymore).
-
(php crashes with segfault when exif_read_data called).
-
(exif_read_data(): Illegal IFD offset (works fine with other exif readers).
-
-
Fileinfo:
-
-
Upgrade bundled libmagic to 5.31.
-
-
FPM:
-
-
Configuration to limit fpm slow log trace callers.
-
(php_value acts like php_admin_value).
-
-
FTP:
-
-
Implement MLSD for structured listing of directories.
-
Added ftp_append() function.
-
-
GD:
-
-
Implemented imageresolution as getter and setter (Christoph)
-
(gd.h: stdarg.h include missing for va_list use in gdErrorMethod).
-
(Memory disclosure or DoS via crafted .bmp image).
-
-
GMP:
-
-
(gmp_fact() silently ignores non-integer input).
-
-
Hash:
-
-
Changed HashContext from resource to object.
-
Disallowed usage of non-cryptographic hash functions with HMAC and PBKDF2.
-
(sha3 is not supported on bigendian machine).
-
-
IMAP:
-
-
(imap_mailboxmsginfo() return wrong size).
-
-
Intl:
-
-
(test using Spoofchecker which may be unavailable).
-
([REGRESSION] IntlDateFormatter::parse() does not change $position argument).
-
-
JSON:
-
-
Add JSON_INVALID_UTF8_IGNORE and JSON_INVALID_UTF8_SUBSTITUTE options for json_encode and json_decode to ignore or replace invalid UTF-8 byte sequences - it addresses request .
-
(Buffer overflow in json_decode() with JSON_INVALID_UTF8_IGNORE or JSON_INVALID).
-
(JSON_PARTIAL_OUTPUT_ON_ERROR can result in JSON with null key).
-
-
LDAP:
-
-
(Support for LDAP EXOP operations)
-
Fixed support for LDAP_OPT_SERVER_CONTROLS and LDAP_OPT_CLIENT_CONTROLS in ldap_get_option
-
Fixed passing an empty array to ldap_set_option for client or server controls.
-
-
Mbstring:
-
-
(mb_chr() and mb_ord()).
-
(mb_scrub()).
-
(enhancement for mb_convert_encoding() that handles multibyte replacement char nicely).
-
Added array input support to mb_convert_encoding().
-
Added array input support to mb_check_encoding().
-
(enhancement for mb_substitute_character).
-
Update to oniguruma version 6.3.0.
-
(mb_strtolower fails on titlecase characters).
-
-
Mcrypt:
-
-
The deprecated mcrypt extension has been moved to PECL.
-
-
Opcache:
-
-
Added global optimisation passes based on data flow analysis using Single Static Assignment (SSA) form: Sparse Conditional Constant Propagation (SCCP), Dead Code Elimination (DCE), and removal of unused local variables (Nikita, Dmitry)
(heap-use-after-free when unserializing invalid array size). (CVE-2017-12932)
-
(A Denial of Service Vulnerability was found when performing deserialization).
-
-
WDDX:
-
-
(WDDX uses wrong decimal seperator).
-
-
XMLRPC:
-
-
(Incorrect xmlrpc serialization for classes with declared properties).
-
-
-
-
-
-
-
Version 7.1.8
-
-
Core:
-
-
(Loading PHP extension with already registered function name leads to a crash).
-
(parse_url() broken when query string contains colon).
-
(Unary operator expected error on some systems).
-
(Use After Free in unserialize() SplFixedArray).
-
(Crash when crawling through network share).
-
(fixed incorrect poll.h include).
-
(fixed incorrect errno.h include).
-
-
Date:
-
-
(property_exists returns true on unknown DateInterval property).
-
-
OCI8:
-
-
(Integer overflow in oci_bind_array_by_name).
-
-
Opcache:
-
-
(Infinite loop in type inference when using HTMLPurifier).
-
-
OpenSSL:
-
-
(pkcs7_en/decrypt does not work if \x0a is used in content).
-
Added OPENSSL_DONT_ZERO_PAD_KEY constant to prevent key padding and fix bug (openssl_open() returns junk on envelope < 16 bytes) and bug (OpenSSL Blowfish encryption is incorrect for short keys).
Added support for negative string offsets in string offset syntax and various string functions.
-
Added a form of the list() construct where keys can be specified.
-
Implemented safe execution timeout handling, that prevents random crashes after "Maximum execution time exceeded" error.
-
Implemented the RFC `Support Class Constant Visibility`.
-
Implemented the RFC `Catching multiple exception types`.
-
Implemented logging to syslog with dynamic error levels.
-
(Support "nmake test" on building extensions by phpize).
-
Implemented RFC: Iterable.
-
Implemented RFC: Closure::fromCallable (Danack)
-
Implemented RFC: Replace "Missing argument" warning with "\ArgumentCountError" exception.
-
Implemented RFC: Fix inconsistent behavior of $this variable.
-
(Logging of "Internal Zend error - Missing class information" missing class name).
-
Fixed memory leak(null coalescing operator with Spl hash).
-
(Slow performance when fetching large dataset with mysqli / PDO).
-
(Use After Free Vulnerability in unserialize()). (CVE-2016-9936)
-
(Ilegal write/read access caused by gdImageAALine overflow).
-
(imagefilltoborder stackoverflow on truecolor images). (CVE-2016-9933)
-
(Exception::__toString() cause circular references).
-
((Float)"Nano" == NAN).
-
(Segfault in __clone > Exception.toString > __get).
-
Fixed for (Write out of bounds at number_format).
-
Fix pthreads detection when cross-compiling (ffontaine)
-
(try/catch not working with two exceptions inside a same operation).
-
(segfault on undefined function).
-
(PHP hangs if error handler throws while accessing undef const in default value).
-
(parse error: Invalid numeric literal).
-
(parse_str() without a second argument leads to crash).
-
(Heap Buffer Overflow in virtual_popen of zend_virtual_cwd.c).
-
(crypt broken when salt is 'too' long).
-
(Null pointer deref in zval_delref_p).
-
(assign_dim on string doesn't reset hval).
-
(Reference is lost after array_slice()).
-
(Out of bounds global memory read in BF_crypt triggered by password_verify).
-
(Segfault with __get returned by ref).
-
(PHP Segfaults when trying to expand an infinite operator).
-
TypeError messages for arg_info type checks will now say "must be ... or null" where the parameter or return type accepts null.
-
(stream_socket_recvfrom read access violation).
-
(Create an Unexpected Object and Don't Invoke __wakeup() in Deserialization).
-
(PHP Session Data Injection Vulnerability).
-
(memory allocator fails to realloc small block to large one).
-
Fixed URL rewriter. It would not rewrite '//example.com/' URL unconditionally. URL rewrite target hosts whitelist is implemented.
-
(phpize (on Windows) ignores PHP_PREFIX).
-
(getmxrr broken).
-
(Caught exception assignment to variables ignores references).
-
(Calling an earlier instance of an included anonymous class fatals).
-
(previous property undefined in Exception after deserialization).
-
(Different references behavior comparing to PHP 5).
-
(VERIFY_RETURN type casts visible in finally).
-
(Return by reference with finally is not memory safe).
-
(Wrong return value if var modified in finally).
-
(Memory leak when array altered in destructor).
-
(Memory error on $arr[$a] =& $arr[$b] if RHS rehashes).
-
Added new constant PHP_FD_SETSIZE.
-
Added optind parameter to getopt().
-
Added PHP to SAPI error severity mapping for logs.
-
(Unable to set --enable-debug on building extensions by phpize on Windows).
-
(The destructor is called when an exception is thrown from the constructor).
-
Implemented RFC: RNG Fixes.
-
Implemented email validation as per RFC 6531.
-
(Stack-based buffer overflow vulnerability in virtual_file_ex).
-
(HTTP_PROXY is improperly trusted by some PHP libraries and applications).
-
(dtrace issue with reflection (failed test)).
-
(strange references after recursive function call and "switch" statement).
-
(Segmentation fault: RFC list_keys).
-
(list() regression).
-
(TypeError after Generator function w/declared return type finishes).
-
(tempnam() should raise notice if falling back to temp dir).
-
Fixed UTF-8 and long path support on Windows.
-
(Assignment via string index access on an empty string converts to array).
-
(Exceptions can leak temporary variables).
-
(It is possible to stiffen child class members visibility).
-
(Generators don't participate in cycle GC).
-
(Memleak if return in finally block).
-
(Missing separation of properties HT in foreach etc).
-
(Aborted Generators continue after nested finally).
-
(String offset assignment from an empty string inserts null byte).
-
(ASCII 0x7F Delete control character permitted in identifiers).
-
(Nested try/finally blocks losing return value).
-
(Finally leaks on nested exceptions).
-
(php-cgi.exe missing UAC manifest).
-
Change statement and fcall extension handlers to accept frame.
-
Number operators taking numeric strings now emit E_NOTICEs or E_WARNINGs when given malformed numeric strings.
-
(int), intval() where $base is 10 or unspecified, settype(), decbin(), decoct(), dechex(), integer operators and other conversions now always respect scientific notation in numeric strings.
-
Raise a compile-time warning on octal escape sequence overflow.
-
-
Apache2handler:
-
-
Enable per-module logging in Apache 2.4+.
-
-
BCmath:
-
-
(memcpy negative parameter _bc_new_num_ex).
-
-
Bz2:
-
-
(integer overflow in bzdecompress caused heap corruption).
-
(Inadequate error handling in bzread()).
-
-
Calendar:
-
-
Fix integer overflows (Joshua Rogers)
-
(cal_days_month() fails for final month of the French calendar).
-
(AddressSanitizer: global-buffer-overflow in zif_cal_from_jd).
-
-
CLI Server:
-
-
(Unable to work in root with unicode chars).
-
(Built-in webserver does not send Date header).
-
-
COM:
-
-
(Cannot pass parameter 1 by reference).
-
(Invalid free in extension trait).
-
(COM called from PHP does not return out parameters).
-
(DOTNET/COM array parameters broke in PHP7).
-
(variant_date_from_timestamp null dereference).
-
-
Curl:
-
-
Implement support for handling HTTP/2 Server Push.
-
Add curl_multi_errno(), curl_share_errno() and curl_share_strerror() functions.
-
(Heap overflow in curl_escape).
-
(size_t overflow lead to heap corruption). (Stas).
-
(curl_setopt segfault with empty CURLOPT_HTTPHEADER).
-
(CURLINFO_CERTINFO data parsing error).
-
-
Date:
-
-
(DateInterval properties and isset).
-
(createFromFormat with 'z' format char results in incorrect time).
-
(Inconsistent behavior of the u format char).
-
(DateTime parser doesn't set microseconds for "now").
-
(microseconds are missing in DateTime class).
-
(microseconds in DateInterval are missing).
-
(DateTime::createFromFormat() U after u nukes microtime).
-
(Allow DateTime modification with subsecond items).
-
(General DateTime improvments needed for microseconds to become useful).
-
(timelib_meridian doesn't parse dots correctly).
-
(DateTime constructor does not initialise microseconds property).
(DateTime::createFromFormat 'U' with pre 1970 dates fails parsing).
-
Invalid serialization data for a DateTime or DatePeriod object will now throw an instance of Error from __wakeup() or __set_state() instead of resulting in a fatal error.
-
Timezone initialization failure from serialized data will now throw an instance of Error from __wakeup() or __set_state() instead of resulting in a fatal error.
-
Export date_get_interface_ce() for extension use.
-
(strtotime seems to use both sunday and monday as start of week).
-
-
Dba:
-
-
(Cannot fetch multiple values with group in ini file).
-
Data modification functions (e.g.: dba_insert()) now throw an instance of Error instead of triggering a catchable fatal error if the key is does not contain exactly two elements.
-
-
DOM:
-
-
(missing NULL check in dom_document_save_html).
-
(DOM document dangling reference).
-
Invalid schema or RelaxNG validation contexts will throw an instance of Error instead of resulting in a fatal error.
-
Attempting to register a node class that does not extend the appropriate base class will now throw an instance of Error instead of resulting in a fatal error.
-
Attempting to read an invalid or write to a readonly property will throw an instance of Error instead of resulting in a fatal error.
-
-
DTrace:
-
-
Disabled PHP call tracing by default (it makes significant overhead). This may be enabled again using envirionment variable USE_ZEND_DTRACE=1.
-
-
EXIF:
-
-
(Samsung picture thumb not read (zero size)).
-
(Memory Leakage In exif_process_IFD_in_TIFF).
-
(Out of bound read in exif_process_IFD_in_MAKERNOTE).
-
(NULL Pointer Dereference in exif_process_user_comment).
-
-
Filter:
-
-
(Bad filter for the flags FILTER_FLAG_NO_RES_RANGE and FILTER_FLAG_NO_PRIV_RANGE).
-
(default option ignored when object passed to int filter).
-
(FILTER_FLAG_NO_RES_RANGE does not cover whole 127.0.0.0/8 range).
-
-
FPM:
-
-
(using --allow-to-run-as-root should ignore missing user).
-
-
FTP:
-
-
(Cannot upload file using ftp_put to FTPES with require_ssl_reuse).
-
(Option to ignore the returned FTP PASV address).
-
-
GD:
-
-
(Integer overflow in imageline() with antialiasing).
-
(imagescale() is not affected by, but affects imagesetinterpolation()).
-
(Integer overflow in gdImageScaleBilinearPalette()).
-
(Stack Buffer Overflow in GD dynamicGetbuf).
-
(imagettftext broken on transparent background w/o alphablending).
-
(Integer Overflow in gdImageWebpCtx of gd_webp.c).
-
(imagettfbbox gives incorrect values for bounding box).
-
(imagegd2() ignores 3rd param if 4 are given).
-
(imagegd2() writes wrong chunk sizes on boundaries).
-
(imagegd2(): unrecognized formats may result in corrupted files).
-
(imagecreatefromgd2() may leak memory).
-
(imagetruecolortopalette: white is duplicated in palette).
-
(imagecopy does not support 1bit transparency on truecolor images).
-
(imagecopy() loses single-color transparency on palette images).
-
(possible resource leaks in _php_image_convert()).
-
(imagesetstyle() causes OOB read for empty $styles).
(Integer Overflow in "_php_imap_mail" leads to crash).
-
An email address longer than 16385 bytes will throw an instance of Error instead of resulting in a fatal error.
-
-
Interbase:
-
-
(Fails to find firebird headers as don't use fb_config output).
-
-
Intl:
-
-
(add locale length check).
-
(add mitigation for ICU int overflow).
-
(grapheme_*() is not Unicode compliant on CR LF sequence).
-
(add locale length check).
-
(Segfault when instantiating class that extends IntlCalendar and adds a property).
-
(Locale::lookup() / locale_lookup() hangs if no match found).
-
Partially fixed (idn_to_ascii for UTS #46 incorrect for long domain names).
-
(locale_accept_from_http out-of-bounds access).
-
Failure to call the parent constructor in a class extending Collator before invoking the parent methods will throw an instance of Error instead of resulting in a recoverable fatal error.
-
Cloning a Transliterator object may will now throw an instance of Error instead of resulting in a fatal error if cloning the internal transliterator fails.
-
Added IntlTimeZone::getWindowsID() and IntlTimeZone::getIDForWindowsID().
(IntlDateFormatter formatObject returns wrong value when time style is NONE).
-
-
JSON:
-
-
Introduced encoder struct instead of global which fixes bugs and related to pretty print indentation.
-
(Segfault with throwing JsonSerializable).
-
Implemented earlier return when json_encode fails, fixes bugs (Stacking exceptions thrown by JsonSerializable) and (On recursion error, json_encode can eat up all system memory).
-
("_empty_" key in objects).
-
Exported JSON parser API including json_parser_method that can be used for implementing custom logic when parsing JSON.
-
Escaped U+2028 and U+2029 when JSON_UNESCAPED_UNICODE is supplied as json_encode options and added JSON_UNESCAPED_LINE_TERMINATORS to restore the previous behaviour.
-
-
LDAP:
-
-
Providing an unknown modification type to ldap_batch_modify() will now throw an instance of Error instead of resulting in a fatal error.
Implemented RFC: Session ID without hashing. (Yasuo) https://wiki.php.net/rfc/session-id-without-hashing
-
(ps_files_cleanup_dir Buffer overflow).
-
Custom session handlers that do not return strings for session IDs will now throw an instance of Error instead of resulting in a fatal error when a function is called that must generate a session ID.
-
An invalid setting for session.hash_function will throw an instance of Error instead of resulting in a fatal error when a session ID is created.
-
(Use After Free in unserialize() with Unexpected Session Deserialization).
-
Improved fix for bug (Empty session IDs do still start sessions).
-
(session_start() returns TRUE on failure). Session save handlers must return 'string' always for successful read. i.e. Non-existing session read must return empty string. PHP 7.0 is made not to tolerate buggy return value.
-
(session_regenerate_id() must close opened session on errors).
-
-
SimpleXML:
-
-
(NULL pointer dereference in SimpleXMLElement::asXML()).
-
(SimpleXML isset/unset do not respect namespace).
-
(Null coalescing operator doesn't behave as expected with SimpleXMLElement).
-
(Using global var doesn't work while accessing SimpleXML element).
-
Creating an unnamed or duplicate attribute will throw an instance of Error instead of resulting in a fatal error.
-
-
SNMP:
-
-
(php_snmp_parse_oid integer overflow in memory allocation).
-
(Use After Free Vulnerability in SNMP with GC and unserialize()).
(Nested object in "any" element overwrites other fields).
-
(Peer verification fails when using a proxy with SoapClient).
-
(Soap Server Member variables reference bug).
-
(Using references in arrays doesn't work like expected).
-
-
SPL:
-
-
(Reproducible crash with GDB backtrace).
-
(Segfault on clone on splFileObject).
-
(Missing type check when unserializing SplArray).
-
(SplFileObject::getCsvControl does not return the escape character).
-
(AppendIterator segfault with closed generator).
-
Attempting to clone an SplDirectory object will throw an instance of Error instead of resulting in a fatal error.
-
Calling ArrayIterator::append() when iterating over an object will throw an instance of Error instead of resulting in a fatal error.
-
(GlobIterator throws LogicException).
-
-
SQLite3:
-
-
Update to SQLite 3.15.1.
-
(Unsetting result set may reset other result set).
-
(2147483647 is fetched as string).
-
(Spurious warning when exception is thrown in user defined function).
-
(SQLite should allow opening with empty filename).
-
(Clearing bindings on an SQLite3 statement doesn't work).
-
(Upgraded bundled SQLite lib to 3.9.2).
-
-
Standard:
-
-
(HTTP stream wrapper should ignore HTTP 100 Continue).
-
(Scope not inherited by eval in assert()).
-
(parse_url return wrong hostname).
-
(passing additional_parameters causes mail to fail).
-
(passing additional_parameters causes mail to fail).
-
(Accessing a private constant using constant() creates an exception AND warning).
-
(get_browser() incorrectly parses entries with "+" sign).
-
(Negative ftruncate() on php://memory exhausts memory).
-
(substr_compare NULL length interpreted as 0).
-
(getimagesize returning FALSE on valid jpg).
-
(unset array item in array_walk_recursive cause inconsistent array).
-
(array_walk_recursive move internal pointer).
-
(Exchanging array during array_walk -> memory errors).
-
(Use After Free Vulnerability in array_walk()/ array_walk_recursive()).
-
(array_walk + array_replace_recursive create references from nothing).
-
(CSV fields incorrectly split if escape char followed by UTF chars).
-
Implemented RFC: More precise float values.
-
array_multisort now uses zend_sort instead zend_qsort.
-
(readfile() mangles files larger than 2G).
-
assert() will throw a ParseError when evaluating a string given as the first argument if the PHP code is invalid instead of resulting in a catchable fatal error.
-
Calling forward_static_call() outside of a class scope will now throw an instance of Error instead of resulting in a fatal error.
-
Added is_iterable() function.
-
(Heap overflow through proc_open and $env parameter).
-
(long2ip() doesn't accept integers in strict mode).
-
(Add an option to pass a custom stream context to get_headers()).
-
Additional validation for parse_url() for login/pass components).
-
(Provide a way to fetch the current environment variables).
-
unpack() function accepts an additional optional argument $offset.
-
stream context socket option tcp_nodelay (Joe)
-
-
Streams:
-
-
(php_user_filter::$stream is not set to the stream the filter is working on).
-
(stream_set_blocking doesn't work).
-
(Out-of-bound read in php_stream_filter_create).
-
(Multiple small packets send for HTTP request).
-
(ftps:// opendir wrapper data channel encryption fails with IIS FTP 7.5, 8.5).
-
(Missing SKIP_ONLINE_TESTS checks).
-
(Problems with the ftps wrapper).
-
(opendir() does not work with ftps:// wrapper).
-
(opendir() with ftp:// attempts to open data stream for non-existent directories).
-
(ftps:// wrapper is vulnerable to protocol downgrade attack).
-
(stream_socket_get_name crashes).
-
(Stream socket with remote address leads to a segmentation fault).
-
-
sysvshm:
-
-
(shm_attach null dereference).
-
-
Tidy:
-
-
Implemented support for libtidy 5.0.0 and above.
-
Creating a tidyNode manually will now throw an instance of Error instead of resulting in a fatal error.
-
-
Wddx:
-
-
(NULL Pointer Dereference in WDDX Packet Deserialization with PDORow). (CVE-2016-9934)
-
(WDDX Packet Injection Vulnerability in wddx_serialize_value()).
-
(wddx_deserialize allows illegal memory access).
-
(wddx_deserialize null dereference).
-
(wddx_deserialize null dereference with invalid xml).
-
(wddx_deserialize null dereference in php_wddx_pop_element).
-
(wddx_deserialize use-after-free).
-
(Out-Of-Bounds Read in php_wddx_push_element).
-
(boolean always deserialized as "true").
-
A circular reference when serializing will now throw an instance of Error instead of resulting in a fatal error.
-
-
XML:
-
-
(malformed XML causes fault).
-
(_xml_startElementHandler() segmentation fault).
-
(SEGV on unknown address zif_xml_parse).
-
-
XMLRPC:
-
-
(xmlrpc_encode() unexpected output after referencing array elements).
(Wrong behavior while returning reference on object).
-
(Syntactical inconsistency with new group use syntax).
-
(Magic getter breaks reference to array property).
-
(Notice: unserialize(): Unexpected end of serialized data).
-
(From field incorrectly parsed from headers).
-
(Bundled libtool.m4 doesn't handle FreeBSD 10 when building extensions).
-
Fixed bug causing exception traces with anon classes to be truncated.
-
(Segmentation fault when using Closure::call and yield).
-
(Memleak while assigning object offsetGet result).
-
(Apache crash related to ZEND_SEND_REF).
-
(Accessing array crashes PHP 7.0beta3).
-
(Segfault if do_resize fails to allocated memory).
-
(segfault at _efree () in zend_alloc.c:1389).
-
(Segfault when doing unset($var());).
-
(Incrementing value returned by magic getter).
-
(Segfault when __invoke is static).
-
(Finally is broken with opcache).
-
(ZVAL_COPY_VALUE_EX broken for 32bit Solaris Sparc).
-
(SAPI may truncate POST data).
-
(Checking liveness does not work as expected).
-
, (Skipped assertions affect Generator returns).
-
(Creating a huge array doesn't result in exhausted, but segfault).
-
Fixed "finally" issues.
-
(Real memory usage doesn't decrease).
-
(__CLASS__ is lost in closures).
-
(Segfault in zend_find_alias_name).
-
(null ptr deref / seg fault in ZEND_HANDLE_EXCEPTION).
-
(Unexpected return type error).
-
(Inheritance by anonymous class).
-
(SIGSEGV array.c:953).
-
(__COMPILER_HALT_OFFSET__ under namespace is not defined).
-
(sometimes empty $_SERVER['QUERY_STRING']).
-
($this refcount issue).
-
('asm' operand has impossible constraints).
-
(null pointer deref (segfault) in zend_eval_const_expr).
-
(Segfault in ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER).
-
(Remotely triggerable stack exhaustion via recursive method calls).
-
(Different arrays compare indentical due to integer key truncation).
-
(unserialize() could lead to unexpected methods execution / NULL pointer deref).
-
(segfault at ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER ()).
-
(Build failure on 32-bit Mac OS X 10.6.8: recursive inlining).
-
(Exception lost with nested finally block).
-
(Changing the property of a cloned object affects the original).
-
(Use after free with assign by ref to overloaded objects).
-
(cli - function with default arg = STDOUT crash output).
-
(Segfault in gc_collect_cycles()).
-
Improved zend_string API.
-
(Segfault when trying to combine [] and assign-op on ArrayAccess object).
-
(Different ways of handling div/mod/intdiv).
-
(Too long timeout on pipes).
-
(uninitialised value in strtr with array).
-
(Invalid read of size 1 in zend_compile_short_circuiting).
-
(Broken output of apache_request_headers).
-
(iconv_substr() doesn't work with UTF-16BE).
-
(PHP 7.0.0alpha1 segmentation fault when exactly 33 extensions are loaded).
-
(null ptr deref and seg fault in zend_resolve_class_name).
-
(Reflection on Closure::__invoke borks type hint class name).
-
(Serialization of anonymous classes should be prevented).
-
(parse_ini_file() and parse_ini_string() segmentation fault).
-
(phpinfo() reports Professional Editions of Windows 7/8/8.1/10 as "Business").
-
(phpinfo() does not report many Windows SKUs).
-
(Null coalesce operator doesn't work for string offsets).
-
(Unexpected array comparison result).
-
(Different arrays compare indentical due to integer key truncation).
-
(Strict comparison between integer and empty string keys crashes).
-
(Default parameter value with wrong type segfaults).
-
(Fatal error: Nesting level too deep - recursive dependency ? with ===).
-
(Item added to array not being removed by array_pop/shift ).
-
(Add support for $callable() sytnax with 'Class::method').
-
(Double free on zend_list_dtor).
-
(Segfault on magic method __call of private method in superclass).
-
Improved __call() and __callStatic() magic method handling. Now they are called in a stackless way using ZEND_CALL_TRAMPOLINE opcode, without additional stack frame.
-
Optimized strings concatenation.
-
Fixed weird operators behavior. Division by zero now emits warning and returns +/-INF, modulo by zero and intdid() throws an exception, shifts by negative offset throw exceptions. Compile-time evaluation of division by zero is disabled.
-
(Hash table collision leads to inaccessible array keys).
-
(Invalid read of size 8 in zend_std_read_property).
-
(segfault in Zend/zend_hash.c in function _zend_hash_del_el).
-
(Closure executed via static autoload incorrectly marked as static).
-
(Cannot access static::class in lambda, writen outside of a class).
-
(call a private function in closure failed).
-
Added PHP_INT_MIN constant.
-
Added Closure::call() method.
-
(Segfault when calling phpversion('spl')).
-
Implemented the RFC `Catchable "Call to a member function bar() on a non-object"`.
-
Added options parameter for unserialize allowing to specify acceptable classes (https://wiki.php.net/rfc/secure_unserialize).
-
(Garbage collector can free zvals that are still referenced).
-
Removed ZEND_ACC_FINAL_CLASS, promoting ZEND_ACC_FINAL as final class modifier.
-
is_long() & is_integer() is now an alias of is_int().
-
(phpinfo: PHP Variables with $ and single quotes).
-
Added ?? operator.
-
Added <=> operator.
-
Added \u{xxxxx} Unicode Codepoint Escape Syntax.
-
Fixed oversight where define() did not support arrays yet const syntax did.
-
Use "integer" and "float" instead of "long" and "double" in ZPP, type hint and conversion error messages.
-
(E_RECOVERABLE_ERROR when output buffering in output buffering handler).
-
Removed scoped calls of non-static methods from an incompatible $this context.
-
Removed support for #-style comments in ini files.
-
Removed support for assigning the result of new by reference.
-
Invalid octal literals in source code now produce compile errors, fixes PHPSadness #31.
-
Removed dl() function on fpm-fcgi.
-
Removed support for hexadecimal numeric strings.
-
Removed obsolete extensions and SAPIs. See the full list in UPGRADING.
-
Added NULL byte protection to exec, system and passthru.
(openssl extension does not get the DH parameters from DH key resource).
-
(Missing ARG_INFO for openssl_seal()).
-
(openssl_seal fails with AES).
-
(Add IV parameter for openssl_seal and openssl_open).
-
(openssl_random_pseudo_bytes() is not cryptographically secure). (CVE-2015-8867)
-
(OpenSSL error "key values mismatch" after openssl_pkcs12_read with extra cert).
-
Added "alpn_protocols" SSL context option allowing encrypted client/server streams to negotiate alternative protocols using the ALPN TLS extension when built against OpenSSL 1.0.2 or newer. Negotiated protocol information is accessible through stream_get_meta_data() output.
-
Removed "CN_match" and "SNI_server_name" SSL context options. Use automatic detection or the "peer_name" option instead.
-
-
Pcntl:
-
-
(Can't compile on NetBSD because of missing WCONTINUED and WIFCONTINUED).
-
(pcntl_signal doesn't decrease ref-count of old handler when setting SIG_DFL).
-
(Added wifcontinued and wcontinued).
-
Added rusage support to pcntl_wait() and pcntl_waitpid().
-
-
PCRE:
-
-
(Incorrect bump-along behavior with \K and empty string match).
-
(Multiple vulnerabilities related to PCRE functions).
-
(Incorrect bump-along behavior with \K and empty string match).
-
(preg_replace: * qualifier on unicode replace garbles the string).
-
(Segfault in preg_replace_callback).
-
Removed support for the /e (PREG_REPLACE_EVAL) modifier.
-
-
PDO:
-
-
(Segmentation fault in pdo_parse_params() during Drupal 8 test suite).
-
(PDO constructor changes unrelated variables).
-
(Segfault in pdo_mysql).
-
(persistent sqlite connection + custom function segfaults).
-
(./configure fails with "Cannot find php_pdo_driver.h").
-
-
PDO_DBlib:
-
-
(Segmentation fault on nextRowset).
-
-
PDO_mysql:
-
-
(Add new PDO mysql connection attr to control multi statements option).
-
-
PDO_OCI:
-
-
(PDO::ATTR_PREFETCH is ignored).
-
-
PDO_pgsql:
-
-
(PDOStatement::execute() leaks memory with DML Statements when closeCuror() is u).
-
Removed PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT attribute in favor of ATTR_EMULATE_PREPARES).
-
-
Phar:
-
-
(Null pointer dereference in phar_get_fp_offset()).
-
(Uninitialized pointer in phar_make_dirstream when zip entry filename is "/").
-
Improved fix for bug .
-
(Files extracted from archive may be placed outside of destination directory).
-
-
Phpdbg:
-
-
(incorrect exit code in -rr mode with Exceptions).
-
(phpdbg must respect set_exception_handler).
-
(Run and quit mode (-qrr) should not fallback to interactive mode).
-
(Help overview (-h) does not rpint anything under Windows).
-
(PHP won't compile on 10.4 and 10.5 because of missing constants).
-
(FASYNC not defined, needs sys/file.h include).
-
(Segfault when displaying memory leaks).
-
-
Reflection:
-
-
(Wrong docblock assignment).
-
(ReflectionFunction::getClosure() leaks memory when used for internal functions).
-
Fixed bug causing bogus traces for ReflectionGenerator::getTrace().
-
Fixed inheritance chain of Reflector interface.
-
Added ReflectionGenerator class.
-
Added reflection support for return types and type declarations.
-
-
Session:
-
-
(Segmentation fault when regenerating session id with strict mode).
-
(Session read causes "String is not zero-terminated" error).
-
(Reference to $_SESSION is lost after a call to session_regenerate_id()).
-
(Data integrity issues accessing superglobals by reference).
-
(Regression in session_regenerate_id()).
-
(mod_files.sh is a bash-script).
-
-
SOAP:
-
-
(Segfault in soap / type_to_string).
-
(SoapClient systematic out of memory error).
-
(Segmentation fault if wsdl has no targetNamespace attribute).
-
(Segmentation fault inside soap client).
-
(SOAP Client generates Segfault).
-
(SOAP serialize_function_call() type confusion / RCE).
-
(SoapClient info leak / null pointer dereference via multiple type confusions).
-
(Segmentation fault after more than 100 SoapClient calls).
(ArrayObject unserialize does not restore protected fields).
-
(SplFixedArray throws exception when using ref variable as index).
-
(PCRE JIT and pattern reuse segfault).
-
(Incorrect ArrayObject serialization if unset is called in serialize()).
-
(Cloning SplPriorityQueue leads to memory leaks).
-
(Incorrect constructor reflection for ArrayObject).
-
(Dangling pointer in the unserialization of ArrayObject items).
-
(Use After Free Vulnerability in unserialize() with SPLArrayObject).
-
(Use After Free Vulnerability in unserialize() with SplObjectStorage).
-
(Use After Free Vulnerability in unserialize() with SplDoublyLinkedList).
-
(MutlitpleIterator array-keys incompatible change in PHP 7).
-
(Use-after-free vulnerability in spl_recursive_it_move_forward_ex()).
-
(ArrayObject with ARRAY_AS_PROPS broken).
-
Changed ArrayIterator implementation using zend_hash_iterator_... API. Allowed modification of iterated ArrayObject using the same behavior as proposed in `Fix "foreach" behavior`. Removed "Array was modified outside object and internal position is no longer valid" hack.
-
(SplPriorityQueue/SplHeap doesn't expose extractFlags nor curruption state).
-
(RecursiveDirectoryIterator::CURRENT_AS_PATHNAME breaks the RecursiveIterator).
-
-
SQLite3:
-
-
(Memory leak in sqlite3_do_callback).
-
(Use-after-free vulnerability in sqlite3SafetyCheckSickOrOk()).
-
(segfault when manually constructing SQLite3Result).
Added the #[\DelayedTargetValidation] attribute to delay target errors for internal attributes from compile time to runtime.
-
Added support for `final` with constructor property promotion.
-
Added support for configuring the URI parser for the FTP/FTPS as well as the SSL/TLS stream wrappers as described in https://wiki.php.net/rfc/url_parsing_api#plugability.
-
Added PHP_BUILD_PROVIDER constant.
-
Added PHP_BUILD_DATE constant.
-
Added support for Closures and first class callables in constant expressions.
-
Add support for backtraces for fatal errors.
-
Add clone-with support to the clone() function.
-
Add RFC 3986 and WHATWG URL compliant APIs for URL parsing and manipulation (kocsismate, timwolla)
-
Fixed AST printing for immediately invoked Closure.
-
Properly handle __debugInfo() returning an array reference.
-
Properly handle reference return value from __toString().
-
Improved error message of UnhandledMatchError for zend.exception_string_param_max_len=0.
-
Fixed bug and (Bind traits before parent class).
-
Fixed bug (memory_limit is not always limited by max_memory_limit).
-
Fixed bug (Stale EG(opline_before_exception) pointer through eval).
-
Fixed bug (Missing new Foo(...) error in constant expressions).
-
Fixed bug (Don't bail when closing resources on shutdown).
Fixed hard_timeout with --enable-zend-max-execution-timers.
-
Fixed bug (Incorrect HASH_FLAG_HAS_EMPTY_IND flag on userland array).
-
Fixed bug (register_argc_argv deprecation emitted twice when using OPcache).
-
Fixed bug (error_log php.ini cannot be unset when open_basedir is configured).
-
Fixed bug (Allow empty statements before declare(strict_types)).
-
Fixed bug (CGI with auto_globals_jit=0 causes uouv).
-
Fixed bug (Stale array iterator pointer).
-
Fixed bug (zend_ssa_range_widening may fail to converge).
-
Fixed bug (PHP_EXPAND_PATH broken with bash 5.3.0).
-
Fixed bug (Repeated inclusion of file with __halt_compiler() triggers "Constant already defined" warning).
-
Fixed bug (pipe operator fails to correctly handle returning by reference).
-
Fixed bug (Wrong lineno in property error with constructor property promotion).
-
Fixed bug (Relax missing trait fatal error to error exception).
-
Fixed bug (NULL-ptr dereference when using register_tick_function in destructor).
-
Fixed bug (Improve "expecting token" error for ampersand).
-
The report_memleaks INI directive has been deprecated.
-
Fixed OSS-Fuzz #439125710 (Pipe cannot be used in write context).
-
Fixed bug (Shared memory violation on property inheritance).
-
Fixed bug (GC treats ZEND_WEAKREF_TAG_MAP references as WeakMap references).
-
Fixed bug (Don't substitute self/parent with anonymous class).
-
Fix support for non-userland stream notifiers.
-
Fixed bug (Operands may be being released during comparison).
-
Fixed bug (Generator can be resumed while fetching next value from delegated Generator).
-
Fixed bug (Calling Generator::throw() on a running generator with a non-Generator delegate crashes).
-
Fix OSS-Fuzz #427814452 (pipe compilation fails with assert).
-
Fixed bug (\array and \callable should not be usable in class_alias).
-
Use `clock_gettime_nsec_np()` for high resolution timer on macOS if available.
-
Make `clone()` a function.
-
Introduced the TAILCALL VM, enabled by default when compiling with Clang>=19 on x86_64 or aarch64.
-
Enacted the follow-up phase of the "Path to Saner Increment/Decrement operators" RFC, meaning that incrementing non-numeric strings is now deprecated. (Girgias).
-
Various closure binding issues are now deprecated.
-
Constant redeclaration has been deprecated.
-
Marks the stack as non-executable on Haiku.
-
Deriving $_SERVER['argc'] and $_SERVER['argv'] from the query string is now deprecated.
-
Using null as an array offset or when calling array_key_exists() is now deprecated.
-
The disable_classes INI directive has been removed.
-
The locally predefined variable $http_response_header is deprecated.
-
Non-canonical cast names (boolean), (integer), (double), and (binary) have been deprecated.
-
The $exclude_disabled parameter of the get_defined_functions() function has been deprecated, as it no longer has any effect since PHP 8.0.
-
Terminating case statements with a semicolon instead of a colon has been deprecated.
-
The backtick operator as an alias for shell_exec() has been deprecated.
-
Returning null from __debugInfo() has been deprecated.
-
Support #[\Override] on properties.
-
Destructing non-array values (other than NULL) using [] or list() now emits a warning.
-
Casting floats that are not representable as ints now emits a warning.
-
Casting NAN to other types now emits a warning.
-
Implement (Enhance zend_dump_op_array to properly represent non-printable characters in string literals).
-
Fixed bug (Engine UAF with reference assign and dtor).
-
Do not use RTLD_DEEPBIND if dlmopen is available.
-
Implement (It is now allowed to substitute static with self or the concrete class name
- in final subclasses)
-
-
BCMath:
-
-
Simplify `bc_divide()` code.
-
If the result is 0, n_scale is set to 0.
-
If size of BC_VECTOR array is within 64 bytes, stack area is now used.
-
Fixed bug (Power of 0 of BcMath number causes UB).
The DATE_RFC7231 and DateTimeInterface::RFC7231 constants have been deprecated.
-
Fixed date_sunrise() and date_sunset() with partial-hour UTC offset.
-
Fixed : "P" format for ::createFromFormat swallows string literals.
-
The __wakeup() magic method of DateTimeInterface, DateTime, DateTimeImmutable, DateTimeZone, DateInterval, and DatePeriod has been deprecated in favour of the __unserialize() magic method.
-
-
DOM:
-
-
Added Dom\Element::$outerHTML.
-
Added Dom\Element::insertAdjacentHTML().
-
Added $children property to ParentNode implementations.
-
Make cloning DOM node lists, maps, and collections fail.
-
Added Dom\Element::getElementsByClassName().
-
Fixed bug (\Dom\HTMLDocument querySelectorAll selecting only the first when using ~ and :has).
Fixed bug (Fix locale strings canonicalization for IntlDateFormatter and NumberFormatter).
-
Fixed bug ([intl] Weird numeric sort in Collator).
-
Fix return value on failure for resourcebundle count handler.
-
Fixed bug (PGO builds of shared ext-intl are broken).
-
Intl's internal error mechanism has been modernized so that it indicates more accurately which call site caused what error. Moreover, some ext/date exceptions have been wrapped inside a IntlException now.
-
The intl.error_level INI setting has been deprecated.
-
-
LDAP:
-
-
Allow ldap_get_option to retrieve global option by allowing NULL for connection instance ($ldap).
-
-
MBstring:
-
-
Updated Unicode data tables to Unicode 17.0.
-
-
MySQLi:
-
-
Fixed bugs and (calling mysqli::__construct twice).
-
The mysqli_execute() alias function has been deprecated.
-
-
MySQLnd:
-
-
Added mysqlnd.collect_memory_statistics to ini quick reference.
-
-
ODBC:
-
-
Removed driver-specific build flags and support.
-
Remove ODBCVER and assume ODBC 3.5.
-
-
Opcache:
-
-
Make OPcache non-optional (Arnaud, timwolla)
-
Added opcache.file_cache_read_only.
-
Updated default value of opcache.jit_hot_loop.
-
Log a warning when opcache lock file permissions could not be changed.
-
Fixed bug (heap buffer overflow in jit).
-
Partially fixed bug (Avoid calling wrong function when reusing file caches across differing environments).
-
Disallow changing opcache.memory_consumption when SHM is already set up.
-
Fixed bug (Compiling opcache statically into ZTS PHP fails).
-
Fixed bug (OPcache bypasses the user-defined error handler for deprecations).
-
Fixed bug (opcache build failure).
-
Fixed bug (access to uninitialized vars in preload_load()).
-
Fixed bug (JIT broken in ZTS builds on MacOS 15).
-
Fixed bug (JIT 1205 segfault on large file compiled in subprocess).
-
Fixed segfault in function JIT due to NAN to bool warning.
-
Fixed bug (Double-free of EG(errors)/persistent_script->warnings on persist of already persisted file).
-
Fixed bug (race condition in zend_runtime_jit(), zend_jit_hot_func()).
-
Fixed bug (assertion failure in zend_jit_trace_type_to_info_ex).
-
Fixed bug (function JIT may not deref property value).
-
Fixed bug (Incorrect opline after deoptimization).
-
Fixed bug (Wrong JIT stack setup on aarch64/clang).
-
Fixed bug (Broken opcache.huge_code_pages).
-
Fixed bug (Build fails on non-glibc/musl/freebsd/macos/win platforms).
-
Fixed ZTS OPcache build on Cygwin.
-
Fixed bug (JIT variable not stored before YIELD).
-
-
OpenSSL:
-
-
Added openssl.libctx INI that allows to select the OpenSSL library context type and convert various parts of the extension to use the custom libctx.
-
Add $digest_algo parameter to openssl_public_encrypt() and openssl_private_decrypt() functions.
-
Implement #81724 (openssl_cms_encrypt only allows specific ciphers).
-
Implement #80495 (Enable to set padding in openssl_(sign|verify).
-
Implement #47728 (openssl_pkcs7_sign ignores new openssl flags).
-
Fixed bug (openssl_get_cipher_methods inconsistent with fetching).
-
Fixed build when --with-openssl-legacy-provider set.
-
Fixed bug (8.5 | Regression in openssl_sign() - support for alias algorithms appears to be broken).
-
The $key_length parameter for openssl_pkey_derive() has been deprecated.
-
-
Output:
-
-
Fixed calculation of aligned buffer size.
-
-
PCNTL:
-
-
Extend pcntl_waitid with rusage parameter.
-
-
PCRE:
-
-
Remove PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK from pcre compile options.
-
-
PDO:
-
-
Fixed bug (Incorrect class name in deprecation message for PDO mixins).
-
Driver specific methods and constants in the PDO class are now deprecated.
-
The "uri:" DSN scheme has been deprecated due to security concerns with DSNs coming from remote URIs.
-
-
PDO_ODBC:
-
-
Fetch larger block sizes and better handle SQL_NO_TOTAL when calling SQLGetData.
-
-
PDO_PGSQL:
-
-
Added Iterable support for PDO::pgsqlCopyFromArray.
-
Implement Pdo\Pgsql::setAttribute(PDO::ATTR_PREFETCH, 0) or Pdo\Pgsql::prepare(…, [ PDO::ATTR_PREFETCH => 0 ]) make fetch() lazy instead of storing the whole result set in memory (Guillaume Outters)
PDO::sqliteCreateCollation now throws a TypeError if the callback has a wrong return type.
-
Added Pdo_Sqlite::ATTR_BUSY_STATEMENT constant to check if a statement is currently executing.
-
Added Pdo_Sqlite::ATTR_EXPLAIN_STATEMENT constant to set a statement in either EXPLAIN_MODE_PREPARED, EXPLAIN_MODE_EXPLAIN, EXPLAIN_MODE_EXPLAIN_QUERY_PLAN modes.
-
Fix bug (sqlite PDO::quote silently corrupts strings with null bytes) by throwing on null bytes.
-
-
PGSQL:
-
-
Added pg_close_stmt to close a prepared statement while allowing its name to be reused.
-
Added Iterable support for pgsql_copy_from.
-
pg_connect checks if connection_string contains any null byte, pg_close_stmt check if the statement contains any null byte.
-
Added pg_service to get the connection current service identifier.
-
Fix segfaults when attempting to fetch row into a non-instantiable class name.
-
-
Phar:
-
-
Fix potential buffer length truncation due to usage of type int instead of type size_t.
-
Fixed memory leaks when verifying OpenSSL signature.
-
-
POSIX:
-
-
Added POSIX_SC_OPEN_MAX constant to get the number of file descriptors a process can handle.
-
posix_ttyname() sets last_error to EBADF on invalid file descriptors, posix_isatty() raises E_WARNING on invalid file descriptors, posix_fpathconf checks invalid file descriptors.
-
posix_kill and posix_setpgid throws a ValueError on invalid process_id.
-
posix_setpgid throws a ValueError on invalid process_group_id, posix_setrlimit throws a ValueError on invalid soft_limit and hard_limit arguments.
-
-
Random:
-
-
Moves from /dev/urandom usage to arc4random_buf on Haiku.
-
-
Reflection:
-
-
Added ReflectionConstant::getExtension() and ::getExtensionName().
The setAccessible() methods of various Reflection objects have been deprecated, as those no longer have an effect.
-
ReflectionClass::getConstant() for constants that do not exist has been deprecated.
-
ReflectionProperty::getDefaultValue() for properties without default values has been deprecated.
-
Fixed bug (ReflectionClass::getStaticPropertyValue() returns UNDEF zval for uninitialized typed properties).
-
Fixed bug (ReflectionClass::__toString() should have better output for enums).
-
Fix (getModifierNames() not reporting asymmetric visibility).
-
Fixed bug (Reflection: have some indication of property hooks in `_property_string()`).
-
Fixed bug (ReflectionNamedType::getName() prints nullable type when retrieved from ReflectionProperty::getSettableType()).
-
Fixed bug (ReflectionClass::isIterable() incorrectly returns true for classes with property hooks).
-
-
SAPI:
-
-
Fixed bug and #81451: http_response_code() does not override the status code generated by header().
-
-
Session:
-
-
session_start() throws a ValueError on option argument if not a hashmap or a TypeError if read_and_close value is not compatible with int.
-
Added support for partitioned cookies.
-
Fix RC violation of session SID constant deprecation attribute.
-
Fixed : build broken with ZEND_STRL usage with memcpy when implemented as macro.
-
-
SimpleXML:
-
-
Fixed bug (SimpleXML xpath should warn when returning other return types than node lists).
-
-
SNMP:
-
-
snmpget, snmpset, snmp_get2, snmp_set2, snmp_get3, snmp_set3 and SNMP::__construct() throw an exception on invalid hostname, community timeout and retries arguments.
-
-
SOAP:
-
-
Added support for configuring the URI parser for SoapClient::__doRequest() as described in https://wiki.php.net/rfc/url_parsing_api#plugability.
-
Implement request #55503 (Extend __getTypes to support enumerations).
-
Implement request #61105 (Support Soap 1.2 SoapFault Reason Text lang attribute).
-
(SoapServer calls wrong function, although "SOAP action" header is correct).
-
Fix namespace handling of WSDL and XML schema in SOAP, fixing at least and bug #68576.
-
(Segmentation fault on invalid WSDL cache).
-
Fixed bug (SIGSEGV due to uninitialized soap_globals->lang_en).
-
Fixed bug (Segfault when spawning new thread in soap extension).
-
-
Sockets:
-
-
Added IPPROTO_ICMP/IPPROTO_ICMPV6 to create raw socket for ICMP usage.
-
Added TCP_FUNCTION_BLK to change the TCP stack algorithm on FreeBSD.
-
Added IP_BINDANY for a socket to bind to any address.
-
Added SO_BUSY_POOL to reduce packets poll latency.
-
Added UDP_SEGMENT support to optimise multiple large datagrams over UDP if the kernel and hardware supports it.
-
Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for socket_shutdown().
Improve __unserialize() hardening for SplHeap/SplPriorityQueue.
-
Deprecate ArrayObject and ArrayIterator with objects.
-
Unregistering all autoloaders by passing the spl_autoload_call() function as a callback argument to spl_autoload_unregister() has been deprecated. Instead if this is needed, one should iterate over the return value of spl_autoload_functions() and call spl_autoload_unregister() on each value.
-
The SplObjectStorage::contains(), SplObjectStorage::attach(), and SplObjectStorage::detach() methods have been deprecated in favour of SplObjectStorage::offsetExists(), SplObjectStorage::offsetSet(), and SplObjectStorage::offsetUnset() respectively.
-
-
Sqlite:
-
-
Added Sqlite3Stmt::busy to check if a statement is still being executed.
-
Added Sqlite3Stmt::explain to produce an explain query plan from the statement.
-
Added Sqlite3Result::fetchAll to return all results at once from a query.
-
-
Standard:
-
-
Add HEIF/HEIC support to getimagesize.
-
Added support for partitioned cookies.
-
Implement #71517 (Implement SVG support for getimagesize() and friends).
-
Implement : Add support for new INI mail.cr_lf_mode.
-
Optimized PHP html_entity_decode function.
-
Minor optimization to array_chunk().
-
Optimized pack().
-
Fixed crypt() tests on musl when using --with-external-libcrypt (Michael Orlitzky).
-
Fixed bug (is_callable(func(...), callable_name: $name) for first class callables returns wrong name).
-
Added array_first() and array_last().
-
Fixed bug (setlocale's 2nd and 3rd argument ignores strict_types).
-
Fixed exit code handling of sendmail cmd and added warnings.
-
Fixed bug (printf: empty precision is interpreted as precision 6, not as precision 0).
-
Fixed bug (mail() heap overflow with an empty message in lf mode).
-
Fixed bug (AVIF images misdetected as HEIF after introducing HEIF support in getimagesize()).
-
Fixed bug (reset internal pointer earlier while splicing array while COW violation flag is still set).
-
Fixed bug (leaks in var_dump() and debug_zval_dump()).
-
Fixed (SplPriorityQueue, SplMinHeap, and SplMaxHeap lost their data on serialize()).
-
Fixed (Deprecation warnings in functions taking as argument).
-
Fixed bug (Avoid integer overflow when using a small offset and PHP_INT_MAX with LimitIterator).
-
Fixed bug (#[\Attribute] validation should error on trait/interface/enum/abstract class).
-
Fixed bug (setlocale($type, NULL) should not be deprecated).
-
Fixed bug (UAF during array_splice).
-
Passing strings which are not one byte long to ord() is now deprecated.
-
Passing integers outside the interval [0, 255] to chr() is now deprecated.
-
The socket_set_timeout() alias function has been deprecated.
-
Passing null to readdir(), rewinddir(), and closedir() to use the last opened directory has been deprecated.
-
-
Streams:
-
-
Fixed bug (stream_select() timeout useless for pipes on Windows).
gzfile, gzopen and readgzfile, their "use_include_path" argument is now a boolean.
-
Fixed bug (gzopen() does not use the default stream context when opening HTTP URLs).
-
Implemented (zlib streams should support locking).
-
-
Zip:
-
-
Fixed missing zend_release_fcall_info_cache on the following methods ZipArchive::registerProgressCallback() and ZipArchive::registerCancelCallback() on failure.
-
-
-
-
-
-
-
-
-
-
Version 8.4.22
-
-
Date:
-
-
Fixed bug (int overflow in php_date_llabs).
-
-
Intl:
-
-
Fix incorrect argument positions in out-of-bounds errors for IntlCalendar::set(), IntlCalendar::setDate(), IntlCalendar::setDateTime(), and IntlGregorianCalendar date/time construction.
-
Expose Spoofchecker restriction-level APIs on all supported ICU versions.
-
Fix SpoofChecker::setAllowedChars() and IntlDateFormatter::__construct() to report PHP constant names instead of ICU constant names in user-visible error messages.
-
-
MySQLnd:
-
-
Fix persistent free of non-persistent connect_attr key (David Carlier).
-
-
Opcache:
-
-
Fixed tracing JIT crash when a VM interrupt is handled during an observed user function call.
-
Fixed bug (Assertion failure at ext/opcache/jit/zend_jit_trace.c).
-
-
OpenSSL:
-
-
Fix compatibility issues with OpenSSL 4.0.
-
-
SPL:
-
-
Fix SplFixedArray::setSize leak when destructor grows during clear.
-
Fixed bug (use after free of self-freeing MultipleIterator children).
-
-
Standard:
-
-
Fixed bug (version_compare() incorrectly handles versions ending with a dot).
-
Fixed ip2long() leading zeros handling inconsistency on AIX.
-
-
-
-
-
-
-
-
Version 8.4.21
-
-
Core:
-
-
Fixed bug (GC assertion failure with fibers, generators and destructors).
-
Fixed bug (Forward property operations to real instance for initialized lazy proxies).
-
Fixed bug (Missing addref for Countable::count()).
-
Fixed bug (Assertion failure in shutdown_executor when resolving self::/parent::/static:: callables if the error handler throws).
-
Fixed bug (Missing addref for __unset).
-
Fixed bug (Trait with class constant name conflict against enum case causes SEGV).
-
-
CLI:
-
-
Fixed bug (`--rf` command line option with a method triggers ext/reflection deprecation warnings).
-
-
Curl:
-
-
Add support for brotli and zstd on Windows.
-
-
DOM:
-
-
Fixed and (Dom\XMLDocument::C14N() emits duplicate xmlns declarations after setAttributeNS()). (CVE-2026-7263)
-
Fixed bug (segmentation fault on empty HTMLDocument).
-
Upgrade to lexbor v2.7.0.
-
-
FPM:
-
-
Fixed (XSS within status endpoint). (CVE-2026-6735)
-
-
Iconv:
-
-
Fixed bug (iconv memory leak on bailout).
-
-
MBString:
-
-
Fixed (Null pointer dereference in php_mb_check_encoding() via mb_ereg_search_init()). (CVE-2026-7259)
-
Fixed (Out-of-bounds access in mbfl_name2encoding_ex()). (CVE-2026-6104)
-
-
Opcache:
-
-
Fixed bug (JIT: Assertion jit->ra[var].flags & (1<<0) failed in zend_jit_use_reg).
-
Fixed bug (Borked function JIT JMPNZ smart branch).
-
Fixed bug (COND optimization regression).
-
Fixed faulty returns out of zend_try block in zend_jit_trace().
-
-
OpenSSL:
-
-
Fix a bunch of memory leaks and crashes on edge cases.
-
-
PDO_Firebird:
-
-
Fixed (SQL injection via NUL bytes in quoted strings). (CVE-2025-14179)
-
-
Phar:
-
-
Restore is_link handler in phar_intercept_functions_shutdown.
-
Fixed bug (phar: NULL dereference in Phar::webPhar() when SCRIPT_NAME is absent from SAPI environment).
-
Fix memory leak in Phar::offsetGet().
-
Fix memory leak in phar_add_file().
-
Fixed bug (phar: propagate phar_stream_flush return value from phar_stream_close).
-
Fix memory leak in phar_verify_signature() when md_ctx is invalid.
Fixed bug (Assertion failure in array_shift with self-referencing array).
-
-
Streams:
-
-
Fixed network connect poll interuption handling.
-
-
Windows:
-
-
Fixed bug (Error dialog causes process to hang).
-
Windows Server 2025 is now properly reported.
-
-
-
-
-
-
-
-
Version 8.4.1
-
-
BcMath:
-
-
[RFC] Add bcfloor, bcceil and bcround to BCMath.
-
Improve performance.
-
Adjust bcround()'s $mode parameter to only accept the RoundingMode enum.
-
Fixed LONG_MAX in BCMath ext.
-
Fixed bcdiv() div by one.
-
[RFC] Support object types in BCMath.
-
bcpow() performance improvement.
-
ext/bcmath: Check for scale overflow.
-
[RFC] ext/bcmath: Added bcdivmod.
-
Fix (Avoid converting objects to strings in operator calculations).
-
Fixed bug (Added early return case when result is 0) (Saki Takamachi).
-
Fixed bug (Fixed a bug where size_t underflows) (Saki Takamachi).
-
Fixed (Fixed a bug in BcMath\Number::pow() and bcpow() when raising negative powers of 0) (Saki Takamachi).
-
-
Core:
-
-
Added zend_call_stack_get implementation for NetBSD, DragonFlyBSD, Solaris and Haiku.
-
Enabled ifunc checks on FreeBSD from the 12.x releases.
-
Changed the type of PHP_DEBUG and PHP_ZTS constants to bool.
-
Fixed bug (Undefined variable name is shortened when contains \0).
-
Fixed bug (Iterator positions incorrect when converting packed array to hashed).
-
Fixed zend fiber build for solaris default mode (32 bits).
-
Fixed zend call stack size for macOs/arm64.
-
Added support for Zend Max Execution Timers on FreeBSD.
-
Ensure fiber stack is not backed by THP.
-
Implement (Dump wrapped object in WeakReference class).
-
Added sparc64 arch assembly support for zend fiber.
-
Fixed no space available for TLS on NetBSD.
-
Added fiber Sys-V loongarch64 support.
-
Adjusted closure names to include the parent function's name.
-
Improve randomness of uploaded file names and files created by tempnam().
-
Added gc and shutdown callbacks to zend_mm custom handlers.
-
Fixed bug (Compute the size of pages before allocating memory).
-
Fixed bug (The --enable-re2c-cgoto doesn't add the -g flag).
-
Added the #[\Deprecated] attribute.
-
Fixed (Allow suspending fibers in destructors).
-
Fixed bug (Fix build for armv7).
-
Implemented property hooks RFC.
-
Fix (The xmlreader extension phpize build).
-
Throw Error exception when encountering recursion during comparison, rather than fatal error.
-
Added missing cstddef include for C++ builds.
-
Updated build system scripts config.guess to 2024-07-27 and config.sub to 2024-05-27.
-
Fixed bug (Infinite recursion in trait hook).
-
Fixed bug (Missing variance check for abstract set with asymmetric type).
-
Fixed bug (Disabled output handler is flushed again).
-
Passing E_USER_ERROR to trigger_error() is now deprecated.
-
Fixed bug (Dynamic AVX detection is broken for MSVC).
-
Using "_" as a class name is now deprecated.
-
Exiting a namespace now clears seen symbols.
-
The exit (and die) language constructs now behave more like a function. They can be passed liked callables, are affected by the strict_types declare statement, and now perform the usual type coercions instead of casting any non-integer value to a string. As such, passing invalid types to exit/die may now result in a TypeError being thrown.
-
Fixed bug (Hooks on constructor promoted properties without visibility are ignored).
-
Fixed bug (Missing readonly+hook incompatibility check for readonly classes).
resourcebundle_get(), ResourceBundle::get(), and accessing offsets on a ResourceBundle object now throw: - TypeError for invalid offset types - ValueError for an empty string - ValueError if the integer index does not fit in a signed 32 bit integer
-
ResourceBundle::get() now has a tentative return type of: ResourceBundle|array|string|int|null
-
Added the new Grapheme function grapheme_str_split.
-
Added IntlDateFormatter::parseToCalendar.
-
Added SpoofChecker::setAllowedChars to set unicode chars ranges.
The mysqli_ping() function and mysqli::ping() method are now deprecated, as the reconnect feature was removed in PHP 8.2.
-
The mysqli_kill() function and mysqli::kill() method are now deprecated. If this functionality is needed a SQL "KILL" command can be used instead.
-
The mysqli_refresh() function and mysqli::refresh() method are now deprecated. If this functionality is needed a SQL "FLUSH" command can be used instead.
-
Passing explicitly the $mode parameter to mysqli_store_result() has been deprecated. As the MYSQLI_STORE_RESULT_COPY_DATA constant was only used in conjunction with this function it has also been deprecated.
-
-
MySQLnd:
-
-
Fixed bug (PDO quote bottleneck).
-
Fixed bug (Apache crash on Windows when using a self-referencing anonymous function inside a class with an active mysqli connection).
-
-
Opcache:
-
-
Added large shared segments support for FreeBSD.
-
If JIT is enabled, PHP will now exit with a fatal error on startup in case of JIT startup initialization issues.
-
Increased the maximum value of opcache.interned_strings_buffer to 32767 on 64bit archs.
-
Fixed bug (Applying non-zero offset 36 to null pointer in zend_jit.c).
-
Fixed bug (Deep recursion in zend_cfg.c causes segfault).
-
Fixed bug (PHP 8.4 min function fails on typed integer).
-
Fixed bug (Building of callgraph modifies preloaded symbols).
-
Fixed bug (Assertion in tracing JIT on hooks).
-
Fixed bug (Segmentation fault in dasm_x86.h).
-
Added opcache_jit_blacklist() function.
-
Fixed bug (Segmentation fault with frameless functions and undefined CVs).
-
Fixed bug (Assertion failure in Zend/zend_operators.c).
-
Fixed bug (Incorrect result with reflection in low-trigger JIT).
-
Fixed (Error on building Opcache JIT for Windows ARM64).
-
-
OpenSSL:
-
-
(OpenSSL sets Subject wrong with extraattribs parameter).
-
Implement request #48520 (openssl_csr_new - allow multiple values in DN).
-
Introduced new serial_hex parameter to openssl_csr_sign.
-
Added X509_PURPOSE_OCSP_HELPER and X509_PURPOSE_TIMESTAMP_SIGN constants.
-
Bumped minimum required OpenSSL version to 1.1.1.
-
Added compile-time option --with-openssl-legacy-provider to enable legacy provider.
-
Added support for Curve25519 + Curve448 based keys.
-
Fixed bug (openssl_x509_parse should not allow omitted seconds in UTCTimes).
-
Bumped minimum required OpenSSL version to 1.1.0.
-
Implement PASSWORD_ARGON2 from OpenSSL 3.2.
-
-
Output:
-
-
Clear output handler status flags during handler initialization.
-
Fixed bug with url_rewriter.hosts not used by output_add_rewrite_var().
-
-
PCNTL:
-
-
Added pcntl_setns for Linux.
-
Added pcntl_getcpuaffinity/pcntl_setcpuaffinity.
-
Updated pcntl_get_signal_handler signal id upper limit to be more in line with platforms limits.
-
Added pcntl_getcpu for Linux/FreeBSD/Solaris/Illumos.
-
Added pcntl_getqos_class/pcntl_setqos_class for macOs.
-
Added SIGCKPT/SIGCKPTEXIT constants for DragonFlyBSD.
-
Added FreeBSD's SIGTRAP handling to pcntl_siginfo_to_zval.
-
Added POSIX pcntl_waitid.
-
Fixed bug : (pcntl_sigwaitinfo aborts on signal value as reference).
-
-
PCRE:
-
-
Upgrade bundled pcre2lib to version 10.43.
-
Add "/r" modifier.
-
Upgrade bundled pcre2lib to version 10.44.
-
Fixed (underflow on offset argument).
-
Fix UAF issues with PCRE after request shutdown.
-
-
PDO:
-
-
Fixed setAttribute and getAttribute.
-
Implemented PDO driver-specific subclasses RFC.
-
Added support for PDO driver-specific SQL parsers.
-
Fixed bug (Compilation failure on pdo_* extensions).
-
mysqlnd: support ER_CLIENT_INTERACTION_TIMEOUT.
-
The internal header php_pdo_int.h is no longer installed; it is not supposed to be used by PDO drivers.
-
Fixed bug (Prevent mixing PDO sub-classes with different DSN).
-
Fixed bug ("Pdo\Mysql object is uninitialized" when opening a persistent connection).
-
-
PDO_DBLIB:
-
-
Fixed setAttribute and getAttribute.
-
Added class Pdo\DbLib.
-
-
PDO_Firebird:
-
-
Fixed setAttribute and getAttribute.
-
Feature: Add transaction isolation level and mode settings to pdo_firebird.
-
Added class Pdo\Firebird.
-
Added Pdo\Firebird::ATTR_API_VERSION.
-
Added getApiVersion() and removed from getAttribute().
-
Supported Firebird 4.0 datatypes.
-
Support proper formatting of time zone types.
-
Fixed (Always make input parameters nullable).
-
-
PDO_MYSQL:
-
-
Fixed setAttribute and getAttribute.
-
Added class Pdo\Mysql.
-
Added custom SQL parser.
-
Fixed (PDO_MySQL not properly quoting PDO_PARAM_LOB binary data).
-
-
PDO_ODBC:
-
-
Added class Pdo\Odbc.
-
-
PDO_PGSQL:
-
-
Fixed , DSN credentials being prioritized over the user/password PDO constructor arguments.
-
Fixed native float support with pdo_pgsql query results.
-
Added class Pdo\Pgsql.
-
Retrieve the memory usage of the query result resource.
-
Added Pdo\Pgsql::setNoticeCallBack method to receive DB notices.
-
Added custom SQL parser.
-
Fixed (Double-free due to Pdo\Pgsql::setNoticeCallback()).
-
Fixed (Using PQclosePrepared when available instead of the DEALLOCATE command to free statements resources).
-
Remove PGSQL_ATTR_RESULT_MEMORY_SIZE constant as it is provided by the new PDO Subclass as Pdo\Pgsql::ATTR_RESULT_MEMORY_SIZE.
-
-
PDO_SQLITE:
-
-
Added class Pdo\Sqlite.
-
(PDO::inTransaction reports false when in transaction).
-
Added custom SQL parser.
-
-
PHPDBG:
-
-
array out of bounds, stack overflow handled for segfault handler on windows.
-
Fixed bug (Support stack limit in phpdbg).
-
-
PGSQL:
-
-
Added the possibility to have no conditions for pg_select.
-
Persistent connections support the PGSQL_CONNECT_FORCE_RENEW flag.
-
Added pg_result_memory_size to get the query result memory usage.
-
Added pg_change_password to alter an user's password.
-
Added pg_put_copy_data/pg_put_copy_end to send COPY commands and signal the end of the COPY.
-
Added pg_socket_poll to poll on the connection.
-
Added pg_jit to get infos on server JIT support.
-
Added pg_set_chunked_rows_size to fetch results per chunk.
-
pg_convert/pg_insert/pg_update/pg_delete ; regexes are now cached.
-
-
Phar:
-
-
Fixed bug (PharData created from zip has incorrect timestamp).
-
-
POSIX:
-
-
Added POSIX_SC_CHILD_MAX and POSIX_SC_CLK_TCK constants.
-
Updated posix_isatty to set the error number on file descriptors.
-
-
PSpell:
-
-
Moved to PECL.
-
-
Random:
-
-
Fixed bug (php_random_default_engine() is not C++ conforming).
-
lcg_value() is now deprecated.
-
-
Readline:
-
-
Fixed readline_info, rl_line_buffer_length/rl_len globals on update.
-
(Shared readline build fails).
-
Fixed UAF with readline_info().
-
-
Reflection:
-
-
Implement (Show attribute name/class in ReflectionAttribute dump).
-
Make ReflectionGenerator::getFunction() legal after generator termination.
-
Added ReflectionGenerator::isClosed().
-
Fixed bug (Segfault on ReflectionProperty::get{Hook,Hooks}() on dynamic properties).
-
Fixed bug (ReflectionProperty::isInitialized() is incorrect for hooked properties).
Fixed bug (The return value of ReflectionFunction::getNamespaceName() and ReflectionFunction::inNamespace() for closures is incorrect).
-
Fixed bug (No ReflectionProperty::IS_VIRTUAL) (DanielEScherzer)
-
Fixed the name of the second parameter of ReflectionClass::resetAsLazyGhost().
-
-
Session:
-
-
INI settings session.sid_length and session.sid_bits_per_character are now deprecated.
-
Emit warnings for non-positive values of session.gc_divisor and negative values of session.gc_probability.
-
Fixed bug (UAF in session_encode()).
-
-
SimpleXML:
-
-
Fix signature of simplexml_import_dom().
-
-
SNMP:
-
-
Removed the deprecated inet_ntoa call support.
-
-
SOAP:
-
-
Add support for clark notation for namespaces in class map.
-
Mitigate #51561 (SoapServer with a extented class and using sessions, lost the setPersistence()).
-
(SoapClient::__getLastResponseHeaders returns NULL if wsdl operation !has output).
-
(PHP DateTime not converted to xsd:datetime).
-
Fixed bug (soap with session persistence will silently fail when "session" built as a shared object).
-
Passing an int to SoapServer::addFunction() is now deprecated. If all PHP functions need to be provided flatten the array returned by get_defined_functions().
-
The SOAP_FUNCTIONS_ALL constant is now deprecated.
-
(SOAP functions require at least one space after HTTP header colon).
Added the SOCK_CONN_DGRAM/SOCK_DCCP netbsd constants.
-
Added multicast group support for ipv4 on FreeBSD.
-
Added the TCP_SYNCNT constant for Linux to set number of attempts to send SYN packets from the client.
-
Added the SO_EXCLBIND constant for exclusive socket binding on illumos/solaris.
-
Updated the socket_create_listen backlog argument default value to SOMAXCONN.
-
Added the SO_NOSIGPIPE constant to control the generation of SIGPIPE for macOs and FreeBSD.
-
Added SO_LINGER_SEC for macOs, true equivalent of SO_LINGER in other platforms.
-
Add close-on-exec on socket created with socket_accept on unixes.
-
Added IP_PORTRANGE* constants for BSD systems to control ephemeral port ranges.
-
Added SOCK_NONBLOCK/SOCK_CLOEXEC constants for socket_create and socket_create_pair to apply O_NONBLOCK/O_CLOEXEC flags to the newly created sockets.
-
Added SO_BINDTOIFINDEX to bind a socket to an interface index.
-
-
Sodium:
-
-
Add support for AEGIS-128L and AEGIS-256.
-
Enable AES-GCM on aarch64 with the ARM crypto extensions.
-
-
SPL:
-
-
Implement SeekableIterator for SplObjectStorage.
-
The SplFixedArray::__wakeup() method has been deprecated as it implements __serialize() and __unserialize() which need to be overwritten instead.
-
Passing a non-empty string for the $escape parameter of: - SplFileObject::setCsvControl() - SplFileObject::fputcsv() - SplFileObject::fgetcsv() is now deprecated.
-
-
Standard:
-
-
Implement (Indication for the int size in phpinfo()).
-
Partly fix (Incorrect round() result for 0.49999999999999994).
-
Fix (round(): Validate the rounding mode).
-
Increase the default BCrypt cost to 12.
-
Fixed bug (strcspn() odd behaviour with NUL bytes and empty mask).
-
Removed the deprecated inet_ntoa call support.
-
Cast large floats that are within int range to int in number_format so the precision is not lost.
-
Add support for 4 new rounding modes to the round() function.
-
debug_zval_dump() now indicates whether an array is packed.
-
Fix (Optimize round).
-
Changed return type of long2ip to string from string|false.
-
Fix (Extend the maximum precision round can handle by one digit).
-
Added the http_get_last_response_headers() and http_clear_last_response_headers() that allows retrieving the same content as the magic $http_response_header variable.
-
Add php_base64_encode_ex() API.
-
Implemented "Raising zero to the power of negative number" RFC.
-
Added array_find(), array_find_key(), array_all(), and array_any().
-
Change highlight_string() and print_r() return type to string|true.
-
Fix references in request_parse_body() options array.
-
Add RoundingMode enum.
-
Unserializing the uppercase 'S' tag is now deprecated.
-
Enables crc32 auxiliary detection on OpenBSD.
-
Passing a non-empty string for the $escape parameter of: - fputcsv() - fgetcsv() - str_getcsv() is now deprecated.
-
The str_getcsv() function now throws ValueErrors when the $separator and $enclosure arguments are not one byte long, or if the $escape is not one byte long or the empty string. This aligns the behaviour to be identical to that of fputcsv() and fgetcsv().
-
php_uname() now throws ValueErrors on invalid inputs.
-
The "allowed_classes" option for unserialize() now throws TypeErrors and ValueErrors if it is not an array of class names.
-
Implemented (improve proc_open error reporting on Windows).
-
Add support for backed enums in http_build_query().
-
Fixed bug (Assertion failure with array_find when references are involved).
-
Fixed parameter names of fpow() to be identical to pow().
-
-
Streams:
-
-
Implemented (Stream context is lost when custom stream wrapper is being filtered).
-
-
Tidy:
-
-
Failures in the constructor now throw exceptions rather than emitting warnings and having a broken object.
-
Add tidyNode::getNextSibling() and tidyNode::getPreviousSibling().
-
-
Windows:
-
-
Update the icon of the Windows executables, e.g. php.exe.
-
Fixed bug (GREP_HEADER() is broken).
-
-
XML:
-
-
Added XML_OPTION_PARSE_HUGE parser option.
-
(xml_get_current_byte_index limited to 32-bit numbers on 64-bit builds).
-
The xml_set_object() function has been deprecated.
-
Passing non-callable strings to the xml_set_*_handler() functions is now deprecated.
Fixed bug (Incorrect validation of #[Attribute] flags type for non-compile-time expressions).
-
-
DOM:
-
-
Fix crashes when entity declaration is removed while still having entity references.
-
Fix references not handled correctly in C14N.
-
Fix crash when calling childNodes next() when iterator is exhausted.
-
Fix crash in ParentNode::append() when dealing with a fragment containing text nodes.
-
-
Filter:
-
-
Fixed bug GHSA-w8qr-v226-r27w (Filter bypass in filter_var FILTER_VALIDATE_URL). (CVE-2024-5458)
-
-
FPM:
-
-
Fix bug (Show decimal number instead of scientific notation in systemd status).
-
-
Hash:
-
-
ext/hash: Swap the checking order of `__has_builtin` and `__GNUC__` (Saki Takamachi)
-
-
Intl:
-
-
Fixed build regression on systems without C++17 compilers.
-
-
MySQLnd:
-
-
Fix bug (mysqli_fetch_assoc reports error from nested query).
-
-
Opcache:
-
-
Fixed bug (Fix accidental persisting of internal class constant in shm).
-
-
OpenSSL:
-
-
The openssl_private_decrypt function in PHP, when using PKCS1 padding (OPENSSL_PKCS1_PADDING, which is the default), is vulnerable to the Marvin Attack unless it is used with an OpenSSL version that includes the changes from this pull request: https://github.com/openssl/openssl/pull/13817 (rsa_pkcs1_implicit_rejection). These changes are part of OpenSSL 3.2 and have also been backported to stable versions of various Linux distributions, as well as to the PHP builds provided for Windows since the previous release. All distributors and builders should ensure that this version is used to prevent PHP from being vulnerable.
-
-
Standard:
-
-
Fixed bug GHSA-9fcc-425m-g385 (Bypass of CVE-2024-1874). (CVE-2024-5585)
-
-
XML:
-
-
Fixed bug (Segmentation fault with XML extension under certain memory limit).
-
-
XMLReader:
-
-
Fixed bug (XMLReader::open() can't be overridden).
-
-
-
-
-
-
-
-
Version 8.3.7
-
-
Core:
-
-
Fixed zend_call_stack build with Linux/uclibc-ng without thread support.
-
Fixed bug (Invalid execute_data->opline pointers in observer fcall handlers when JIT is enabled).
-
Fixed bug (Applying zero offset to null pointer in Zend/zend_opcode.c).
-
Fixed bug (Align the behavior of zend-max-execution-timers with other timeout implementations).
-
Fixed bug (Broken cleanup of unfinished calls with callable convert parameters).
-
Fixed bug (Erroneous dnl appended in configure).
-
Fixed bug (If autoloading occurs during constant resolution filename and lineno are identified incorrectly).
-
Fixed bug (Missing void keyword).
-
-
Fibers:
-
-
Fixed bug (ASAN false positive underflow when executing copy()).
-
-
Fileinfo:
-
-
Fixed bug (Test failing in ext/fileinfo/tests/bug78987.phpt on big-endian PPC).
-
-
FPM:
-
-
Fixed bug (Setting bool values via env in FPM config fails).
-
-
Intl:
-
-
Fixed build for icu 74 and onwards.
-
-
MySQLnd:
-
-
Fix shift out of bounds on 32-bit non-fast-path platforms.
-
-
Opcache:
-
-
Fixed bug (Segmentation Fault in zend_class_init_statics when using opcache.preload).
-
Fixed incorrect assumptions across compilation units for static calls.
-
-
OpenSSL:
-
-
Fixed bug (feof on OpenSSL stream hangs indefinitely).
-
-
PDO SQLite:
-
-
Fix (Buffer size is now checked before memcmp).
-
Fix (Manage refcount of agg_context->val correctly).
-
-
Phar:
-
-
Fixed bug (Renaming a file in a Phar to an already existing filename causes a NULL pointer dereference).
-
Fixed bug (Applying zero offset to null pointer in zend_hash.c).
-
Fix potential NULL pointer dereference before calling EVP_SignInit.
-
-
PHPDBG:
-
-
Fixed bug (Null pointer access of type 'zval' in phpdbg_frame).
-
-
Posix:
-
-
Fix usage of reentrant functions in ext/posix.
-
-
Session:
-
-
Fixed bug (Member access within null pointer of type 'ps_files' in ext/session/mod_files.c).
-
Fixed bug (memleak and segfault when using ini_set with session.trans_sid_hosts).
-
Fixed buffer _read/_write size limit on windows for the file mode.
-
-
Streams:
-
-
Fixed file_get_contents() on Windows fails with "errno=22 Invalid argument".
Removed the BC break on IntlDateFormatter::construct which threw an exception with an invalid locale.
-
-
JSON:
-
-
Added json_validate().
-
-
LDAP:
-
-
Deprecate calling ldap_connect() with separate hostname and port.
-
-
LibXML:
-
-
Fix compile error with -Werror=incompatible-function-pointer-types and old libxml2.
-
-
MBString:
-
-
mb_detect_encoding is better able to identify the correct encoding for Turkish text.
-
mb_detect_encoding's "non-strict" mode now behaves as described in the documentation. Previously, it would return false if the same byte (for example, the first byte) of the input string was invalid in all candidate encodings. More generally, it would eliminate candidate encodings from consideration when an invalid byte was seen, and if the same input byte eliminated all remaining encodings still under consideration, it would return false. On the other hand, if all candidate encodings but one were eliminated from consideration, it would return the last remaining one without regard for how many encoding errors might be encountered later in the string. This is different from the behavior described in the documentation, which says: "If strict is set to false, the closest matching encoding will be returned." (Alex Dowad)
-
mb_strtolower, mb_strtotitle, and mb_convert_case implement conditional casing rules for the Greek letter sigma. For mb_convert_case, conditional casing only applies to MB_CASE_LOWER and MB_CASE_TITLE modes, not to MB_CASE_LOWER_SIMPLE and MB_CASE_TITLE_SIMPLE.
-
mb_detect_encoding is better able to identify UTF-8 and UTF-16 strings with a byte-order mark.
-
mb_decode_mimeheader interprets underscores in QPrint-encoded MIME encoded words as required by RFC 2047; they are converted to spaces. Underscores must be encoded as "=5F" in such MIME encoded words.
-
mb_encode_mimeheader no longer drops NUL (zero) bytes when QPrint-encoding the input string. This previously caused strings in certain text encodings, especially UTF-16 and UTF-32, to be corrupted by mb_encode_mimeheader.
-
Implement mb_str_pad() RFC.
-
Fixed bug (PHP 8.3 build fails with --enable-mbstring enabled).
-
Fix use-after-free of mb_list_encodings() return value.
-
Fixed bug (utf_encodings.phpt fails on Windows 32-bit).
-
-
mysqli:
-
-
mysqli_fetch_object raises a ValueError instead of an Exception.
-
-
Opcache:
-
-
Added start, restart and force restart time to opcache's phpinfo section.
-
Fix : Allow FFI in opcache.preload when opcache.preload_user=root.
-
Made opcache.preload_user always optional in the cli and phpdbg SAPIs.
-
Allows W/X bits on page creation on FreeBSD despite system settings.
-
Added memfd api usage, on Linux, for zend_shared_alloc_create_lock() to create an abstract anonymous file for the opcache's lock.
-
Avoid resetting JIT counter handlers from multiple processes/threads.
-
Fixed COPY_TMP type inference for references.
-
-
OpenSSL:
-
-
Added OPENSSL_CMS_OLDMIMETYPE and PKCS7_NOOLDMIMETYPE contants to switch between mime content types.
-
Fixed : Reset OpenSSL errors when using a PEM public key.
-
Added support for additional EC parameters in openssl_pkey_new.
-
-
PCNTL:
-
-
SA_ONSTACK is now set for pcntl_signal.
-
Added SIGINFO constant.
-
-
PCRE:
-
-
Update bundled libpcre2 to 10.42.
-
-
PGSQL:
-
-
pg_fetch_object raises a ValueError instead of an Exception.
-
pg_cancel use thread safe PQcancel api instead.
-
pg_trace new PGSQL_TRACE_SUPPRESS_TIMESTAMPS/PGSQL_TRACE_REGRESS_MODE contants support.
Fixed bug (Incorrect validation of #[Attribute] flags type for non-compile-time expressions).
-
Fixed bug (Floating point bug in range operation on Apple Silicon hardware).
-
-
DOM:
-
-
Fix crashes when entity declaration is removed while still having entity references.
-
Fix references not handled correctly in C14N.
-
Fix crash when calling childNodes next() when iterator is exhausted.
-
Fix crash in ParentNode::append() when dealing with a fragment containing text nodes.
-
-
FFI:
-
-
Fixed bug (Cannot use FFI::load on CRLF header file with apache2handler).
-
-
Filter:
-
-
Fixed bug GHSA-w8qr-v226-r27w (Filter bypass in filter_var FILTER_VALIDATE_URL). (CVE-2024-5458)
-
-
FPM:
-
-
Fix bug (Show decimal number instead of scientific notation in systemd status).
-
-
Hash:
-
-
ext/hash: Swap the checking order of `__has_builtin` and `__GNUC__` (Saki Takamachi)
-
-
Intl:
-
-
Fixed build regression on systems without C++17 compilers.
-
-
Ini:
-
-
Fixed bug (Corrected spelling mistake in php.ini files).
-
-
MySQLnd:
-
-
Fix bug (mysqli_fetch_assoc reports error from nested query).
-
-
Opcache:
-
-
Fixed bug (Fix accidental persisting of internal class constant in shm).
-
-
OpenSSL:
-
-
The openssl_private_decrypt function in PHP, when using PKCS1 padding (OPENSSL_PKCS1_PADDING, which is the default), is vulnerable to the Marvin Attack unless it is used with an OpenSSL version that includes the changes from this pull request: https://github.com/openssl/openssl/pull/13817 (rsa_pkcs1_implicit_rejection). These changes are part of OpenSSL 3.2 and have also been backported to stable versions of various Linux distributions, as well as to the PHP builds provided for Windows since the previous release. All distributors and builders should ensure that this version is used to prevent PHP from being vulnerable.
-
-
Standard:
-
-
Fixed bug GHSA-9fcc-425m-g385 (Bypass of CVE-2024-1874). (CVE-2024-5585)
-
-
XML:
-
-
Fixed bug (Segmentation fault with XML extension under certain memory limit).
-
-
XMLReader:
-
-
Fixed bug (XMLReader::open() can't be overridden).
-
-
-
-
-
-
-
-
Version 8.2.19
-
-
Core:
-
-
Fixed bug (Invalid execute_data->opline pointers in observer fcall handlers when JIT is enabled).
-
Fixed bug (Applying zero offset to null pointer in Zend/zend_opcode.c).
-
Fixed bug (Align the behavior of zend-max-execution-timers with other timeout implementations).
-
Fixed bug (Broken cleanup of unfinished calls with callable convert parameters).
-
Fixed bug (Erroneous dnl appended in configure).
-
Fixed bug (If autoloading occurs during constant resolution filename and lineno are identified incorrectly).
-
Fixed bug (Missing void keyword).
-
-
Fibers:
-
-
Fixed bug (ASAN false positive underflow when executing copy()).
-
-
FPM:
-
-
Fixed bug (Setting bool values via env in FPM config fails).
-
-
Intl:
-
-
Fixed build for icu 74 and onwards.
-
-
MySQLnd:
-
-
Fix shift out of bounds on 32-bit non-fast-path platforms.
-
-
Opcache:
-
-
Fixed incorrect assumptions across compilation units for static calls.
-
-
OpenSSL:
-
-
Fixed bug (feof on OpenSSL stream hangs indefinitely).
-
-
PDO SQLite:
-
-
Fix (Buffer size is now checked before memcmp).
-
Fix (Manage refcount of agg_context->val correctly).
-
-
Phar:
-
-
Fixed bug (Renaming a file in a Phar to an already existing filename causes a NULL pointer dereference).
-
Fixed bug (Applying zero offset to null pointer in zend_hash.c).
-
Fix potential NULL pointer dereference before calling EVP_SignInit.
-
-
PHPDBG:
-
-
Fixed bug (Null pointer access of type 'zval' in phpdbg_frame).
-
-
Posix:
-
-
Fix usage of reentrant functions in ext/posix.
-
-
Session:
-
-
Fixed bug (Member access within null pointer of type 'ps_files' in ext/session/mod_files.c).
-
Fixed bug (memleak and segfault when using ini_set with session.trans_sid_hosts).
-
Fixed buffer _read/_write size limit on windows for the file mode.
-
-
Streams:
-
-
Fixed file_get_contents() on Windows fails with "errno=22 Invalid argument".
Fixed bug (Segfault when freeing incompletely initialized closures).
-
Fixed bug (Internal iterator rewind handler is called twice).
-
Fixed bug (Incorrect compile error when using array access on TMP value in function call).
-
-
DOM:
-
-
Fix memory leak when setting an invalid DOMDocument encoding.
-
-
Iconv:
-
-
Fixed build for NetBSD which still uses the old iconv signature.
-
-
Intl:
-
-
Fixed bug (intl_get_error_message() broken after MessageFormatter::formatMessage() fails).
-
-
MySQLnd:
-
-
Fixed bug (Invalid error message when connection via SSL fails: "trying to connect via (null)").
-
-
ODBC:
-
-
Fixed memory leak with failed SQLPrepare.
-
Fixed persistent procedural ODBC connections not getting closed.
-
-
SimpleXML:
-
-
(XPath processing-instruction() function is not supported).
-
-
SPL:
-
-
Fixed bug (RecursiveCallbackFilterIterator regression in 8.1.18).
-
-
SQLite3:
-
-
Fixed bug (SQLite3 callback functions cause a memory leak with a callable array).
-
-
-
-
-
-
-
-
Version 8.2.10
-
-
CLI:
-
-
Fixed bug (cli server crashes on SIGINT when compiled with ZEND_RC_DEBUG=1).
-
Fixed bug (Improve man page about the built-in server).
-
-
Date:
-
-
Fixed bug (Crash with DatePeriod when uninitialised objects are passed in).
-
-
Core:
-
-
Fixed strerror_r detection at configuration time.
-
Fixed trait typed properties using a DNF type not being correctly bound.
-
Fixed trait property types not being arena allocated if copied from an internal trait.
-
Fixed deep copy of property DNF type during lazy class load.
-
Fixed memory freeing of DNF types for non arena allocated types.
-
-
DOM:
-
-
Fix DOMEntity field getter bugs.
-
Fix incorrect attribute existence check in DOMElement::setAttributeNodeNS.
-
Fix DOMCharacterData::replaceWith() with itself.
-
Fix empty argument cases for DOMParentNode methods.
-
Fixed bug (Wrong default value of DOMDocument::xmlStandalone).
-
Fix json_encode result on DOMDocument.
-
Fix manually calling __construct() on DOM classes.
-
Fixed bug (ParentNode methods should perform their checks upfront).
-
Fix viable next sibling search for replaceWith.
-
Fix segfault when DOMParentNode::prepend() is called when the child disappears.
-
-
FFI:
-
-
Fix leaking definitions when using FFI::cdef()->new(...).
-
-
Hash:
-
-
Fix use-of-uninitialized-value in hash_pbkdf2(), fix missing $options parameter in signature.
-
-
MySQLnd:
-
-
Fixed bug (authentication to a sha256_password account fails over SSL).
-
Fixed bug (mysqlnd fails to authenticate with sha256_password accounts using passwords longer than 19 characters).
-
Fixed bug (MySQL Statement has a empty query result when the response field has changed, also Segmentation fault).
-
Fixed invalid error message "Malformed packet" when connection is dropped.
-
-
Opcache:
-
-
Fixed bug (opcache.interned_strings_buffer either has no effect or opcache_get_status() / phpinfo() is wrong).
-
Avoid adding an unnecessary read-lock when loading script from shm if restart is in progress.
-
-
PCNTL:
-
-
Revert behaviour of receiving SIGCHLD signals back to the behaviour before 8.1.22.
-
-
SPL:
-
-
(SplFixedArray::setSize() causes use-after-free).
-
-
Standard:
-
-
Prevent int overflow on $decimals in number_format.
-
Fixed bug (Fix off-by-one bug when truncating tempnam prefix) (athos-ribeiro)
-
-
-
-
-
-
-
-
Version 8.2.9
-
-
Build:
-
-
Fixed bug (PHP version check fails with '-' separator).
-
-
CLI:
-
-
Fix interrupted CLI output causing the process to exit.
-
-
Core:
-
-
Fixed oss-fuzz #60011 (Mis-compilation of by-reference nullsafe operator).
-
Fixed line number of JMP instruction over else block.
-
Fixed use-of-uninitialized-value with ??= on assert.
-
Fixed oss-fuzz #60411 (Fix double-compilation of arrow-functions).
-
Fixed build for FreeBSD before the 11.0 releases.
-
-
Curl:
-
-
Fix crash when an invalid callback function is passed to CURLMOPT_PUSHFUNCTION.
-
-
Date:
-
-
Fixed bug (Date modify returns invalid datetime).
-
Fixed bug (Can't parse time strings which include (narrow) non-breaking space characters).
-
Fixed bug (DateTime:createFromFormat stopped parsing datetime with extra space).
-
-
DOM:
-
-
Fixed bug (DOMElement::replaceWith() doesn't replace node with DOMDocumentFragment but just deletes node or causes wrapping <></> depending on libxml2 version).
-
-
Fileinfo:
-
-
Fixed bug (finfo returns wrong mime type for xz files).
-
-
FTP:
-
-
Fix context option check for "overwrite".
-
Fixed bug (Memory leak and invalid state with consecutive ftp_nb_fget).
-
-
GD:
-
-
Fix most of the external libgd test failures.
-
-
Intl:
-
-
Fix memory leak in MessageFormatter::format() on failure.
-
-
Libxml:
-
-
Fixed bug GHSA-3qrf-m4j2-pcrr (Security issue with external entity loading in XML without enabling it). (CVE-2023-3823)
Fix (Assertion failure when adding more than 2**30 elements to an unpacked array).
-
Fix (Fiber stack variables do not participate in cycle collector).
-
Fix (Broken run_time_cache init for internal enum methods).
-
-
FPM:
-
-
(Missing separator in FPM FastCGI errors).
-
Fixed bug (FPM does not reset fastcgi.error_header).
-
(Configuration test does not perform UID lookups).
-
Fixed memory leak when running FPM config test.
-
(Wrong owner:group for listening unix socket).
-
-
Hash:
-
-
Handle exceptions from __toString in XXH3's initialization (nielsdos)
-
-
LDAP:
-
-
Fixed bug (LDAP\Connection::__construct() refers to ldap_create()).
-
-
Opcache:
-
-
Fix inverted bailout value in zend_runtime_jit() (Max Kellermann).
-
Fix access to uninitialized variable in accel_preload().
-
Fix zend_jit_find_trace() crashes.
-
Added missing lock for EXIT_INVALIDATE in zend_jit_trace_exit.
-
-
Phar:
-
-
Fix wrong flags check for compression method in phar_object.c (nielsdos)
-
-
PHPDBG:
-
-
Fix undefined behaviour in phpdbg_load_module_or_extension().
-
Fix NULL pointer dereference in phpdbg_create_conditional_breal().
-
Fix : phpdbg memory leaks by option "-h" (nielsdos)
-
Fix phpdbg segmentation fault in case of malformed input (nielsdos)
-
-
Posix:
-
-
Fix memory leak in posix_ttyname() (girgias)
-
-
Random:
-
-
Fixed bug (Theoretical file descriptor leak for /dev/urandom).
-
-
Standard:
-
-
Fix (Segfault in stripslashes() with arm64).
-
Fixed bug (Incomplete validation of object syntax during unserialize()).
-
Fix substr_replace with slots in repl_ht being UNDEF.
-
-
XMLWriter:
-
-
Fix missing check for xmlTextWriterEndElement (nielsdos)
-
-
-
-
-
-
-
-
Version 8.2.1
-
-
Core:
-
-
Fixed bug (constant() behaves inconsistent when class is undefined).
-
Fixed bug (License information for xxHash is not included in README.REDIST.BINS file).
-
Fixed bug (OpenSSL legacy providers not available on Windows).
-
Fixed bug (Can't initialize heap: [0x000001e7]).
-
Fixed potentially undefined behavior in Windows ftok(3) emulation.
-
Fixed (Misleading error message for unpacking of objects).
-
-
Apache:
-
-
Fixed bug (Partial content on incomplete POST request).
-
-
FPM:
-
-
Fixed bug (Solaris port event mechanism is still broken after bug #66694).
-
(Setting fastcgi.error_header can result in a WARNING).
-
(FPM numeric user fails to set groups).
-
Fixed bug (Random crash of FPM master process in fpm_stdio_child_said).
-
-
Imap:
-
-
Fixed bug (IMAP: there's no way to check if a IMAP\Connection is still open).
-
-
MBString:
-
-
Fixed bug (The behavior of mb_strcut in mbstring has been changed in PHP8.1).
-
-
Opcache:
-
-
Fixed bug (Segmentation Fault during OPCache Preload).
-
-
OpenSSL:
-
-
Fixed bug (OpenSSL engine clean up segfault).
-
Fixed bug (PHP fails to build if openssl was built with --no-ec).
-
Fixed bug (OpenSSL test failures when OpenSSL compiled with no-dsa).
-
-
Pcntl:
-
-
Fixed bug (Signal handler called after rshutdown leads to crash).
-
-
PDO_Firebird:
-
-
Fixed bug (Incorrect NUMERIC value returned from PDO_Firebird).
-
-
PDO/SQLite:
-
-
(PDO::quote() may return unquoted string). (CVE-2022-31631)
-
-
Session:
-
-
Fixed (session name silently fails with . and [).
-
-
SPL:
-
-
Fixed (SplFileObject::__toString() reads next line).
-
Fixed (Trampoline autoloader will get reregistered and cannot be unregistered).
-
-
SQLite3:
-
-
(open_basedir bypass in SQLite3 by using file URI).
-
-
TSRM:
-
-
Fixed Windows shmget() wrt. IPC_PRIVATE.
-
-
-
-
-
-
-
-
Version 8.2.0
-
-
CLI:
-
-
(Server logs incorrect request method).
-
Updated the mime-type table for the builtin-server.
-
Fixed potential overflow for the builtin server via the PHP_CLI_SERVER_WORKERS environment variable.
-
Fixed by changing STDOUT, STDERR and STDIN to not close on resource destruction.
-
Implement built-in web server responding without body to HEAD request on a static resource.
-
Implement built-in web server responding with HTTP status 405 to DELETE/PUT/PATCH request on a static resource.
-
Fixed bug (Null pointer dereference with -w/-s options).
-
-
COM:
-
-
Fixed bug (Can not create VT_ERROR variant type).
-
-
Core:
-
-
(Observer may not be initialized properly).
-
Fixed bug (Fix filename/lineno of constant expressions).
-
Fixed bug (Improve class type in error messages).
-
Support huge pages on MacOS.
-
Fixed bug (Casting an object to array does not unwrap refcount=1 references).
-
Fixed bug (Nullsafe in coalesce triggers undefined variable warning).
-
Fixed bug and (Allow arbitrary const expressions in backed enums).
-
Fixed bug (Incorrect lineno in backtrace of multi-line function calls).
-
Optimised code path for newly created file with the stream plain wrapper.
-
Uses safe_perealloc instead of perealloc for the ZEND_PTR_STACK_RESIZE_IF_NEEDED to avoid possible overflows.
-
Reduced the memory footprint of strings returned by var_export(), json_encode(), serialize(), iconv_*(), mb_ereg*(), session_create_id(), http_build_query(), strstr(), Reflection*::__toString().
Fixed (Streams HTTP wrapper does not fail for headers without colon). (CVE-2025-1734)
-
Fixed (Header parser of `http` stream wrapper does not handle folded headers). (CVE-2025-1217)
-
-
Windows:
-
-
Fixed phpize for Windows 11 (24H2).
-
-
-
-
-
-
-
-
Version 8.1.31
-
-
CLI:
-
-
Fixed bug (Heap-Use-After-Free in sapi_read_post_data Processing in CLI SAPI Interface).
-
-
LDAP:
-
-
Fixed bug (OOB access in ldap_escape). (CVE-2024-8932)
-
-
MySQLnd:
-
-
Fixed bug (Leak partial content of the heap through heap buffer over-read). (CVE-2024-8929)
-
-
PDO DBLIB:
-
-
Fixed bug (Integer overflow in the dblib quoter causing OOB writes). (CVE-2024-11236)
-
-
PDO Firebird:
-
-
Fixed bug (Integer overflow in the firebird quoter causing OOB writes). (CVE-2024-11236)
-
-
Streams:
-
-
Fixed bug (Configuring a proxy in a stream context might allow for CRLF injection in URIs). (CVE-2024-11234)
-
Fixed bug (Single byte overread with convert.quoted-printable-decode filter). (CVE-2024-11233)
-
-
-
-
-
-
-
-
Version 8.1.30
-
-
CGI:
-
-
Fixed bug GHSA-p99j-rfp4-xqvq (Bypass of CVE-2024-4577, Parameter Injection Vulnerability). (CVE-2024-8926)
-
Fixed bug GHSA-94p6-54jq-9mwp (cgi.force_redirect configuration is bypassable due to the environment variable collision). (CVE-2024-8927)
-
-
FPM:
-
-
Fixed bug GHSA-865w-9rf3-2wh5 (Logs from childrens may be altered). (CVE-2024-9026)
-
-
SAPI:
-
-
Fixed bug GHSA-9pqp-7h25-4f32 (Erroneous parsing of multipart form data). (CVE-2024-8925)
-
-
-
-
-
-
-
-
Version 8.1.29
-
-
CGI:
-
-
Fixed bug GHSA-3qgc-jrrr-25jv (Bypass of CVE-2012-1823, Argument Injection in PHP-CGI). (CVE-2024-4577)
-
-
Filter:
-
-
Fixed bug GHSA-w8qr-v226-r27w (Filter bypass in filter_var FILTER_VALIDATE_URL). (CVE-2024-5458)
-
-
OpenSSL:
-
-
The openssl_private_decrypt function in PHP, when using PKCS1 padding (OPENSSL_PKCS1_PADDING, which is the default), is vulnerable to the Marvin Attack unless it is used with an OpenSSL version that includes the changes from this pull request: https://github.com/openssl/openssl/pull/13817 (rsa_pkcs1_implicit_rejection). These changes are part of OpenSSL 3.2 and have also been backported to stable versions of various Linux distributions, as well as to the PHP builds provided for Windows since the previous release. All distributors and builders should ensure that this version is used to prevent PHP from being vulnerable.
-
-
Standard:
-
-
Fixed bug GHSA-9fcc-425m-g385 (Bypass of CVE-2024-1874). (CVE-2024-5585)
-
-
-
-
-
-
-
-
Version 8.1.28
-
-
Standard:
-
-
Fixed bug GHSA-pc52-254m-w9w7 (Command injection via array-ish $command parameter of proc_open). (CVE-2024-1874)
-
Fixed bug GHSA-wpj3-hf5j-x4v4 (__Host-/__Secure- cookie bypass due to partial CVE-2022-31629 fix). (CVE-2024-2756)
-
Fixed bug GHSA-h746-cjrr-wfmr (password_verify can erroneously return true, opening ATO risk). (CVE-2024-3096)
-
-
-
-
-
-
-
-
Version 8.1.27
-
-
Core:
-
-
Fixed oss-fuzz #54325 (Use-after-free of name in var-var with malicious error handler).
-
Fixed oss-fuzz #64209 (In-place modification of filename in php_message_handler_for_zend).
-
Fixed bug / (Invalid opline in OOM handlers within ZEND_FUNC_GET_ARGS and ZEND_BIND_STATIC).
Fixed bug (Backport upstream fix, PCRE regular expressions with JIT enabled gives different result).
-
-
SimpleXML:
-
-
Fixed bug (Can't use xpath with comments in SimpleXML).
-
Fixed bug (Entity reference produces infinite loop in var_dump/print_r).
-
Fixed bug (Unable to get processing instruction contents in SimpleXML).
-
Fixed bug (Unable to get comment contents in SimpleXML).
-
-
Streams:
-
-
Fixed bug (binding ipv4 address with both address and port at 0).
-
-
XML:
-
-
Fix return type of stub of xml_parse_into_struct().
-
Fix memory leak when calling xml_parse_into_struct() twice.
-
-
XSL:
-
-
Fix type error on XSLTProcessor::transformToDoc return value with SimpleXML.
-
-
Sockets:
-
-
Fix socket_export_stream() with wrong protocol (twosee)
-
-
-
-
-
-
-
-
Version 8.1.24
-
-
Core:
-
-
Fixed bug (Constant ASTs containing objects).
-
Fixed bug (On riscv64 require libatomic if actually needed).
-
Fixed bug (Segfault when freeing incompletely initialized closures).
-
Fixed bug (Internal iterator rewind handler is called twice).
-
Fixed bug (Incorrect compile error when using array access on TMP value in function call).
-
-
DOM:
-
-
Fix memory leak when setting an invalid DOMDocument encoding.
-
-
Iconv:
-
-
Fixed build for NetBSD which still uses the old iconv signature.
-
-
Intl:
-
-
Fixed bug (intl_get_error_message() broken after MessageFormatter::formatMessage() fails).
-
-
MySQLnd:
-
-
Fixed bug (Invalid error message when connection via SSL fails: "trying to connect via (null)").
-
-
ODBC:
-
-
Fixed memory leak with failed SQLPrepare.
-
Fixed persistent procedural ODBC connections not getting closed.
-
-
SimpleXML:
-
-
(XPath processing-instruction() function is not supported).
-
-
SPL:
-
-
Fixed bug (RecursiveCallbackFilterIterator regression in 8.1.18).
-
-
SQLite3:
-
-
Fixed bug (SQLite3 callback functions cause a memory leak with a callable array).
-
-
-
-
-
-
-
-
Version 8.1.23
-
-
CLI:
-
-
Fixed bug (cli server crashes on SIGINT when compiled with ZEND_RC_DEBUG=1).
-
Fixed bug (Improve man page about the built-in server).
-
-
Core:
-
-
Fixed strerror_r detection at configuration time.
-
-
Date:
-
-
Fixed bug : Crash with DatePeriod when uninitialised objects are passed in.
-
-
DOM:
-
-
Fix DOMEntity field getter bugs.
-
Fix incorrect attribute existence check in DOMElement::setAttributeNodeNS.
-
Fix DOMCharacterData::replaceWith() with itself.
-
Fix empty argument cases for DOMParentNode methods.
-
Fixed bug (Wrong default value of DOMDocument::xmlStandalone).
-
Fix json_encode result on DOMDocument.
-
Fix manually calling __construct() on DOM classes.
-
Fixed bug (ParentNode methods should perform their checks upfront).
-
Fix segfault when DOMParentNode::prepend() is called when the child disappears.
-
-
FFI:
-
-
Fix leaking definitions when using FFI::cdef()->new(...).
-
-
MySQLnd:
-
-
Fixed bug (authentication to a sha256_password account fails over SSL).
-
Fixed bug (mysqlnd fails to authenticate with sha256_password accounts using passwords longer than 19 characters).
-
Fixed bug (MySQL Statement has a empty query result when the response field has changed, also Segmentation fault).
-
Fixed invalid error message "Malformed packet" when connection is dropped.
-
-
Opcache:
-
-
Fixed bug (opcache.interned_strings_buffer either has no effect or opcache_get_status() / phpinfo() is wrong).
-
Avoid adding an unnecessary read-lock when loading script from shm if restart is in progress.
-
-
PCNTL:
-
-
Revert behaviour of receiving SIGCHLD signals back to the behaviour before 8.1.22.
-
-
SPL:
-
-
(SplFixedArray::setSize() causes use-after-free).
-
-
Standard:
-
-
Prevent int overflow on $decimals in number_format.
-
Fixed bug (Fix off-by-one bug when truncating tempnam prefix) (athos-ribeiro)
-
-
-
-
-
-
-
-
Version 8.1.22
-
-
Build:
-
-
Fixed bug (PHP version check fails with '-' separator).
-
-
CLI:
-
-
Fix interrupted CLI output causing the process to exit.
-
-
Core:
-
-
Fixed oss-fuzz #60011 (Mis-compilation of by-reference nullsafe operator).
-
Fixed use-of-uninitialized-value with ??= on assert.
-
Fixed build for FreeBSD before the 11.0 releases.
-
-
Curl:
-
-
Fix crash when an invalid callback function is passed to CURLMOPT_PUSHFUNCTION.
-
-
Date:
-
-
Fixed bug (Date modify returns invalid datetime).
-
-
DOM:
-
-
Fixed bug (DOMElement::replaceWith() doesn't replace node with DOMDocumentFragment but just deletes node or causes wrapping <></> depending on libxml2 version).
-
-
Fileinfo:
-
-
Fixed bug (finfo returns wrong mime type for xz files).
-
-
FTP:
-
-
Fix context option check for "overwrite".
-
Fixed bug (Memory leak and invalid state with consecutive ftp_nb_fget).
-
-
GD:
-
-
Fix most of the external libgd test failures.
-
-
Hash:
-
-
Fix use-of-uninitialized-value in hash_pbkdf2(), fix missing $options parameter in signature.
-
-
Intl:
-
-
Fix memory leak in MessageFormatter::format() on failure.
-
-
Libxml:
-
-
Fixed bug GHSA-3qrf-m4j2-pcrr (Security issue with external entity loading in XML without enabling it). (CVE-2023-3823)
Fixed bug (Partial content on incomplete POST request).
-
-
Core:
-
-
Fixed bug (PHP crashes when execute_ex is overridden and a __call trampoline is used from internal code).
-
Fix (Assertion `(flag & (1<<3)) == 0' failed).
-
Fix wrong comparison in block optimisation pass after opcode update.
-
-
Date:
-
-
Fixed bug (DateTime modify with unixtimestamp (@) must work like setTimestamp).
-
Fixed bug (DateTimeZone fails to parse time zones that contain the "+" character).
-
-
Fiber:
-
-
Fix assertion on stack allocation size.
-
-
FPM:
-
-
Fixed bug (FPM does not reset fastcgi.error_header).
-
(Wrong owner:group for listening unix socket).
-
-
Hash:
-
-
Handle exceptions from __toString in XXH3's initialization (nielsdos)
-
-
LDAP:
-
-
Fixed bug (LDAP\Connection::__construct() refers to ldap_create()).
-
-
MBString:
-
-
Fixed: mb_strlen (and a couple of other mbstring functions) would wrongly treat 0x80, 0xFD, 0xFE, 0xFF, and certain other byte values as the first byte of a 2-byte SJIS character.
-
-
Opcache:
-
-
Fix inverted bailout value in zend_runtime_jit() (Max Kellermann).
-
Fix access to uninitialized variable in accel_preload().
-
Fix zend_jit_find_trace() crashes.
-
Added missing lock for EXIT_INVALIDATE in zend_jit_trace_exit.
-
-
Phar:
-
-
Fix wrong flags check for compression method in phar_object.c (nielsdos)
-
-
PHPDBG:
-
-
Fix undefined behaviour in phpdbg_load_module_or_extension().
-
Fix NULL pointer dereference in phpdbg_create_conditional_breal().
-
Fix : phpdbg memory leaks by option "-h" (nielsdos)
-
Fix phpdbg segmentation fault in case of malformed input (nielsdos)
-
-
Posix:
-
-
Fix memory leak in posix_ttyname() (girgias)
-
-
Standard:
-
-
Fix (Segfault in stripslashes() with arm64).
-
Fix substr_replace with slots in repl_ht being UNDEF.
-
-
TSRM:
-
-
Fixed Windows shmget() wrt. IPC_PRIVATE.
-
-
XMLWriter:
-
-
Fix missing check for xmlTextWriterEndElement (nielsdos)
-
-
-
-
-
-
-
-
Version 8.1.14
-
-
Core:
-
-
Fixed bug (constant() behaves inconsistent when class is undefined).
-
Fixed bug (License information for xxHash is not included in README.REDIST.BINS file).
-
Fixed bug (Can't initialize heap: [0x000001e7]).
-
Fixed potentially undefined behavior in Windows ftok(3) emulation.
-
-
Date:
-
-
Fixed bug (DateTimeImmutable::diff differences in 8.1.10 onwards - timezone related).
-
Fixed bug (DateTime::createFromFormat: Parsing TZID string is too greedy).
-
Fixed bug (Time zone bug with \DateTimeInterface::diff()).
-
Fixed bug (DateTime diff returns wrong sign on day count when using a timezone).
-
-
FPM:
-
-
Fixed bug (Solaris port event mechanism is still broken after bug #66694).
-
(Setting fastcgi.error_header can result in a WARNING).
-
Fixed bug (Random crash of FPM master process in fpm_stdio_child_said).
-
-
MBString:
-
-
Fixed bug (The behavior of mb_strcut in mbstring has been changed in PHP8.1).
-
-
Opcache:
-
-
Fixed bug (Segmentation Fault during OPCache Preload).
-
-
OpenSSL:
-
-
Fixed bug (PHP fails to build if openssl was built with --no-ec).
-
Fixed bug (OpenSSL test failures when OpenSSL compiled with no-dsa).
-
-
Pcntl:
-
-
Fixed bug (Signal handler called after rshutdown leads to crash).
-
-
PDO_Firebird:
-
-
Fixed bug (Incorrect NUMERIC value returned from PDO_Firebird).
-
-
PDO/SQLite:
-
-
(PDO::quote() may return unquoted string). (CVE-2022-31631)
-
-
Session:
-
-
Fixed (session name silently fails with . and [).
-
-
SPL:
-
-
Fixed (SplFileObject::__toString() reads next line).
-
Fixed (Trampoline autoloader will get reregistered and cannot be unregistered).
-
-
SQLite3:
-
-
(open_basedir bypass in SQLite3 by using file URI).
-
-
-
-
-
-
-
-
Version 8.1.13
-
-
CLI:
-
-
Fixed bug (Null pointer dereference with -w/-s options).
-
-
Core:
-
-
Fixed bug (Generator crashes when interrupted during argument evaluation with extra named params).
-
Fixed bug (Generator crashes when memory limit is exceeded during initialization).
-
Fixed potential NULL pointer dereference Windows shm*() functions.
-
Fixed bug (Generator memory leak when interrupted during argument evaluation.
-
-
Date:
-
-
Fixed bug (DateTimeZone ctr mishandles input and adds null byte if the argument is an offset larger than 100*60 minutes).
(SplFileObject::DROP_NEW_LINE is broken for NUL and CR).
-
-
XMLReader:
-
-
(XMLReader: encoding length not checked).
-
-
Zip:
-
-
(ZipArchive::extractTo() ignores references).
-
-
-
-
-
-
-
-
Version 8.0.6
-
-
PDO_pgsql:
-
-
Revert " (PDO::PARAM_INT is treated the same as PDO::PARAM_STR)"
-
-
-
-
-
-
-
-
Version 8.0.5
-
-
Core:
-
-
(Flushing streams with compression filter is broken).
-
(Function exec without $output but with $restult_code parameter crashes).
-
(threaded mod_php won't load on FreeBSD: No space available for static Thread Local Storage).
-
Changed PowerPC CPU registers used by Zend VM to work around GCC bug. Old registers (r28/r29) might be clobbered by _restgpr routine used for return from C function compiled with -Os.
-
-
Dba:
-
-
(dba_popen() may cause segfault during RSHUTDOWN).
-
-
DOM:
-
-
(UAF when appending DOMDocument to element).
-
-
FFI:
-
-
(CData structs with fields of type struct can't be passed as C function argument).
-
-
FPM:
-
-
(Duplication of info about inherited socket after pool removing).
-
-
FTP:
-
-
(SSL_read on shutdown, ftp/proc_open).
-
-
IMAP:
-
-
(imap_open() fails when the flags parameter includes CL_EXPUNGE).
-
(imap_mail_compose() header injection).
-
-
Intl:
-
-
(msgfmt_format() does not accept DateTime references).
-
-
LibXML:
-
-
(Invalid memory access in php_libxml_xmlCheckUTF8).
-
(simplexml_load_file() doesn't use HTTP headers).
-
-
MySQLnd:
-
-
(Calling stmt_store_result after fetch doesn't throw an error).
-
-
Opcache:
-
-
(PHP problem with JIT).
-
(erronous array key overflow in 2D array with JIT).
-
(PHP crash using JIT).
-
(DASM_S_RANGE_VREG on PHP_INT_MIN-1).
-
-
Pcntl:
-
-
(Potential integer overflow in pcntl_exec()).
-
-
PCRE:
-
-
(preg_split ignores limit flag when pattern with \K has 0-width fullstring match).
-
-
PDO_ODBC:
-
-
(PDO ODBC truncates BLOB records at every 256th byte).
-
-
PDO_pgsql:
-
-
(PDO::PARAM_INT is treated the same as PDO::PARAM_STR).
-
-
Session:
-
-
(Cannot set save handler when save_handler is invalid).
-
(session_name() problem with backslash).
-
-
SOAP:
-
-
(SOAP special XML characters in namespace URIs not encoded).
-
-
Standard:
-
-
(Taking a reference to $_SERVER hides its values from phpinfo()).
-
('getdir' accidentally defined as an alias of 'dir').
-
(phpinfo(INFO_CREDITS) displays nothing in CLI).
-
(http wrapper silently ignores long Location headers).
-
(HTTP wrapper waits for HTTP 1 response after HTTP 101).
-
-
Zip:
-
-
(ZipArchive::isCompressionMethodSupported does not exist).
-
-
-
-
-
-
-
-
Version 8.0.3
-
-
Core:
-
-
(mail(): Headers after Bcc headers may be ignored).
-
-
DOM:
-
-
(DOMChildNode::remove() doesn't work on CharacterData nodes).
-
-
Gettext:
-
-
(bindtextdomain with null dir doesn't return old value).
-
-
MySQLnd:
-
-
(mysqlnd's mysql_clear_password does not transmit null-terminated password).
-
(SegFault when disabling ATTR_EMULATE_PREPARES and MySQL 8.0).
-
-
MySQLi:
-
-
(x() and y() truncating floats to integers).
-
-
Opcache:
-
-
(write_property handler of internal classes is skipped on preloaded JITted code).
-
(opcache doesn't honour pcre.jit option).
-
(Opcache JIT makes some boolean logic unexpectedly be true).
-
(JIT produces Assert failure and UNKNOWN:0 var_dumps in code involving bitshifts).
@@ -165,7 +165,7 @@
list' lookup option and start typing in a function name in the search field.
You can autocomplete the name with the space key and navigate in the dropdown
with the up and down cursor keys. We welcome feedback on this feature at
- the webmasters email address, but
+ the webmasters email address, but
please submit any bugs you find in the
bug system classifying them as a "PHP.net website problem" and providing
as much information as possible (OS, Browser version, Javascript errors, etc..).
diff --git a/archive/2004.php b/archive/2004.php
index 9d65257ec6..b3096bfc79 100644
--- a/archive/2004.php
+++ b/archive/2004.php
@@ -2,7 +2,7 @@
$_SERVER['BASE_PAGE'] = 'archive/2004.php';
include_once __DIR__ . '/../include/prepend.inc';
news_archive_sidebar();
-site_header("News Archive - 2004", ["cache" => true]);
+site_header("News Archive - 2004", ["cache" => true, 'force_new' => true]);
?>
diff --git a/assets/compiled/.gitignore b/assets/compiled/.gitignore
new file mode 100644
index 0000000000..ebdb620863
--- /dev/null
+++ b/assets/compiled/.gitignore
@@ -0,0 +1,3 @@
+# Everything in this folder is a product of the build step and should not be modified
+!.gitignore
+*
diff --git a/fonts/Fira/LICENSE b/assets/fonts/Fira/LICENSE
similarity index 100%
rename from fonts/Fira/LICENSE
rename to assets/fonts/Fira/LICENSE
diff --git a/fonts/Fira/eot/FiraMono-Bold.eot b/assets/fonts/Fira/eot/FiraMono-Bold.eot
similarity index 100%
rename from fonts/Fira/eot/FiraMono-Bold.eot
rename to assets/fonts/Fira/eot/FiraMono-Bold.eot
diff --git a/fonts/Fira/eot/FiraMono-Regular.eot b/assets/fonts/Fira/eot/FiraMono-Regular.eot
similarity index 100%
rename from fonts/Fira/eot/FiraMono-Regular.eot
rename to assets/fonts/Fira/eot/FiraMono-Regular.eot
diff --git a/fonts/Fira/eot/FiraSans-Bold.eot b/assets/fonts/Fira/eot/FiraSans-Bold.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Bold.eot
rename to assets/fonts/Fira/eot/FiraSans-Bold.eot
diff --git a/fonts/Fira/eot/FiraSans-BoldItalic.eot b/assets/fonts/Fira/eot/FiraSans-BoldItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-BoldItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-BoldItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Book.eot b/assets/fonts/Fira/eot/FiraSans-Book.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Book.eot
rename to assets/fonts/Fira/eot/FiraSans-Book.eot
diff --git a/fonts/Fira/eot/FiraSans-BookItalic.eot b/assets/fonts/Fira/eot/FiraSans-BookItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-BookItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-BookItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Eight.eot b/assets/fonts/Fira/eot/FiraSans-Eight.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Eight.eot
rename to assets/fonts/Fira/eot/FiraSans-Eight.eot
diff --git a/fonts/Fira/eot/FiraSans-EightItalic.eot b/assets/fonts/Fira/eot/FiraSans-EightItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-EightItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-EightItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Four.eot b/assets/fonts/Fira/eot/FiraSans-Four.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Four.eot
rename to assets/fonts/Fira/eot/FiraSans-Four.eot
diff --git a/fonts/Fira/eot/FiraSans-FourItalic.eot b/assets/fonts/Fira/eot/FiraSans-FourItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-FourItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-FourItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Hair.eot b/assets/fonts/Fira/eot/FiraSans-Hair.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Hair.eot
rename to assets/fonts/Fira/eot/FiraSans-Hair.eot
diff --git a/fonts/Fira/eot/FiraSans-HairItalic.eot b/assets/fonts/Fira/eot/FiraSans-HairItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-HairItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-HairItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Heavy.eot b/assets/fonts/Fira/eot/FiraSans-Heavy.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Heavy.eot
rename to assets/fonts/Fira/eot/FiraSans-Heavy.eot
diff --git a/fonts/Fira/eot/FiraSans-HeavyItalic.eot b/assets/fonts/Fira/eot/FiraSans-HeavyItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-HeavyItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-HeavyItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Light.eot b/assets/fonts/Fira/eot/FiraSans-Light.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Light.eot
rename to assets/fonts/Fira/eot/FiraSans-Light.eot
diff --git a/fonts/Fira/eot/FiraSans-LightItalic.eot b/assets/fonts/Fira/eot/FiraSans-LightItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-LightItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-LightItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Medium.eot b/assets/fonts/Fira/eot/FiraSans-Medium.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Medium.eot
rename to assets/fonts/Fira/eot/FiraSans-Medium.eot
diff --git a/fonts/Fira/eot/FiraSans-MediumItalic.eot b/assets/fonts/Fira/eot/FiraSans-MediumItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-MediumItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-MediumItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Regular.eot b/assets/fonts/Fira/eot/FiraSans-Regular.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Regular.eot
rename to assets/fonts/Fira/eot/FiraSans-Regular.eot
diff --git a/fonts/Fira/eot/FiraSans-RegularItalic.eot b/assets/fonts/Fira/eot/FiraSans-RegularItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-RegularItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-RegularItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-SemiBold.eot b/assets/fonts/Fira/eot/FiraSans-SemiBold.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-SemiBold.eot
rename to assets/fonts/Fira/eot/FiraSans-SemiBold.eot
diff --git a/fonts/Fira/eot/FiraSans-SemiBoldItalic.eot b/assets/fonts/Fira/eot/FiraSans-SemiBoldItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-SemiBoldItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-SemiBoldItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Thin.eot b/assets/fonts/Fira/eot/FiraSans-Thin.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Thin.eot
rename to assets/fonts/Fira/eot/FiraSans-Thin.eot
diff --git a/fonts/Fira/eot/FiraSans-ThinItalic.eot b/assets/fonts/Fira/eot/FiraSans-ThinItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-ThinItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-ThinItalic.eot
diff --git a/fonts/Fira/eot/FiraSans-Two.eot b/assets/fonts/Fira/eot/FiraSans-Two.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-Two.eot
rename to assets/fonts/Fira/eot/FiraSans-Two.eot
diff --git a/fonts/Fira/eot/FiraSans-TwoItalic.eot b/assets/fonts/Fira/eot/FiraSans-TwoItalic.eot
similarity index 100%
rename from fonts/Fira/eot/FiraSans-TwoItalic.eot
rename to assets/fonts/Fira/eot/FiraSans-TwoItalic.eot
diff --git a/assets/fonts/Fira/fira.css b/assets/fonts/Fira/fira.css
new file mode 100644
index 0000000000..c8306ce5a5
--- /dev/null
+++ b/assets/fonts/Fira/fira.css
@@ -0,0 +1,83 @@
+@font-face{
+ font-family: 'Fira Sans';
+ src: url('/assets/fonts/Fira/eot/FiraSans-Book.eot');
+ src: local('Fira Sans Book'),
+ local('FiraSans-Book'),
+ url('/assets/fonts/Fira/woff2/FiraSans-Book.woff2') format('woff2'),
+ url('/assets/fonts/Fira/woff/FiraSans-Book.woff') format('woff'),
+ url('/assets/fonts/Fira/eot/FiraSans-Book.eot') format('embedded-opentype'),
+ url('/assets/fonts/Fira/ttf/FiraSans-Book.ttf') format('truetype');
+ font-weight: 400;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face{
+ font-family: 'Fira Sans';
+ src: url('/assets/fonts/Fira/eot/FiraSans-BookItalic.eot');
+ src: local('Fira Sans Book Italic'),
+ local('FiraSans-BookItalic'),
+ url('/assets/fonts/Fira/woff2/FiraSans-BookItalic.woff2') format('woff2'),
+ url('/assets/fonts/Fira/woff/FiraSans-BookItalic.woff') format('woff'),
+ url('/assets/fonts/Fira/eot/FiraSans-BookItalic.eot') format('embedded-opentype'),
+ url('/assets/fonts/Fira/ttf/FiraSans-BookItalic.ttf') format('truetype');
+ font-weight: 400;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face{
+ font-family: 'Fira Sans';
+ src: url('/assets/fonts/Fira/eot/FiraSans-Medium.eot');
+ src: local('Fira Sans Medium'),
+ local('FiraSans-Medium'),
+ url('/assets/fonts/Fira/woff2/FiraSans-Medium.woff2') format('woff2'),
+ url('/assets/fonts/Fira/woff/FiraSans-Medium.woff') format('woff'),
+ url('/assets/fonts/Fira/eot/FiraSans-Medium.eot') format('embedded-opentype'),
+ url('/assets/fonts/Fira/ttf/FiraSans-Medium.ttf') format('truetype');
+ font-weight: 500;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face{
+ font-family: 'Fira Sans';
+ src: url('/assets/fonts/Fira/eot/FiraSans-MediumItalic.eot');
+ src: local('Fira Sans Medium Italic'),
+ local('FiraSans-MediumItalic'),
+ url('/assets/fonts/Fira/woff2/FiraSans-MediumItalic.woff2') format('woff2'),
+ url('/assets/fonts/Fira/woff/FiraSans-MediumItalic.woff') format('woff'),
+ url('/assets/fonts/Fira/eot/FiraSans-MediumItalic.eot') format('embedded-opentype'),
+ url('/assets/fonts/Fira/ttf/FiraSans-MediumItalic.ttf') format('truetype');
+ font-weight: 500;
+ font-style: italic;
+ font-display: swap;
+}
+
+@font-face{
+ font-family: 'Fira Mono';
+ src: url('/assets/fonts/Fira/eot/FiraMono-Regular.eot');
+ src: local('Fira Mono'),
+ local('FiraMono-Regular'),
+ url('/assets/fonts/Fira/woff2/FiraMono-Regular.woff2') format('woff2'),
+ url('/assets/fonts/Fira/woff/FiraMono-Regular.woff') format('woff'),
+ url('/assets/fonts/Fira/eot/FiraMono-Regular.eot') format('embedded-opentype'),
+ url('/assets/fonts/Fira/ttf/FiraMono-Regular.ttf') format('truetype');
+ font-weight: 400;
+ font-style: normal;
+ font-display: swap;
+}
+
+@font-face{
+ font-family: 'Fira Mono';
+ src: url('/assets/fonts/Fira/eot/FiraMono-Bold.eot');
+ src: local('Fira Mono Bold'),
+ local('FiraMono-Bold'),
+ url('/assets/fonts/Fira/woff2/FiraMono-Bold.woff2') format('woff2'),
+ url('/assets/fonts/Fira/woff/FiraMono-Bold.woff') format('woff'),
+ url('/assets/fonts/Fira/eot/FiraMono-Bold.eot') format('embedded-opentype'),
+ url('/assets/fonts/Fira/ttf/FiraMono-Bold.ttf') format('truetype');
+ font-weight: 700;
+ font-style: normal;
+ font-display: swap;
+}
diff --git a/fonts/Fira/otf/FiraMono-Bold.otf b/assets/fonts/Fira/otf/FiraMono-Bold.otf
similarity index 100%
rename from fonts/Fira/otf/FiraMono-Bold.otf
rename to assets/fonts/Fira/otf/FiraMono-Bold.otf
diff --git a/fonts/Fira/otf/FiraMono-Regular.otf b/assets/fonts/Fira/otf/FiraMono-Regular.otf
similarity index 100%
rename from fonts/Fira/otf/FiraMono-Regular.otf
rename to assets/fonts/Fira/otf/FiraMono-Regular.otf
diff --git a/fonts/Fira/otf/FiraSans-Bold.otf b/assets/fonts/Fira/otf/FiraSans-Bold.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Bold.otf
rename to assets/fonts/Fira/otf/FiraSans-Bold.otf
diff --git a/fonts/Fira/otf/FiraSans-BoldItalic.otf b/assets/fonts/Fira/otf/FiraSans-BoldItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-BoldItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-BoldItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Book.otf b/assets/fonts/Fira/otf/FiraSans-Book.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Book.otf
rename to assets/fonts/Fira/otf/FiraSans-Book.otf
diff --git a/fonts/Fira/otf/FiraSans-BookItalic.otf b/assets/fonts/Fira/otf/FiraSans-BookItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-BookItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-BookItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Eight.otf b/assets/fonts/Fira/otf/FiraSans-Eight.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Eight.otf
rename to assets/fonts/Fira/otf/FiraSans-Eight.otf
diff --git a/fonts/Fira/otf/FiraSans-EightItalic.otf b/assets/fonts/Fira/otf/FiraSans-EightItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-EightItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-EightItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Four.otf b/assets/fonts/Fira/otf/FiraSans-Four.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Four.otf
rename to assets/fonts/Fira/otf/FiraSans-Four.otf
diff --git a/fonts/Fira/otf/FiraSans-FourItalic.otf b/assets/fonts/Fira/otf/FiraSans-FourItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-FourItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-FourItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Hair.otf b/assets/fonts/Fira/otf/FiraSans-Hair.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Hair.otf
rename to assets/fonts/Fira/otf/FiraSans-Hair.otf
diff --git a/fonts/Fira/otf/FiraSans-HairItalic.otf b/assets/fonts/Fira/otf/FiraSans-HairItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-HairItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-HairItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Heavy.otf b/assets/fonts/Fira/otf/FiraSans-Heavy.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Heavy.otf
rename to assets/fonts/Fira/otf/FiraSans-Heavy.otf
diff --git a/fonts/Fira/otf/FiraSans-HeavyItalic.otf b/assets/fonts/Fira/otf/FiraSans-HeavyItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-HeavyItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-HeavyItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Light.otf b/assets/fonts/Fira/otf/FiraSans-Light.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Light.otf
rename to assets/fonts/Fira/otf/FiraSans-Light.otf
diff --git a/fonts/Fira/otf/FiraSans-LightItalic.otf b/assets/fonts/Fira/otf/FiraSans-LightItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-LightItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-LightItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Medium.otf b/assets/fonts/Fira/otf/FiraSans-Medium.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Medium.otf
rename to assets/fonts/Fira/otf/FiraSans-Medium.otf
diff --git a/fonts/Fira/otf/FiraSans-MediumItalic.otf b/assets/fonts/Fira/otf/FiraSans-MediumItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-MediumItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-MediumItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Regular.otf b/assets/fonts/Fira/otf/FiraSans-Regular.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Regular.otf
rename to assets/fonts/Fira/otf/FiraSans-Regular.otf
diff --git a/fonts/Fira/otf/FiraSans-RegularItalic.otf b/assets/fonts/Fira/otf/FiraSans-RegularItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-RegularItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-RegularItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-SemiBold.otf b/assets/fonts/Fira/otf/FiraSans-SemiBold.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-SemiBold.otf
rename to assets/fonts/Fira/otf/FiraSans-SemiBold.otf
diff --git a/fonts/Fira/otf/FiraSans-SemiBoldItalic.otf b/assets/fonts/Fira/otf/FiraSans-SemiBoldItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-SemiBoldItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-SemiBoldItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Thin.otf b/assets/fonts/Fira/otf/FiraSans-Thin.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Thin.otf
rename to assets/fonts/Fira/otf/FiraSans-Thin.otf
diff --git a/fonts/Fira/otf/FiraSans-ThinItalic.otf b/assets/fonts/Fira/otf/FiraSans-ThinItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-ThinItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-ThinItalic.otf
diff --git a/fonts/Fira/otf/FiraSans-Two.otf b/assets/fonts/Fira/otf/FiraSans-Two.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-Two.otf
rename to assets/fonts/Fira/otf/FiraSans-Two.otf
diff --git a/fonts/Fira/otf/FiraSans-TwoItalic.otf b/assets/fonts/Fira/otf/FiraSans-TwoItalic.otf
similarity index 100%
rename from fonts/Fira/otf/FiraSans-TwoItalic.otf
rename to assets/fonts/Fira/otf/FiraSans-TwoItalic.otf
diff --git a/fonts/Fira/ttf/FiraMono-Bold.ttf b/assets/fonts/Fira/ttf/FiraMono-Bold.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraMono-Bold.ttf
rename to assets/fonts/Fira/ttf/FiraMono-Bold.ttf
diff --git a/fonts/Fira/ttf/FiraMono-Regular.ttf b/assets/fonts/Fira/ttf/FiraMono-Regular.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraMono-Regular.ttf
rename to assets/fonts/Fira/ttf/FiraMono-Regular.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Bold.ttf b/assets/fonts/Fira/ttf/FiraSans-Bold.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Bold.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Bold.ttf
diff --git a/fonts/Fira/ttf/FiraSans-BoldItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-BoldItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-BoldItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-BoldItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Book.ttf b/assets/fonts/Fira/ttf/FiraSans-Book.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Book.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Book.ttf
diff --git a/fonts/Fira/ttf/FiraSans-BookItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-BookItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-BookItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-BookItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Eight.ttf b/assets/fonts/Fira/ttf/FiraSans-Eight.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Eight.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Eight.ttf
diff --git a/fonts/Fira/ttf/FiraSans-EightItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-EightItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-EightItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-EightItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Four.ttf b/assets/fonts/Fira/ttf/FiraSans-Four.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Four.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Four.ttf
diff --git a/fonts/Fira/ttf/FiraSans-FourItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-FourItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-FourItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-FourItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Hair.ttf b/assets/fonts/Fira/ttf/FiraSans-Hair.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Hair.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Hair.ttf
diff --git a/fonts/Fira/ttf/FiraSans-HairItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-HairItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-HairItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-HairItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Heavy.ttf b/assets/fonts/Fira/ttf/FiraSans-Heavy.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Heavy.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Heavy.ttf
diff --git a/fonts/Fira/ttf/FiraSans-HeavyItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-HeavyItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-HeavyItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-HeavyItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Light.ttf b/assets/fonts/Fira/ttf/FiraSans-Light.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Light.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Light.ttf
diff --git a/fonts/Fira/ttf/FiraSans-LightItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-LightItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-LightItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-LightItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Medium.ttf b/assets/fonts/Fira/ttf/FiraSans-Medium.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Medium.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Medium.ttf
diff --git a/fonts/Fira/ttf/FiraSans-MediumItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-MediumItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-MediumItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-MediumItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Regular.ttf b/assets/fonts/Fira/ttf/FiraSans-Regular.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Regular.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Regular.ttf
diff --git a/fonts/Fira/ttf/FiraSans-RegularItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-RegularItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-RegularItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-RegularItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-SemiBold.ttf b/assets/fonts/Fira/ttf/FiraSans-SemiBold.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-SemiBold.ttf
rename to assets/fonts/Fira/ttf/FiraSans-SemiBold.ttf
diff --git a/fonts/Fira/ttf/FiraSans-SemiBoldItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-SemiBoldItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-SemiBoldItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-SemiBoldItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Thin.ttf b/assets/fonts/Fira/ttf/FiraSans-Thin.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Thin.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Thin.ttf
diff --git a/fonts/Fira/ttf/FiraSans-ThinItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-ThinItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-ThinItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-ThinItalic.ttf
diff --git a/fonts/Fira/ttf/FiraSans-Two.ttf b/assets/fonts/Fira/ttf/FiraSans-Two.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-Two.ttf
rename to assets/fonts/Fira/ttf/FiraSans-Two.ttf
diff --git a/fonts/Fira/ttf/FiraSans-TwoItalic.ttf b/assets/fonts/Fira/ttf/FiraSans-TwoItalic.ttf
similarity index 100%
rename from fonts/Fira/ttf/FiraSans-TwoItalic.ttf
rename to assets/fonts/Fira/ttf/FiraSans-TwoItalic.ttf
diff --git a/fonts/Fira/woff/FiraMono-Bold.woff b/assets/fonts/Fira/woff/FiraMono-Bold.woff
similarity index 100%
rename from fonts/Fira/woff/FiraMono-Bold.woff
rename to assets/fonts/Fira/woff/FiraMono-Bold.woff
diff --git a/fonts/Fira/woff/FiraMono-Regular.woff b/assets/fonts/Fira/woff/FiraMono-Regular.woff
similarity index 100%
rename from fonts/Fira/woff/FiraMono-Regular.woff
rename to assets/fonts/Fira/woff/FiraMono-Regular.woff
diff --git a/fonts/Fira/woff/FiraSans-Bold.woff b/assets/fonts/Fira/woff/FiraSans-Bold.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Bold.woff
rename to assets/fonts/Fira/woff/FiraSans-Bold.woff
diff --git a/fonts/Fira/woff/FiraSans-BoldItalic.woff b/assets/fonts/Fira/woff/FiraSans-BoldItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-BoldItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-BoldItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Book.woff b/assets/fonts/Fira/woff/FiraSans-Book.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Book.woff
rename to assets/fonts/Fira/woff/FiraSans-Book.woff
diff --git a/fonts/Fira/woff/FiraSans-BookItalic.woff b/assets/fonts/Fira/woff/FiraSans-BookItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-BookItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-BookItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Eight.woff b/assets/fonts/Fira/woff/FiraSans-Eight.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Eight.woff
rename to assets/fonts/Fira/woff/FiraSans-Eight.woff
diff --git a/fonts/Fira/woff/FiraSans-EightItalic.woff b/assets/fonts/Fira/woff/FiraSans-EightItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-EightItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-EightItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Four.woff b/assets/fonts/Fira/woff/FiraSans-Four.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Four.woff
rename to assets/fonts/Fira/woff/FiraSans-Four.woff
diff --git a/fonts/Fira/woff/FiraSans-FourItalic.woff b/assets/fonts/Fira/woff/FiraSans-FourItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-FourItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-FourItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Hair.woff b/assets/fonts/Fira/woff/FiraSans-Hair.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Hair.woff
rename to assets/fonts/Fira/woff/FiraSans-Hair.woff
diff --git a/fonts/Fira/woff/FiraSans-HairItalic.woff b/assets/fonts/Fira/woff/FiraSans-HairItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-HairItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-HairItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Heavy.woff b/assets/fonts/Fira/woff/FiraSans-Heavy.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Heavy.woff
rename to assets/fonts/Fira/woff/FiraSans-Heavy.woff
diff --git a/fonts/Fira/woff/FiraSans-HeavyItalic.woff b/assets/fonts/Fira/woff/FiraSans-HeavyItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-HeavyItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-HeavyItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Light.woff b/assets/fonts/Fira/woff/FiraSans-Light.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Light.woff
rename to assets/fonts/Fira/woff/FiraSans-Light.woff
diff --git a/fonts/Fira/woff/FiraSans-LightItalic.woff b/assets/fonts/Fira/woff/FiraSans-LightItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-LightItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-LightItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Medium.woff b/assets/fonts/Fira/woff/FiraSans-Medium.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Medium.woff
rename to assets/fonts/Fira/woff/FiraSans-Medium.woff
diff --git a/fonts/Fira/woff/FiraSans-MediumItalic.woff b/assets/fonts/Fira/woff/FiraSans-MediumItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-MediumItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-MediumItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Regular.woff b/assets/fonts/Fira/woff/FiraSans-Regular.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Regular.woff
rename to assets/fonts/Fira/woff/FiraSans-Regular.woff
diff --git a/fonts/Fira/woff/FiraSans-RegularItalic.woff b/assets/fonts/Fira/woff/FiraSans-RegularItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-RegularItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-RegularItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-SemiBold.woff b/assets/fonts/Fira/woff/FiraSans-SemiBold.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-SemiBold.woff
rename to assets/fonts/Fira/woff/FiraSans-SemiBold.woff
diff --git a/fonts/Fira/woff/FiraSans-SemiBoldItalic.woff b/assets/fonts/Fira/woff/FiraSans-SemiBoldItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-SemiBoldItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-SemiBoldItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Thin.woff b/assets/fonts/Fira/woff/FiraSans-Thin.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Thin.woff
rename to assets/fonts/Fira/woff/FiraSans-Thin.woff
diff --git a/fonts/Fira/woff/FiraSans-ThinItalic.woff b/assets/fonts/Fira/woff/FiraSans-ThinItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-ThinItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-ThinItalic.woff
diff --git a/fonts/Fira/woff/FiraSans-Two.woff b/assets/fonts/Fira/woff/FiraSans-Two.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-Two.woff
rename to assets/fonts/Fira/woff/FiraSans-Two.woff
diff --git a/fonts/Fira/woff/FiraSans-TwoItalic.woff b/assets/fonts/Fira/woff/FiraSans-TwoItalic.woff
similarity index 100%
rename from fonts/Fira/woff/FiraSans-TwoItalic.woff
rename to assets/fonts/Fira/woff/FiraSans-TwoItalic.woff
diff --git a/fonts/Fira/woff2/FiraMono-Bold.woff2 b/assets/fonts/Fira/woff2/FiraMono-Bold.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraMono-Bold.woff2
rename to assets/fonts/Fira/woff2/FiraMono-Bold.woff2
diff --git a/fonts/Fira/woff2/FiraMono-Regular.woff2 b/assets/fonts/Fira/woff2/FiraMono-Regular.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraMono-Regular.woff2
rename to assets/fonts/Fira/woff2/FiraMono-Regular.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Bold.woff2 b/assets/fonts/Fira/woff2/FiraSans-Bold.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Bold.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Bold.woff2
diff --git a/fonts/Fira/woff2/FiraSans-BoldItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-BoldItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-BoldItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-BoldItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Book.woff2 b/assets/fonts/Fira/woff2/FiraSans-Book.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Book.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Book.woff2
diff --git a/fonts/Fira/woff2/FiraSans-BookItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-BookItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-BookItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-BookItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Eight.woff2 b/assets/fonts/Fira/woff2/FiraSans-Eight.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Eight.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Eight.woff2
diff --git a/fonts/Fira/woff2/FiraSans-EightItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-EightItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-EightItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-EightItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Four.woff2 b/assets/fonts/Fira/woff2/FiraSans-Four.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Four.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Four.woff2
diff --git a/fonts/Fira/woff2/FiraSans-FourItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-FourItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-FourItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-FourItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Hair.woff2 b/assets/fonts/Fira/woff2/FiraSans-Hair.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Hair.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Hair.woff2
diff --git a/fonts/Fira/woff2/FiraSans-HairItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-HairItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-HairItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-HairItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Heavy.woff2 b/assets/fonts/Fira/woff2/FiraSans-Heavy.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Heavy.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Heavy.woff2
diff --git a/fonts/Fira/woff2/FiraSans-HeavyItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-HeavyItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-HeavyItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-HeavyItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Light.woff2 b/assets/fonts/Fira/woff2/FiraSans-Light.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Light.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Light.woff2
diff --git a/fonts/Fira/woff2/FiraSans-LightItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-LightItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-LightItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-LightItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Medium.woff2 b/assets/fonts/Fira/woff2/FiraSans-Medium.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Medium.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Medium.woff2
diff --git a/fonts/Fira/woff2/FiraSans-MediumItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-MediumItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-MediumItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-MediumItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Regular.woff2 b/assets/fonts/Fira/woff2/FiraSans-Regular.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Regular.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Regular.woff2
diff --git a/fonts/Fira/woff2/FiraSans-RegularItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-RegularItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-RegularItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-RegularItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-SemiBold.woff2 b/assets/fonts/Fira/woff2/FiraSans-SemiBold.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-SemiBold.woff2
rename to assets/fonts/Fira/woff2/FiraSans-SemiBold.woff2
diff --git a/fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-SemiBoldItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Thin.woff2 b/assets/fonts/Fira/woff2/FiraSans-Thin.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Thin.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Thin.woff2
diff --git a/fonts/Fira/woff2/FiraSans-ThinItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-ThinItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-ThinItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-ThinItalic.woff2
diff --git a/fonts/Fira/woff2/FiraSans-Two.woff2 b/assets/fonts/Fira/woff2/FiraSans-Two.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-Two.woff2
rename to assets/fonts/Fira/woff2/FiraSans-Two.woff2
diff --git a/fonts/Fira/woff2/FiraSans-TwoItalic.woff2 b/assets/fonts/Fira/woff2/FiraSans-TwoItalic.woff2
similarity index 100%
rename from fonts/Fira/woff2/FiraSans-TwoItalic.woff2
rename to assets/fonts/Fira/woff2/FiraSans-TwoItalic.woff2
diff --git a/fonts/Font-Awesome/LICENSE.txt b/assets/fonts/Font-Awesome/LICENSE.txt
similarity index 100%
rename from fonts/Font-Awesome/LICENSE.txt
rename to assets/fonts/Font-Awesome/LICENSE.txt
diff --git a/fonts/Font-Awesome/README.txt b/assets/fonts/Font-Awesome/README.txt
similarity index 100%
rename from fonts/Font-Awesome/README.txt
rename to assets/fonts/Font-Awesome/README.txt
diff --git a/fonts/Font-Awesome/config.json b/assets/fonts/Font-Awesome/config.json
similarity index 100%
rename from fonts/Font-Awesome/config.json
rename to assets/fonts/Font-Awesome/config.json
diff --git a/fonts/Font-Awesome/css/animation.css b/assets/fonts/Font-Awesome/css/animation.css
similarity index 100%
rename from fonts/Font-Awesome/css/animation.css
rename to assets/fonts/Font-Awesome/css/animation.css
diff --git a/fonts/Font-Awesome/css/fontello-codes.css b/assets/fonts/Font-Awesome/css/fontello-codes.css
similarity index 100%
rename from fonts/Font-Awesome/css/fontello-codes.css
rename to assets/fonts/Font-Awesome/css/fontello-codes.css
diff --git a/fonts/Font-Awesome/css/fontello-embedded.css b/assets/fonts/Font-Awesome/css/fontello-embedded.css
similarity index 100%
rename from fonts/Font-Awesome/css/fontello-embedded.css
rename to assets/fonts/Font-Awesome/css/fontello-embedded.css
diff --git a/fonts/Font-Awesome/css/fontello-ie7-codes.css b/assets/fonts/Font-Awesome/css/fontello-ie7-codes.css
similarity index 100%
rename from fonts/Font-Awesome/css/fontello-ie7-codes.css
rename to assets/fonts/Font-Awesome/css/fontello-ie7-codes.css
diff --git a/fonts/Font-Awesome/css/fontello-ie7.css b/assets/fonts/Font-Awesome/css/fontello-ie7.css
similarity index 100%
rename from fonts/Font-Awesome/css/fontello-ie7.css
rename to assets/fonts/Font-Awesome/css/fontello-ie7.css
diff --git a/assets/fonts/Font-Awesome/css/fontello.css b/assets/fonts/Font-Awesome/css/fontello.css
new file mode 100644
index 0000000000..5c19e535ca
--- /dev/null
+++ b/assets/fonts/Font-Awesome/css/fontello.css
@@ -0,0 +1,59 @@
+@font-face {
+ font-family: 'fontello';
+ src: url('/assets/fonts/Font-Awesome/font/fontello.eot?96103027');
+ src: url('/assets/fonts/Font-Awesome/font/fontello.eot?96103027#iefix') format('embedded-opentype'),
+ url('/assets/fonts/Font-Awesome/font/fontello.woff2?96103027') format('woff2'),
+ url('/assets/fonts/Font-Awesome/font/fontello.woff?96103027') format('woff'),
+ url('/assets/fonts/Font-Awesome/font/fontello.ttf?96103027') format('truetype'),
+ url('/assets/fonts/Font-Awesome/font/fontello.svg?96103027#fontello') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ @font-face {
+ font-family: 'fontello';
+ src: url('../font/fontello.svg?96103027#fontello') format('svg');
+ }
+}
+*/
+[class^="icon-"]:before, [class*=" icon-"]:before {
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ speak: never;
+
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ /* opacity: .8; */
+
+ /* For safety - reset parent styles, that can break glyph codes*/
+ font-variant: normal;
+ text-transform: none;
+
+ /* fix buttons height, for twitter bootstrap */
+ line-height: 1em;
+
+ /* Animation center compensation - margins should be symmetric */
+ /* remove if not needed */
+ margin-left: .2em;
+
+ /* you can be more comfortable with increased icons size */
+ /* font-size: 120%; */
+
+ /* Font smoothing. That was taken from TWBS */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ /* Uncomment for 3D effect */
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+}
+
+.icon-x-twitter:before { content: '\e800'; } /* '' */
+.icon-mastodon:before { content: '\e801'; } /* '' */
+.icon-linkedin:before { content: '\f0e1'; } /* '' */
diff --git a/fonts/Font-Awesome/font/fontello.eot b/assets/fonts/Font-Awesome/font/fontello.eot
similarity index 100%
rename from fonts/Font-Awesome/font/fontello.eot
rename to assets/fonts/Font-Awesome/font/fontello.eot
diff --git a/fonts/Font-Awesome/font/fontello.svg b/assets/fonts/Font-Awesome/font/fontello.svg
similarity index 100%
rename from fonts/Font-Awesome/font/fontello.svg
rename to assets/fonts/Font-Awesome/font/fontello.svg
diff --git a/fonts/Font-Awesome/font/fontello.ttf b/assets/fonts/Font-Awesome/font/fontello.ttf
similarity index 100%
rename from fonts/Font-Awesome/font/fontello.ttf
rename to assets/fonts/Font-Awesome/font/fontello.ttf
diff --git a/fonts/Font-Awesome/font/fontello.woff b/assets/fonts/Font-Awesome/font/fontello.woff
similarity index 100%
rename from fonts/Font-Awesome/font/fontello.woff
rename to assets/fonts/Font-Awesome/font/fontello.woff
diff --git a/fonts/Font-Awesome/font/fontello.woff2 b/assets/fonts/Font-Awesome/font/fontello.woff2
similarity index 100%
rename from fonts/Font-Awesome/font/fontello.woff2
rename to assets/fonts/Font-Awesome/font/fontello.woff2
diff --git a/js/common.js b/assets/js/common.js
similarity index 92%
rename from js/common.js
rename to assets/js/common.js
index 86b4862fd5..33b19d6a88 100644
--- a/js/common.js
+++ b/assets/js/common.js
@@ -879,3 +879,78 @@ function applyTheme(theme) {
}
applyTheme(savedTheme)
+
+function shuffleImmutableArray(array) {
+ const newArray = [...array];
+ for (let i = newArray.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [newArray[i], newArray[j]] = [newArray[j], newArray[i]];
+ }
+ return newArray;
+}
+
+function shuffleDOMChildrenWithLimit(parent, limit) {
+ const children = Array.from(parent.children);
+ const replacements = shuffleImmutableArray(children).slice(0, limit);
+
+ while (parent.children.length) {
+ parent.removeChild(parent.children[0]);
+ }
+
+ replacements.forEach(n => parent.appendChild(n));
+}
+
+
+
+
+document.addEventListener('DOMContentLoaded', () => {
+ const dropdowns = document.querySelectorAll('.gst-tnav-dropdown');
+
+ dropdowns.forEach(dropdown => {
+ const trigger = dropdown.querySelector('.gst-tnav-drop-trigger');
+ const menu = dropdown.querySelector('.gst-tnav-dropdown-menu');
+
+ if (!trigger || !menu) return;
+
+ // State helpers
+ const openMenu = () => trigger.setAttribute('aria-expanded', 'true');
+ const closeMenu = () => trigger.setAttribute('aria-expanded', 'false');
+
+ // 1. Mouse Interaction
+ dropdown.addEventListener('mouseenter', openMenu);
+ dropdown.addEventListener('mouseleave', closeMenu);
+
+ // 2. Keyboard Interaction (Escape Key)
+ dropdown.addEventListener('keydown', (e) => {
+ if (e.key === 'Escape') {
+ closeMenu();
+ trigger.focus(); // Return focus to the trigger
+ }
+ });
+
+ // 3. Focus Management (Tabbing)
+ trigger.addEventListener('focus', openMenu);
+
+ // Close the dropdown if the user tabs out of the entire dropdown container
+ dropdown.addEventListener('focusout', (e) => {
+ if (!dropdown.contains(e.relatedTarget)) {
+ closeMenu();
+ }
+ });
+
+ // 4. Touch / Click Interaction for Mobile
+ trigger.addEventListener('click', (e) => {
+ const isExpanded = trigger.getAttribute('aria-expanded') === 'true';
+
+ if (!isExpanded) {
+ // Prevent following the link on the first tap so the menu can open
+ e.preventDefault();
+ openMenu();
+ } else if (trigger.getAttribute('href') === '#' || trigger.getAttribute('href') === '') {
+ // Prevent jumping to top of page if the link is a placeholder
+ e.preventDefault();
+ closeMenu();
+ }
+ });
+ });
+});
diff --git a/js/ext/FuzzySearch.min.js b/assets/js/ext/FuzzySearch.min.js
similarity index 100%
rename from js/ext/FuzzySearch.min.js
rename to assets/js/ext/FuzzySearch.min.js
diff --git a/js/ext/jquery-3.6.0.min.js b/assets/js/ext/jquery-3.6.0.min.js
similarity index 100%
rename from js/ext/jquery-3.6.0.min.js
rename to assets/js/ext/jquery-3.6.0.min.js
diff --git a/js/ext/jquery.scrollTo.min.js b/assets/js/ext/jquery.scrollTo.min.js
similarity index 100%
rename from js/ext/jquery.scrollTo.min.js
rename to assets/js/ext/jquery.scrollTo.min.js
diff --git a/js/ext/mousetrap.min.js b/assets/js/ext/mousetrap.min.js
similarity index 100%
rename from js/ext/mousetrap.min.js
rename to assets/js/ext/mousetrap.min.js
diff --git a/js/ext/prism.js b/assets/js/ext/prism.js
similarity index 100%
rename from js/ext/prism.js
rename to assets/js/ext/prism.js
diff --git a/js/interactive-examples.js b/assets/js/interactive-examples.js
similarity index 98%
rename from js/interactive-examples.js
rename to assets/js/interactive-examples.js
index eb296c94df..bc44611ad7 100644
--- a/js/interactive-examples.js
+++ b/assets/js/interactive-examples.js
@@ -1,4 +1,4 @@
-import phpBinary from "/js/php-web.mjs";
+import phpBinary from "/assets/js/php-web.mjs";
function generateExampleOutputTitle(phpVersion) {
return "Output of the above example in PHP "+ phpVersion +":";
diff --git a/assets/js/landing.js b/assets/js/landing.js
new file mode 100644
index 0000000000..a50b4f7d8e
--- /dev/null
+++ b/assets/js/landing.js
@@ -0,0 +1,85 @@
+function initInfiniteScroll(parentContainer, speed = 50, setupArgs = {}) {
+ if (!parentContainer) return null;
+
+ // 1. Extract the fixed width from the data-width attribute
+ const dataWidth = parentContainer.dataset.width;
+ if (!dataWidth) {
+ console.error("InfiniteScroll Error: Missing 'data-width' attribute on the container.");
+ return null;
+ }
+
+ const widthNum = parseInt(dataWidth, 10);
+ const widthStr = `${widthNum}px`;
+
+ // 2. Gather the existing child elements currently inside the parent
+ const elements = Array.from(parentContainer.children);
+ if (elements.length === 0) return null;
+
+ // 3. Prepare the parent container styling
+ parentContainer.style.overflow = 'hidden';
+ parentContainer.style.position = 'relative';
+ parentContainer.style.width = '100%';
+
+ // 4. Create the scrolling track
+ const track = document.createElement('div');
+ track.style.display = 'flex';
+ track.style.width = 'max-content';
+ track.style.willChange = 'transform';
+
+ // 5. Apply widths and move existing elements into the track
+ elements.forEach(el => {
+ el.style.width = widthStr;
+ el.style.flexShrink = '0';
+ track.appendChild(el); // Automatically removes it from parentContainer and places it in track
+ });
+
+ // 6. Append the track to the parent container
+ parentContainer.appendChild(track);
+
+ // 7. Clone elements to ensure a seamless loop with no blank gaps
+ const parentWidth = parentContainer.offsetWidth || window.innerWidth;
+ const originalTotalWidth = elements.length * widthNum;
+
+ let currentTrackWidth = originalTotalWidth;
+ while (currentTrackWidth < parentWidth + originalTotalWidth) {
+ elements.forEach(el => {
+ const clone = el.cloneNode(true);
+ clone.style.width = widthStr;
+ clone.style.flexShrink = '0';
+ track.appendChild(clone);
+ });
+ currentTrackWidth += originalTotalWidth;
+ }
+
+ // 8. Generate a unique CSS keyframe animation dynamically
+ const animationName = `infiniteScroll_${Math.random().toString(36).substr(2, 9)}`;
+ const styleNode = document.createElement('style');
+ styleNode.textContent = `
+ @keyframes ${animationName} {
+ 0% { transform: translateX(0); }
+ 100% { transform: translateX(-${originalTotalWidth}px); }
+ }
+ `;
+ document.head.appendChild(styleNode);
+
+ // 9. Apply the animation (speed is pixels per second)
+ const duration = originalTotalWidth / speed;
+ track.style.animation = `${animationName} ${duration}s linear infinite`;
+
+ // 10. Return playback and cleanup controls
+ const tools = {
+ pause: () => track.style.animationPlayState = 'paused',
+ play: () => track.style.animationPlayState = 'running',
+ destroy: () => {
+ // Puts original elements back and cleans up the DOM
+ elements.forEach(el => parentContainer.appendChild(el));
+ track.remove();
+ styleNode.remove();
+ }
+ };
+
+ parentContainer.addEventListener('mouseenter', () => tools.pause());
+ parentContainer.addEventListener('mouseleave', () => tools.play());
+
+ return tools;
+}
diff --git a/js/php-web-README.md b/assets/js/php-web-README.md
similarity index 100%
rename from js/php-web-README.md
rename to assets/js/php-web-README.md
diff --git a/js/php-web.mjs b/assets/js/php-web.mjs
similarity index 100%
rename from js/php-web.mjs
rename to assets/js/php-web.mjs
diff --git a/js/php-web.wasm b/assets/js/php-web.wasm
similarity index 100%
rename from js/php-web.wasm
rename to assets/js/php-web.wasm
diff --git a/assets/js/sandbox.js b/assets/js/sandbox.js
new file mode 100644
index 0000000000..5c9768426a
--- /dev/null
+++ b/assets/js/sandbox.js
@@ -0,0 +1,41 @@
+import phpBinary from "./php-web.mjs";
+
+export class PHPSandbox {
+ constructor(templateFiles) {
+ this.templateFiles = templateFiles;
+ }
+
+ async execute(files) {
+ let buffer = [];
+ let initializing = true;
+
+ files = {...files, ...this.templateFiles};
+
+ const php = await phpBinary({
+ print(data) {
+ if (initializing) {
+ return;
+ }
+
+ console.log('output', data);
+
+ buffer.push(data);
+ }
+ });
+
+ for (const [filename, content] of Object.entries(files)) {
+ const dir = filename.substring(0, filename.lastIndexOf('/'));
+ if (dir) {
+ php.FS_createPath('/', dir, true, true);
+ }
+
+ php.FS.writeFile('/' + filename, content);
+ }
+
+ initializing = false;
+ php.ccall("phpw_run", null, ["string"], ['require "boot.php";']);
+
+ return JSON.parse(buffer.join(""));
+ }
+}
+
diff --git a/js/search-index.php b/assets/js/search-index.php
similarity index 92%
rename from js/search-index.php
rename to assets/js/search-index.php
index cfee19d506..ca137cb94a 100644
--- a/js/search-index.php
+++ b/assets/js/search-index.php
@@ -4,7 +4,7 @@
$lang = $_GET["lang"] ?? "en";
if (empty($_SERVER["DOCUMENT_ROOT"])) {
- $_SERVER["DOCUMENT_ROOT"] = __DIR__ . "/../";
+ $_SERVER["DOCUMENT_ROOT"] = __DIR__ . "/web-php/";
}
include __DIR__ . '/../include/prepend.inc';
if (!isset(Languages::ACTIVE_ONLINE_LANGUAGES[$lang])) {
diff --git a/js/search.js b/assets/js/search.js
similarity index 100%
rename from js/search.js
rename to assets/js/search.js
diff --git a/js/usernotes.js b/assets/js/usernotes.js
similarity index 100%
rename from js/usernotes.js
rename to assets/js/usernotes.js
diff --git a/styles/add-note.css b/assets/styles/add-note.css
similarity index 100%
rename from styles/add-note.css
rename to assets/styles/add-note.css
diff --git a/styles/calendar.css b/assets/styles/calendar.css
similarity index 100%
rename from styles/calendar.css
rename to assets/styles/calendar.css
diff --git a/styles/changelog.css b/assets/styles/changelog.css
similarity index 100%
rename from styles/changelog.css
rename to assets/styles/changelog.css
diff --git a/styles/code-syntax.css b/assets/styles/code-syntax.css
similarity index 99%
rename from styles/code-syntax.css
rename to assets/styles/code-syntax.css
index 02f927911e..c2c41b6904 100644
--- a/styles/code-syntax.css
+++ b/assets/styles/code-syntax.css
@@ -24,6 +24,7 @@ div.code-toolbar > .toolbar {
.code-toolbar {
box-shadow: 0 0 0 1px rgba(0, 0, 0, .15);
+ color: black;
}
.toolbar-item {
diff --git a/styles/credits.css b/assets/styles/credits.css
similarity index 100%
rename from styles/credits.css
rename to assets/styles/credits.css
diff --git a/styles/cse-search.css b/assets/styles/cse-search.css
similarity index 100%
rename from styles/cse-search.css
rename to assets/styles/cse-search.css
diff --git a/styles/home.css b/assets/styles/home.css
similarity index 100%
rename from styles/home.css
rename to assets/styles/home.css
diff --git a/styles/i-love-markdown.css b/assets/styles/i-love-markdown.css
similarity index 100%
rename from styles/i-love-markdown.css
rename to assets/styles/i-love-markdown.css
diff --git a/styles/index.php b/assets/styles/index.php
similarity index 100%
rename from styles/index.php
rename to assets/styles/index.php
diff --git a/assets/styles/landing.css b/assets/styles/landing.css
new file mode 100644
index 0000000000..241f8467c5
--- /dev/null
+++ b/assets/styles/landing.css
@@ -0,0 +1,326 @@
+
+/*
+ * HEADER
+ * Contains the giant PHP and our 3x lead elements
+ */
+.landing-hdr {
+ margin-bottom: 3em;
+}
+
+@media (min-width: 901px) {
+ .landing-hdr {
+ display: grid;
+ grid-template-columns: 2fr 1fr;
+ gap: 1.5em;
+ }
+}
+
+@media (max-width: 900px) {
+ .landing-hdr {
+ display: flex;
+ flex-direction: column;
+ gap: 1em;
+ }
+}
+
+.landing-hdr-block {
+ padding: 1em;
+}
+
+.landing-hdr-block + .landing-hdr-block {
+ border-top: 1px dashed #4a5568;
+}
+
+.landing-hdr-title {
+ font-size: larger;
+ margin-bottom: 0.25em;
+}
+
+.landing-hdr-tagline {
+ margin-bottom: 0;
+ font-size: 24px;
+}
+
+.landing-hdr-content {
+
+}
+
+/*
+ * LAST RELEASE HERO CARD
+ */
+
+.landing-lrel-card {
+ display: flex;
+ flex-direction: column;
+ box-sizing: border-box;
+}
+
+.landing-lrel-card-inner {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ overflow: hidden;
+ gap: 1em;
+ padding: 1em;
+}
+
+.landing-lrel-img {
+ width: 100%;
+ height: 60px;
+ object-fit: contain;
+ object-position: center center;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.gst-light .landing-lrel-img {
+ background: #aaaaaa;
+ padding: 1em;
+ border-radius: var(--card-radius);
+ box-sizing: border-box;
+}
+
+@media (max-width: 400px) {
+ .landing-lrel-img {
+ height: 40px;
+ margin-top: 0.25em;
+ margin-bottom: 0.25em;
+ }
+}
+
+.landing-lrel-featuring {
+ font-weight: bold;
+ margin-bottom: 0.25em;
+}
+
+.landing-lrel-latest {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5em;
+ text-align: center;
+}
+
+.landing-lrel-features {
+ margin-bottom: 0;
+}
+
+.landing-lrel-label {
+ display: inline-flex;
+ padding: 0.25em 0.75em;
+ border-radius: 0.5em;
+ font-size: 90%;
+}
+
+.landing-lrel-buttons {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25em;
+ width: 100%;
+}
+
+
+/*
+ * LAST RELEASE HERO CARD
+ */
+
+.landing-lrv {
+ overflow: hidden;
+ position: relative;
+ background: #4F5B93;
+ border-radius: var(--card-radius);
+ margin: 0 auto 2em;
+ width: min(1440px, 100%);
+ border: 1px solid #555555;
+}
+
+.landing-lrv-animate {
+ position: absolute;
+ inset: 0;
+ opacity: 0.5;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .landing-lrv-animate {
+ display: none;
+ }
+}
+
+.landing-lrv-inner-padding {
+ position: relative;
+}
+
+@media (max-width: 900px) {
+ .landing-lrv-inner-padding {
+ padding: 1em;
+ }
+
+ .landing-lrv-inner {
+ display: flex;
+ flex-direction: column;
+ gap: 2em;
+ }
+}
+
+@media (min-width: 901px) {
+ .landing-lrv-inner-padding {
+ padding: 2em;
+ }
+
+ .landing-lrv-inner {
+ display: grid;
+ gap: 2em;
+ align-items: center;
+ grid-template-columns: 1fr 1fr;
+ }
+}
+
+.landing-lrv-highlights {
+ display: grid;
+ gap: 1em;
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
+}
+
+.landing-lrv-highlight {
+ background: #44444477;
+ color: white;
+ border-radius: 0.5em;
+ padding: 1em;
+ font-size: smaller;
+}
+
+.landing-lrv-highlight-title {
+ font-weight: 500;
+}
+
+/*
+ * ECOSYSTEM BANNER
+ * Full-width banner intended to promote ecosystem components as a single element
+ */
+
+.gst-primary-banner {
+ display: flex;
+ flex-direction: row;
+ gap: 2em;
+ align-items: center;
+ padding: 0 5em;
+ color: var(--primary-container-color);
+}
+
+@media (max-width: 700px) {
+ .gst-primary-banner {
+ flex-direction: column;
+ padding: 0;
+ gap: 1em;
+ text-align: center;
+ }
+}
+
+.gst-primary-text {
+ font-size: 24px;
+ line-height: 1.3;
+}
+
+/*
+ * SECTIONS
+ */
+
+
+.landing-section-header {
+ font-size: 18px;
+ text-align: center;
+ text-decoration: none !important;
+ margin: 0;
+ padding: 0;
+ color: var(--section-title);
+ line-height: 1.3;
+ font-weight: 500;
+}
+
+
+/*
+ * MICRO LABEL
+ * Key-Value label intended to be used for versions
+ */
+
+.landing-ml {
+ font-size: smaller;
+ border-radius: 0.75em;
+ border: 1px solid #77777755;
+ overflow: hidden;
+ display: inline-flex;
+ align-items: center;
+}
+
+.landing-ml-label {
+ padding: 0.15em 0.5em;
+ background: #00000044;
+ border-right: 1px solid #777777;
+}
+
+.landing-ml-value {
+ padding: 0.15em 0.5em;
+}
+
+/*
+ * CARD BUTTON
+ */
+
+.landing-card-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ box-sizing: border-box;
+
+ /* "Chunk" styling: chunky padding and thick borders */
+ padding: 14px 32px;
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+ font-size: 1.1rem;
+ font-weight: 700;
+ text-decoration: none;
+ text-align: center;
+ letter-spacing: 0.5px;
+ cursor: pointer;
+
+ /* Colors & Border */
+ color: #111111 !important;
+ background-color: #ffffff;
+ border: 2px solid #111111;
+ border-radius: 0.5em;
+
+ /* Smooth transitions for hover/active states */
+ transition: all 0.2s ease-in-out;
+}
+
+@media (max-width: 600px) {
+ .landing-card-btn {
+ padding: 4px 16px !important;
+ }
+}
+
+/* Hover state */
+.landing-card-ovh:hover .landing-card-btn,
+.landing-card-ovh:active .landing-card-btn,
+.landing-card-btn:hover {
+ color: #ffffff !important;
+ background-color: #222222;
+ /* Shifts the button slightly and expands shadow for a "lifting" effect */
+ transform: translate(-2px, -2px);
+ box-shadow: 6px 6px 0px 0px #000000;
+ border-color: transparent;
+}
+
+/* Focus state for accessibility */
+.landing-card-btn:focus-visible {
+ outline: 4px solid #818cf8;
+}
+
+#foundation-sponsor-carousel {
+ mask-image: linear-gradient(
+ to right,
+ transparent 0%,
+ black 10%,
+ black 90%,
+ transparent 100%
+ );
+}
diff --git a/styles/mirror.css b/assets/styles/mirror.css
similarity index 100%
rename from styles/mirror.css
rename to assets/styles/mirror.css
diff --git a/styles/php85.css b/assets/styles/php85.css
similarity index 100%
rename from styles/php85.css
rename to assets/styles/php85.css
diff --git a/styles/print.css b/assets/styles/print.css
similarity index 100%
rename from styles/print.css
rename to assets/styles/print.css
diff --git a/styles/prism.css b/assets/styles/prism.css
similarity index 100%
rename from styles/prism.css
rename to assets/styles/prism.css
diff --git a/styles/releases.css b/assets/styles/releases.css
similarity index 100%
rename from styles/releases.css
rename to assets/styles/releases.css
diff --git a/styles/rtl.css b/assets/styles/rtl.css
similarity index 100%
rename from styles/rtl.css
rename to assets/styles/rtl.css
diff --git a/styles/supported-versions.css b/assets/styles/supported-versions.css
similarity index 100%
rename from styles/supported-versions.css
rename to assets/styles/supported-versions.css
diff --git a/styles/theme-base.css b/assets/styles/theme-base.css
similarity index 99%
rename from styles/theme-base.css
rename to assets/styles/theme-base.css
index faeab9d6b4..cd08d6d7f2 100644
--- a/styles/theme-base.css
+++ b/assets/styles/theme-base.css
@@ -68,10 +68,10 @@ html {
-ms-text-size-adjust: 100%;
scroll-behavior: smooth;
}
-a {
+a:not(.plaina) {
border-bottom:1px solid;
}
-a:focus {
+a:not(.plaina):focus {
outline: thin dotted var(--dark-grey-color);
outline-offset: -2px;
}
@@ -538,6 +538,7 @@ div.classsynopsisinfo_comment {
pre.info {
border: 1px solid;
margin: 1rem 0.8rem 1.3rem 2rem;
+ color: black;
}
#langform {
diff --git a/assets/styles/theme-gst.css b/assets/styles/theme-gst.css
new file mode 100644
index 0000000000..74f57af043
--- /dev/null
+++ b/assets/styles/theme-gst.css
@@ -0,0 +1,460 @@
+:root {
+ --card-radius: 0.5em;
+}
+
+.gst-dark {
+ background-image: url(/images/bg-texture-00.svg);
+
+ /* dedicated block style for header */
+ --main-header-bg: #202020;
+ --main-header-color: #eeeeee;
+ --main-header-border: #333333;
+
+ /* spec: main content area, solid background */
+ --primary-container-bg: #252525;
+ --primary-container-color: whitesmoke;
+ --primary-container-border: #333333;
+ --primary-card-bg: #303030;
+ --primary-card-color: whitesmoke;
+ --primary-card-border: #222222;
+
+ /* spec: secondary content area, allows background to show through, not for main text */
+ --secondary-container-bg: transparent;
+ --secondary-container-color: whitesmoke;
+ --secondary-card-bg: #444444;
+ --secondary-card-color: whitesmoke;
+ --secondary-card-border: #222222;
+
+ --section-title: whitesmoke;
+ --leader-color: whitesmoke;
+}
+
+.gst-light {
+ background-color: #fafafa;
+ background-image: url(/images/bg-texture-light.png);
+ background-repeat: repeat;
+
+ /* dedicated block style for header */
+ --main-header-bg: #202020;
+ --main-header-color: #eeeeee;
+ --main-header-border: #cccccc;
+
+ /* spec: main content area, solid background */
+ --primary-container-bg: #ffffff;
+ --primary-container-color: #333333;
+ --primary-container-border: #eeeeee;
+ --primary-card-bg: #fcfcfc;
+ --primary-card-color: #222222;
+ --primary-card-border: #f7f7f7;
+
+ /* spec: secondary content area, allows background to show through, not for main text */
+ --secondary-card-bg: #ffffff;
+ --secondary-card-color: #222222;
+ --secondary-card-border: #eeeeee;
+
+ --section-title: #222222;
+ --leader-color: #222222;
+}
+
+/*
+ * Global Theming
+ */
+
+.gst-header-block {
+ background: var(--main-header-bg) !important;
+ color: var(--main-header-color) !important;
+ border-bottom: 1px solid var(--main-header-border);
+}
+
+.gst-footer-block {
+ background: var(--main-header-bg) !important;
+ color: var(--main-header-color) !important;
+ border-top: 1px solid var(--main-header-border);
+}
+
+.gst-primary {
+ --card-bg: var(--primary-card-bg);
+ --card-color: var(--primary-card-color);
+ --card-border: var(--primary-card-border);
+}
+
+.gst-primary-container {
+ position: relative;
+ background: var(--primary-container-bg);
+ /*border-top: 1px solid var(--primary-container-border);*/
+ /*border-bottom: 1px solid var(--primary-container-border);*/
+ color: var(--primary-container-color);
+
+ & h1, h2, h3, h4, h5, h6 {
+ color: var(--primary-container-color);
+ border-bottom: none;
+ }
+}
+
+.gst-secondary {
+ --card-bg: var(--secondary-card-bg);
+ --card-color: var(--secondary-card-color);
+ --card-border: var(--secondary-card-border);
+}
+
+.gst-secondary-container {
+ position: relative;
+ background-color: var(--secondary-container-bg);
+ color: var(--secondary-container-color);
+
+ background-image: url(/images/bg-texture-dark.png);
+}
+
+.gst-content, .gst-content-p {
+ width: min(1220px, 100%);
+ margin: 0 auto;
+ box-sizing: border-box;
+}
+
+.gst-content-wide, .gst-content-p-wide {
+ width: min(1440px, 100%);
+ margin: 0 auto;
+ box-sizing: border-box;
+}
+
+.gst-content-p-thin {
+ width: min(800px, 100%);
+ margin: 0 auto;
+ box-sizing: border-box;
+}
+
+.gst-content-p-wide h1, .gst-content-p-wide h2, .gst-content-p-wide h3 {
+ color: var(--card-color);
+}
+
+.gst-content-p-wide, .gst-content-p, .gst-content-p-thin {
+ padding: 5em 1em;
+}
+
+.gst-readable {
+ width: min(800px, 100%);
+ margin-left: auto;
+ margin-right: auto;
+ line-height: 1.5;
+}
+
+.gst-sbc {
+ display: flex;
+ flex-direction: row;
+ gap: 2em;
+}
+
+.gst-sbc-main {
+ flex: 1 0 300px;
+}
+
+.gst-sbc-sidebar {
+ flex: 0 0 320px;
+}
+
+@media (max-width: 600px) {
+ .gst-content-p-wide {
+ padding: 1em 1em;
+ }
+}
+
+/*
+ * Section Titles
+ */
+
+.gst-section-title {
+ padding-top: 5em;
+ padding-bottom: 3em;
+ text-align: center;
+}
+
+.gst-section-title:first-child {
+ padding-top: 0;
+}
+
+.gst-content-p-wide .gst-section-title:first-child {
+ padding-top: 0;
+}
+
+/*
+ * Sidebar
+ */
+
+/* maintain compatibility with previous versions by only knocking out padding if we have a card in it */
+aside.tips:has(.gst-card) {
+ padding: 0 !important;
+}
+
+/*
+ * Clickable Navigation Card
+ */
+
+.gst-navcard {
+ all: unset;
+ border-radius: var(--card-radius);
+ display: flex;
+ flex-direction: row;
+ flex-grow: 1;
+ gap: 0.25em;
+ overflow: hidden;
+ cursor: pointer;
+ background: var(--card-bg);
+ color: var(--card-color) !important;
+ outline: 3px transparent;
+ transition: all 0.2s ease-in-out;
+ border: 1px solid var(--card-border);
+}
+
+.gst-navcard:hover {
+ outline: 3px solid #53576d;
+ overflow: hidden;;
+ transition: all 0.2s ease-in-out;
+ background: color-mix(in srgb, var(--card-bg), #000 15%);
+}
+
+.gst-navcard:focus {
+ outline: 3px solid #eeeeee;
+}
+
+/*
+ * Basic Card
+ */
+
+.gst-card {
+ border-radius: var(--card-radius);
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ overflow: hidden;
+ background: var(--card-bg);
+ color: var(--card-color);
+ border: 1px solid var(--card-border);
+}
+
+.gst-card-title {
+ padding: 1.5em;
+ font-weight: bold;
+}
+
+.gst-card-content {
+ padding: 1.5em;
+}
+
+/*
+ * CGRID
+ *
+ * Displays in an auto-repeating grid, however, when the space is too small, it significantly collapses
+ * the gap and changes the separation from such large padding, into a vertical list
+ */
+
+.gst-cgrid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(min(340px, 100%), 1fr));
+ gap: 1.5em;
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+
+.gst-cgrid-card {
+ border-radius: var(--card-radius);
+ overflow: hidden;
+}
+
+@media (max-width: 700px) {
+ .gst-cgrid {
+ gap: 0;
+ overflow: hidden;
+ border-radius: var(--card-radius);
+ animation: ease;
+ }
+
+ .gst-cgrid-card {
+ border-radius: 0 !important;
+ overflow: hidden;
+ }
+
+ .gst-cgrid-card + .gst-cgrid-card {
+ margin-top: 3px;
+ }
+}
+
+/*
+ * Micro Label
+ */
+
+/*
+ * MICRO LABEL
+ * Key-Value label intended to be used for versions
+ */
+
+.gst-statuslabel {
+ font-size: smaller;
+ border-radius: 0.75em;
+ border: 1px solid #77777755;
+ overflow: hidden;
+ display: inline-flex;
+ align-items: center;
+}
+
+.gst-statuslabel-label {
+ padding: 0.15em 0.5em;
+ background: #00000044;
+ border-right: 1px solid #777777;
+}
+
+.gst-statuslabel-value {
+ padding: 0.15em 0.5em;
+}
+
+/*
+ * Banners
+ */
+
+
+.gst-warning {
+ border-radius: var(--card-border);
+ padding: 1em;
+ background: #5d3b3b;
+ border: 1px solid #442c2c;
+ color: white;
+}
+
+.gst-tip {
+ border-radius: var(--card-border);
+ padding: 1em;
+ background: #5c5d3b;
+ border: 1px solid #44442c;
+ color: white;
+}
+
+/**
+ * Clickable cards - need to rename
+ */
+
+
+/*
+ * CARD LAYOUT
+ */
+
+.landing-cc-card-img {
+ height: 80px;
+ width: 80px;
+ object-fit: contain;
+ overflow: hidden;
+}
+
+.landing-cc-card-content {
+ padding: 1.5em;
+ flex: 1 1;
+ display: flex;
+ flex-direction: column;
+ gap: 1em;
+}
+
+.landing-cc-card-title {
+ font-size: 125%;
+ font-weight: 500;
+}
+
+.landing-cc-card-body {
+ flex: 1 1;
+}
+
+/*
+ New Top Navigation
+ */
+
+:root {
+ --gst-nav-dark: #4F5B93;
+ --gst-nav-purple: #2a324e;
+ --gst-nav-text-light: #F2F2F2;
+ --gst-nav-bg-dropdown: #4e4c4c;
+ --gst-nav-dropdown-text: #d8d8d8;
+ --gst-nav-dropdown-hover: #F5F5F5;
+}
+
+/* Main Navigation List */
+.gst-tnav-menu {
+ display: flex;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ background-color: var(--gst-nav-dark);
+ font-family: sans-serif;
+}
+
+/* Individual List Items */
+.gst-tnav-item {
+ position: relative; /* Anchor for the absolute dropdown */
+ margin: 0;
+}
+
+/* Top-level Links & Triggers */
+.gst-tnav-link,
+.gst-tnav-drop-trigger {
+ color: var(--gst-nav-text-light);
+ display: flex;
+ align-items: center;
+ padding: 20px 15px;
+ text-decoration: none;
+ transition: background-color 0.2s ease;
+ margin: 0 !important;
+}
+
+.gst-tnav-link:hover,
+.gst-tnav-link:focus,
+.gst-tnav-drop-trigger:hover,
+.gst-tnav-drop-trigger:focus,
+.gst-tnav-drop-trigger[aria-expanded="true"] {
+ background-color: var(--gst-nav-purple);
+}
+
+/* Optional Icon Styling */
+.gst-tnav-icon {
+ width: 16px;
+ height: 16px;
+ margin-right: 8px;
+ display: inline-block;
+}
+
+/* Dropdown Menu Container */
+.gst-tnav-dropdown-menu {
+ display: none;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ background-color: var(--gst-nav-bg-dropdown);
+ min-width: 220px;
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ border-radius: 0 0 4px 4px;
+ z-index: 1000;
+}
+
+/* Dropdown Links */
+.gst-tnav-dropdown-link {
+ color: var(--gst-nav-dropdown-text);
+ padding: 10px 20px;
+ display: flex;
+ align-items: center;
+ text-decoration: none;
+ font-size: 14px;
+ border-bottom: 0 !important;
+}
+
+.gst-tnav-dropdown-link:hover,
+.gst-tnav-dropdown-link:focus {
+ background-color: var(--gst-nav-dropdown-hover);
+ color: var(--gst-nav-purple);
+}
+
+/* Visibility Triggers (Hover, Focus, and ARIA State) */
+.gst-tnav-dropdown:hover .gst-tnav-dropdown-menu,
+.gst-tnav-dropdown:focus-within .gst-tnav-dropdown-menu,
+.gst-tnav-drop-trigger[aria-expanded="true"] + .gst-tnav-dropdown-menu {
+ display: block;
+ border-bottom: 0 !important;
+}
diff --git a/styles/theme-medium.css b/assets/styles/theme-medium.css
similarity index 99%
rename from styles/theme-medium.css
rename to assets/styles/theme-medium.css
index c086e06c1f..d2f28b5627 100644
--- a/styles/theme-medium.css
+++ b/assets/styles/theme-medium.css
@@ -48,10 +48,10 @@ a:visited {
#layout-content a:visited {
color: #369;
}
-a:hover,
-a:focus,
+a:not(.plaina):hover,
+a:not(.plaina):focus,
#layout-content a:hover,
-#layout-content a:focus {
+#layout-content a:not(.plaina):focus {
color: var(--medium-magenta-color);
border-color: var(--medium-magenta-color);
outline:0;
@@ -153,6 +153,7 @@ div.caution {
div.warning {
background:#F4DFDF;
border-color: #EABFBF;
+ color: black;
}
.docs .classsynopsis,
diff --git a/bin/build.php b/bin/build.php
new file mode 100644
index 0000000000..098bf1fc73
--- /dev/null
+++ b/bin/build.php
@@ -0,0 +1,43 @@
+getMessage());
+ exit(1);
+ } catch (Throwable $e) {
+ fwrite(STDERR, 'Unhandled exception building ' . $classId . ': ' . $e->getMessage() . "\n");
+ fwrite(STDERR, $e->getTraceAsString() . "\n");
+ die($e);
+ exit(1);
+ }
+}
diff --git a/bin/bumpRelease b/bin/bumpRelease
deleted file mode 100755
index f03c2c6da9..0000000000
--- a/bin/bumpRelease
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env php
- "/releases/" . str_replace(".", "_", $version) . ".php");
-}
-
-$OLDRELEASES[$major] = array_merge(
- array($version => $info),
- $OLDRELEASES[$major] ?? []
-);
-
-file_put_contents(__DIR__ . "/../include/releases.inc", [
- "setSummary($summary);
+ }
+
return $entry;
}
diff --git a/bin/createReleaseEntry b/bin/createReleaseEntry
index a9dcf1e658..592db95641 100755
--- a/bin/createReleaseEntry
+++ b/bin/createReleaseEntry
@@ -50,24 +50,6 @@ $entry = (new Entry)
$entry->save()->updateArchiveXML();
$addedFiles = [Entry::ARCHIVE_ENTRIES_REL . $entry->getId() . '.xml'];
-// Mint the releases/x_y_z.php archive.
-const RELEASES_REL = 'releases/';
-const RELEASES_ABS = __DIR__ . '/../' . RELEASES_REL;
-if (isset($opts['r'])) {
- $release = strtr($version, '.', '_') . '.php';
- file_put_contents(RELEASES_ABS . $release, "
-
PHP $version Release Announcement
-
-$template
- $releases) {
+ /*
+ * Look for the most recent version as it's the one most likely to have the fullest
+ * set of data within it
+ */
+
+ $highestVersion = null;
+ foreach (array_keys($releases) as $releaseId) {
+ [$major, $minor] = explode('.', $releaseId);
+
+ $br = $major . '.' . $minor;
+ $highestVersion = (!$highestVersion || Utils::versionCompareOp($releaseId, $highestVersion, 'gt'))
+ ? $releaseId
+ : $highestVersion;
+ }
+
+ if (!$highestVersion) {
+ printf("Warning! There is no highest release of " . $versionId . " available; skipping\n");
+ continue;
+ }
+
+ $cachePath = sys_get_temp_dir() . '/php-news-' . $highestVersion . '.txt';
+ if (!file_exists($cachePath)) {
+ /* the file could be in one of a number of locations depending on how it was committed */
+ $options = [
+ /* normal branch */
+ 'https://raw.githubusercontent.com/php/php-src/refs/heads/PHP-' . $highestVersion . '/NEWS',
+
+ /* tag */
+ 'https://raw.githubusercontent.com/php/php-src/refs/tags/php-' . $highestVersion . '/NEWS',
+ ];
+
+ foreach ($options as $fetchUrl) {
+ $content = @file_get_contents($fetchUrl);
+ if (!$content) {
+ fwrite(STDERR, "Could not read raw data for $fetchUrl\n");
+ continue;
+ }
+
+ fwrite(STDOUT, "Successfully imported read data from $fetchUrl\n");
+ FS::writeContents($cachePath, $content);
+ }
+
+ if (!$content) {
+ fwrite(STDERR, "Could not find a suitable data source for $highestVersion\n");
+ continue;
+ }
+ } else {
+ $content = FS::readContents($cachePath);
+ }
+
+ /*
+ * We should now, theoretically, have a complete news file that has the highest release and
+ * everything before it.
+ *
+ * Some of them have a ton of data before, some get reset at the start of each major.minor version
+ */
+ foreach (ChangeLogDataLoader::parseNewsFileToReleaseSections($content) as $releaseId => $data) {
+ /* only write the sections that belong to us */
+ if (!str_starts_with($releaseId, $versionId . '.')) {
+ continue;
+ }
+
+ /* special case for 5.1.0 which doesn't have the release in the original NEWS */
+ if ($releaseId === '5.1') {
+ $releaseId = '5.1.0';
+ }
+
+ $path = ProjectGlobals::getDataPathForRelease($releaseId, create: true) . '/changes.txt';
+ if (FS::writeContentsIfChanged($path, $data)) {
+ printf("Writing NEWS block to %s %s\n", $path, md5($data));
+ }
+ }
+}
diff --git a/bin/migrations/migrate-releases.php b/bin/migrations/migrate-releases.php
new file mode 100644
index 0000000000..e7fea7d798
--- /dev/null
+++ b/bin/migrations/migrate-releases.php
@@ -0,0 +1,66 @@
+ $releases) {
+ foreach ($releases as $releaseId => $release) {
+ if (str_starts_with($releaseId, '3.0.')) {
+ continue; // can't be dealing with this
+ }
+
+ [$major, $minor] = explode('.', $releaseId);
+ $versionId = $major . '.' . $minor;
+
+ $savePath = ProjectGlobals::getDataPathForRelease($releaseId) . '/release.json';
+
+ unset($release['announcement']);
+
+ if (isset($release['museum']) && !$release['museum']) {
+ unset($release['museum']);
+ }
+
+ $sources = [];
+ foreach ($release['source'] as $source) {
+ unset($source['date']);
+ $sources[] = $source;
+ }
+
+ $data = [
+ 'version' => $releaseId,
+ 'date' => $release['date'],
+ 'tags' => $release['tags'] ?? [],
+ 'source' => $sources,
+ ];
+
+ /* do not overwrite unless explicitly told to (early stage dev needing format refreshes) */
+ if (!$force && file_exists($savePath)) {
+ continue;
+ }
+
+ if (FS::writeContentsIfChanged($savePath, json_encode($data, JSON_PRETTY_PRINT))) {
+ printf("Writing data to %s\n", $savePath);
+ }
+ }
+ }
+}
+
+printf("Completed import of all release.json files\n");
diff --git a/bin/move-release-announcements.php b/bin/move-release-announcements.php
new file mode 100644
index 0000000000..5ad9b38350
--- /dev/null
+++ b/bin/move-release-announcements.php
@@ -0,0 +1,68 @@
+';
+ $htmlStartPosition = strpos($content, $htmlStartToken);
+ if ($htmlStartPosition === false) {
+ throw new RuntimeException('Unable to find PHP closing tag in ' . $fullPath);
+ }
+
+ $htmlStartPosition+= strlen($htmlStartToken);
+
+ $htmlEndToken = '
-
- Improving PHP requires a working build environment to test changes, the following section deals with setting up a working build environment.
-
-
- Your build environment should have an appropriate toolchain that includes a working C compiler.
- For those not working in Microsoft Windows, you will need a working, compatible autotools installation, and at the very least a shared copy of zlib.
-
-
- For most *nix like operating systems, some external dependencies may be required to bring a build to completion;
- if a build fails because of missing headers or libraries, issuing a variant of the following command should resolve those dependencies, allowing the build to continue.
-
-
-
[sudo] yum|apt|port install package[-dev[el]]
-
-
- For those working in Ubuntu Linux, you can run the following command to automate the installation of dependencies.
-
-
-
sudo apt build-dep php
-
-
- If the compilation of an extension fails because of missing dependencies, Ubuntu Linux can attempt to automate the resolution of those dependencies by issuing:
-
-
-
sudo apt build-dep php-<extname>
-
-
- The following table shows what is required for Microsoft Windows users to build supported PHP versions:
-
Note: If a Windows SDK is required, it is advised to install the SDK before Visual Studio.
-
-
-
Workspace Preparation
-
-
- Windows users should now download and unzip the PHP SDK to their workspace and execute the following commands in an appropriate Visual Studio 2019/2022 Developer Command Prompt:
-
-
- Visual Studio 2019 and 2022:
-
-
-
cd C:\path-to-workspace
-bin\phpsdk_setvars.bat
-bin\phpsdk_buildtree.bat phpdev
-
-
- Windows should now change to the directory C:\path-to-workspace\phpdev\VSXX\XARCH, and consider it the root of the workspace for the current build.
-
-
- The next step for everyone is to obtain the versioned PHP sources via git:
-
- BRANCH should be replaced with an appropriate branch name, for example, PHP-8.5.
-
-
- At this point you have a working build environment and the vanilla sources for your chosen branch of PHP, it is a good idea, before you change anything at all, to create a new branch and switch to it, in preparation for your awesome changes to come.
-
-
-
git checkout -b my-awesome-changes
-
-
-
-
-
Building Your Development PHP
-
-
- All operating systems now converge on (near as makes no difference) the same solutions for the rest of the build process:
-
-
-
buildconf: generates the configure script for PHP
-
configure: configures the build of PHP and creates Makefile
-
make: builds PHP
-
make test: runs testsuite
-
make install: installs PHP
-
-
- For Microsoft Windows operating systems, those commands look like this:
-
-
-
buildconf
-configure --with-prefix=C:\my-awesome-php
-nmake
-nmake test
-nmake install
-
-
- While for the rest of us, those commands look like this:
-
-
-
./buildconf
-./configure --prefix=/opt/my-awesome-php
-make
-make test
-make install
-
-
- The configure script can customize almost every aspect of PHP, to elicit help at the console pass --help
- as the only argument to configure
-
- When configure executes, it saves the options passed in to a re-usable config.nice which executes configure when invoked.
-
-
- Upon successful completion of a build, it is recommended to run the test suite; this will help you to identify regression problems in your work,
- running the test suite can take a while; go out for a run, or a burger.
-
-
- It is also possible to run a set (directory) of tests in the following way:
-
- Please note that the following are NOT security issues:
-
-
Requests for help with using PHP. Please use the
- PHP General mailing list.
-
Source code to the PHP website(s) being publicly readable.
- This is on purpose.
- All of the php.net websites are available publicly on github.
- For example, you can find this site at github.com/php/web-php.
-
Requests for bug bounty payments.
- PHP is run by volunteers with literally zero budget.
- The servers are donated hardware and bandwidth.
- Your bug reports and patches are appreciated, but we can not pay you for them.
-
-
-
- If you have problems setting up PHP or using some functionality,
- or especially a program written in PHP, please ask your question on a
- support channel, since the webmasters will
- not answer any such questions.
-
-
- If you would like to contact the webmasters for some other reason, please
- write to php-webmaster@lists.php.net.
- Note that this address is mapped to a mailing list and a newsgroup, so
- every message you send will be stored in public archives at multiple
- servers.
-
- Except as otherwise indicated elsewhere on this Site, you are free
- to view, download and print the documents and information available
- on this Site subject to the following conditions:
-
-
-
-
- You may not remove any copyright or other proprietary notices
- contained in the documents and information on this Site.
-
-
- The rights granted to you constitute a license and not a transfer
- of title.
-
-
- The rights specified above to view, download and print the
- documents and information available on this Site are not applicable
- to the graphical elements, design or layout of this Site. These
- elements of the Site are protected by trade dress and other laws
- and may not be copied or imitated in whole or in part.
-
-
-
-
- For more information on the PHP Group and the PHP project, please see
- the PHP homepage.
-