mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
171 lines
7.4 KiB
Text
171 lines
7.4 KiB
Text
PHP 8.5 INTERNALS UPGRADE NOTES
|
|
|
|
1. Internal API changes
|
|
|
|
2. Build system changes
|
|
|
|
3. Module changes
|
|
|
|
4. OpCode changes
|
|
|
|
5. SAPI changes
|
|
|
|
========================
|
|
1. Internal API changes
|
|
========================
|
|
|
|
- Core
|
|
. PG(arg_separator).input and PG(arg_separator).output are now `zend_string*`
|
|
instead of `char*`.
|
|
. DL_LOAD now doesn't use RTLD_DEEPBIND deepbind anymore on platforms
|
|
where dlmopen with LM_ID_NEWLM is available:
|
|
this means shared library symbol isolation (if needed) must be enabled on
|
|
the user side when requiring libphp.so, by using dlmopen with LM_ID_NEWLM
|
|
instead of dlopen.
|
|
RTLD_DEEPBIND is still enabled when the Apache SAPI is in use.
|
|
. The ptr field of the php_stream_notifier struct is now a void* instead
|
|
of a zval. If the zval was used to store IS_PTR values only, the
|
|
extra layer of indirection can be removed. In other cases a zval can
|
|
be heap-allocated and stored in the pointer as a minimal change to keep
|
|
compatibility.
|
|
|
|
- Hash
|
|
. Hash functions now use proper hash_spec_result enum for return values
|
|
instead of using SUCCESS and FAILURE.
|
|
|
|
- Zend
|
|
. Added zend_safe_assign_to_variable_noref() function to safely assign
|
|
a value to a non-reference zval.
|
|
. Added zval_ptr_safe_dtor() to safely destroy a zval when a destructor
|
|
could interfere.
|
|
. zend_get_callable_name() now returns the name of the underlying function
|
|
for fake closures.
|
|
. Added smart_string_append_printf() matching smart_str_append_printf() for
|
|
char* instead of zend_string*-based smart strings.
|
|
. Added php_build_provider() to retrieve the value of PHP_BUILD_PROVIDER at
|
|
runtime.
|
|
. Removed the cache_slot argument of zend_check_user_type_slow() because
|
|
now it only relies on the CE cache.
|
|
. Added ZEND_NONSTRING attribute macro for character arrays that do not
|
|
represent strings. This allows to silence the GCC 15.x
|
|
`-Wunterminated-string-initialization` warning.
|
|
. Added the zend_update_exception_properties() function for instantiating
|
|
Exception child classes. It updates the $message, $code, and $previous
|
|
properties.
|
|
. zend_exception_get_default() was removed, use zend_ce_exception directly.
|
|
. zend_get_error_exception() was removed, use zend_ce_error_exception
|
|
directly.
|
|
. ZEND_IS_XDIGIT() macro was removed because it was unused and its name
|
|
did not match its actual behavior.
|
|
. The following zend_string-related legacy aliases were removed:
|
|
* IS_INTERNED() - use ZSTR_IS_INTERNED()
|
|
* STR_EMPTY_ALLOC() - use ZSTR_EMPTY_ALLOC()
|
|
* _STR_HEADER_SIZE - use _ZSTR_HEADER_SIZE
|
|
* STR_ALLOCA_ALLOC() - use ZSTR_ALLOCA_ALLOC()
|
|
* STR_ALLOCA_INIT() - use ZSTR_ALLOCA_INIT()
|
|
* STR_ALLOCA_FREE() - use ZSTR_ALLOCA_FREE()
|
|
. zend_register_constant() now returns a pointer to the added constant
|
|
on success and NULL on failure instead of SUCCESS/FAILURE.
|
|
The specialized registration methods that previously had void returns
|
|
also return pointers to the added constants:
|
|
* zend_register_bool_constant()
|
|
* zend_register_null_constant()
|
|
* zend_register_long_constant()
|
|
* zend_register_double_constant()
|
|
* zend_register_string_constant()
|
|
* zend_register_stringl_constant()
|
|
. EG(fake_scope) now is a _const_ zend_class_entry*.
|
|
. zend_begin_record_errors() or EG(record_errors)=true cause errors to be
|
|
delayed. Before, errors would be recorded but not delayed.
|
|
. zend_mm_refresh_key_child() must be called on any zend_mm_heap inherited
|
|
from the parent process after a fork().
|
|
. HASH_KEY_IS_* constants have been moved in the zend_hash_key_type enum.
|
|
|
|
- standard
|
|
. ext/standard/php_smart_string.h and ext/standard/php_smart_string_public.h
|
|
were removed. Use the corresponding headers in Zend/ instead.
|
|
|
|
========================
|
|
2. Build system changes
|
|
========================
|
|
|
|
- Abstract
|
|
. Preprocessor macro SIZEOF_PTRDIFF_T has been removed.
|
|
. Preprocessor macro SIZEOF_INTMAX_T has been removed.
|
|
|
|
- Windows build system changes
|
|
. SAPI() and ADD_SOURCES() now support the optional `duplicate_sources`
|
|
parameter. If truthy, no rules to build the object files are generated.
|
|
This allows to build additional variants of SAPIs (e.g. a DLL and EXE)
|
|
without duplicate build rules. It is up to the SAPI maintainers to ensure
|
|
that appropriate build rules are created.
|
|
|
|
- Unix build system changes
|
|
. libdir is properly set when --libdir (ex: /usr/lib64) and --with-libdir (ex: lib64)
|
|
configure options are used to ${libdir}/php (ex: /usr/lib64/php)
|
|
. PHP_ODBC_CFLAGS, PHP_ODBC_LFLAGS, PHP_ODBC_LIBS, PHP_ODBC_TYPE preprocessor
|
|
macros defined by ext/odbc are now defined in php_config.h instead of the
|
|
build-defs.h header.
|
|
. Autoconf macro AX_CHECK_COMPILE_FLAG updated to serial 11.
|
|
. Autoconf macro PHP_AP_EXTRACT_VERSION has been removed.
|
|
. Autoconf macro PHP_BUILD_THREAD_SAFE has been removed (set enable_zts
|
|
manually).
|
|
. Autoconf macro PHP_CHECK_SIZEOF is obsolete (use AC_CHECK_SIZEOF).
|
|
. Autoconf macro PHP_DEF_HAVE has been removed (use AC_DEFINE).
|
|
. Autoconf macro PHP_OUTPUT has been removed (use AC_CONFIG_FILES).
|
|
. Autoconf macro PHP_TEST_BUILD has been removed (use AC_* macros).
|
|
. Preprocessor macro HAVE_PTRDIFF_T has been removed.
|
|
. Preprocessor macro HAVE_INTMAX_T has been removed.
|
|
. Preprocessor macro HAVE_SSIZE_T has been removed.
|
|
. Preprocessor macro SIZEOF_SSIZE_T has been removed.
|
|
|
|
========================
|
|
3. Module changes
|
|
========================
|
|
|
|
- ext/gd
|
|
. The gdImageScale*() and gdImageRotate*() helpers are now internal in the
|
|
bundled libgd, like they have been in external libgd as of gd-2.1.1.
|
|
|
|
- ext/json
|
|
. php_json_encode_serializable_object() now assumes `EG(active)`,
|
|
if not a bailout is caused. Therefore a minor BC break exists if the
|
|
`PHP_JSON_PARTIAL_OUTPUT_ON_ERROR` option is in use.
|
|
However, this situation is highly unlikely.
|
|
|
|
- ext/libxml
|
|
. The refcount APIs now return an `unsigned int` instead of an `int`.
|
|
. Removed php_libxml_xmlCheckUTF8(). Use xmlCheckUTF8() from libxml instead.
|
|
|
|
- ext/pdo
|
|
. Added `php_pdo_stmt_valid_db_obj_handle()` to check if the database object
|
|
is still valid. This is useful when a GC cycle is collected and the
|
|
database object can be destroyed prior to destroying the statement.
|
|
|
|
- ext/standard
|
|
. Added php_url_decode_ex() and php_raw_url_decode_ex() that unlike their
|
|
non-ex counterparts do not work in-place.
|
|
. The php_std_date() function has been removed. Use php_format_date() with
|
|
the "D, d M Y H:i:s \\G\\M\\T" format instead.
|
|
. Added php_url_encode_to_smart_str() to encode a URL to a smart_str buffer.
|
|
. The functionality of getimagesize(), image_type_to_mime_type(),
|
|
and image_type_to_extension() is now extensible using the internal APIs
|
|
php_image_register_handler() and php_image_unregister_handler() in
|
|
php_image.h.
|
|
|
|
========================
|
|
4. OpCode changes
|
|
========================
|
|
|
|
* New ZEND_DECLARE_ATTRIBUTED_CONST is used when a global constant is declared
|
|
with `const` and has attributes; this opcode is used *instead* of the
|
|
ZEND_DECLARE_CONST, and in addition to the name of the constant and the
|
|
value to use, has a ZEND_OP_DATA with a pointer to the compiled attributes.
|
|
|
|
========================
|
|
5. SAPI changes
|
|
========================
|
|
|
|
- SAPIs must now call php_child_init() after a fork. If php-src code was
|
|
executed in other threads than the one initiating the fork,
|
|
refresh_memory_manager() must be called in every such thread.
|