This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.Други промени
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Други промени
Референца за `migration74.other-changes.php` со подобрена типографија и навигација.
Други промени
Подобрувања на перформансите
PHP јадро
Специјализирана VM инструкција за array_key_exists()
функцијата е додадена, што ги подобрува перформансите на оваа функција ако може статички да се реши. Во код со имиња, ова може да бара пишување \array_key_exists() или експлицитно увоз на функцијата.
Регуларни изрази (компатибилни со Perl)
Кога preg_match() во UTF-8 режим ("u" модификаторот) се повикува повеќе пати на истиот стринг (но можеби различни офсети), тој ќе биде проверен за UTF-8 валидност само еднаш.
Промени во ракувањето со INI датотеки
zend.exception_ignore_args е нова INI директива за вклучување или исклучување аргументи од стек траги генерирани од исклучоци.
opcache.preload_user е нова INI директива за специфицирање на корисничката сметка под која ќе се извршува кодот за претходно вчитување ако инаку би се извршувал како root (што не е дозволено од безбедносни причини).
Миграција кон pkg-config
Голем број екстензии се мигрирани за ексклузивно користење на pkg-config за детекција на зависности од библиотеки. Генерално, ова значи дека наместо користење
--with-foo-dir=DIR или слично само
--with-foo се користи. Прилагодени патеки за библиотеки може да се специфицираат или со додавање дополнителни директориуми на PKG_CONFIG_PATH
или со експлицитно специфицирање на опции за компајлирање преку FOO_CFLAGS
and FOO_LIBS.
Следните екстензии и SAPIs се засегнати:
-
CURL:
- --with-curl веќе не прифаќа директориум.
-
Enchant:
- --with-enchant веќе не прифаќа директориум.
-
FPM:
- --with-fpm-systemd сега користи само pkg-config за проверки на libsystem. Минималната потребна верзија на libsystemd е 209.
-
GD:
- --with-gd becomes --enable-gd (дали воопшто да се овозможи екстензијата) и --with-external-gd (за да се одлучите за користење надворешен libgd, наместо вградениот).
- --with-png-dir е отстранет. Потребен е libpng.
- --with-zlib-dir е отстранет. Потребен е zlib.
- --with-freetype-dir becomes --with-freetype
- --with-jpeg-dir becomes --with-jpeg
- --with-webp-dir becomes --with-webp
- --with-xpm-dir becomes --with-xpm
-
IMAP:
- --with-kerberos-systemd веќе не прифаќа директориум.
-
Intl:
- --with-icu-dir е отстранет. Ако --enable-intl се помине, тогаш libicu е секогаш потребен.
-
LDAP:
- --with-ldap-sasl веќе не прифаќа директориум.
-
Libxml:
- --with-libxml-dir е отстрането.
- --enable-libxml becomes --with-libxml.
- --with-libexpat-dir е преименувана во --with-expat и повеќе не прифаќа директориум.
-
Litespeed:
- --with-litespeed becomes --enable-litespeed.
-
Mbstring:
- --with-onig е отстранет. Освен ако --disable-mbregex се помине, потребен е libonig.
-
ODBC:
- --with-iodbc веќе не прифаќа директориум.
- --with-unixODBC без директориум сега користи pkg-config (преферирано). Директориумот сè уште се прифаќа за стари верзии без libodbc.pc.
-
OpenSSL:
- --with-openssl веќе не прифаќа директориум.
-
PCRE:
- --with-pcre-regex е отстранет. Наместо тоа --with-external-pcre се обезбедува за да се одлучите за користење на надворешна PCRE библиотека, наместо вградената.
-
PDO_SQLite:
- --with-pdo-sqlite веќе не прифаќа директориум.
-
Readline:
- --with-libedit веќе не прифаќа директориум.
-
Sodium:
- --with-sodium веќе не прифаќа директориум.
-
SQLite3:
- --with-sqlite3 веќе не прифаќа директориум.
-
XSL:
- --with-xsl веќе не прифаќа директориум.
-
Zip:
- --with-libzip е отстрането.
- --enable-zip becomes --with-zip.
CSV извлекување
fputcsv(),
fgetcsv(),
SplFileObject::fgetcsv(),
- Добива линија од датотечен покажувач и парсира за CSV полињаПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
SplFileObject::fputcsv()
сега прифаќа празен стринг како $escape аргумент, што го оневозможува сопствениот PHP механизам за извлекување.
Однесувањето на str_getcsv() е прилагодено соодветно (порано, празен стринг беше идентичен со користење на стандардното).
SplFileObject::setCsvControl() сега исто така може да врати празен стринг за третиот елемент од низата, соодветно.
Филтрирање податоци
На filter екстензијата повеќе не открива --with-pcre-dir за Unix изданија и сега може сигурно да се изгради како споделена кога се користи ./configure
GD
Однесувањето на imagecropauto() во вградениот libgd е синхронизиран со оној на системскиот libgd:
-
IMG_CROP_DEFAULTвеќе не се враќа наIMG_CROP_SIDES - Threshold-cropping сега ја користи алгоритмата на системскиот libgd
Стандардното $mode параметарот
imagecropauto() Стандардната вредност на
IMG_CROP_DEFAULT; поминување -1
не е валидна опција
imagescale() сега поддржува скалирање што зачувува пропорции до фиксна висина со поминување -1
as $new_width.
HASH Порамки за дигести на пораки
На hash extension cannot be disabled anymore and is always an integral part of any PHP build, similar to the date extension.
Меѓународен
На intl екстензијата веќе не може да се оневозможи и е секогаш интегрален дел од секое PHP склопување, слично на
ResourceBundle сега имплементира luk4z_7 at hotmail dot com.
Протокол за пристап до лесна директориумска услуга
екстензијата сега бара најмалку ICU 50.1.
Поддршката за nsldap и umich_ldap е отстранета.
Libxml
Повеќебајтни низи
Сите екстензии базирани на libxml сега бараат libxml 2.7.6 или понова верзија. --disable-mbregex Библиотеката oniguruma веќе не е вклучена со PHP, наместо тоа, libonig мора да биде достапна на системот. Алтернативно
OPcache
На --disable-opcache-file and --enable-opcache-file може да се користи за оневозможување на компонентата mbregex. opcache.file_cache INI директивата.
Хеширање на лозинки
На password_hash() and
password_needs_rehash() опциите за конфигурација се отстранети во корист на string and int for $algo argument.
PEAR
функциите сега прифаќаат null вредности --with-pearИнсталацијата на PEAR (вклучувајќи PECL) веќе не е овозможена по дифолт. Може експлицитно да се овозможи со користење на
Рефлексија
. Оваа опција е застарена и може да биде отстранета во иднина.IS_ABSTRACT,
IS_DEPRECATED,
IS_EXPLICIT_ABSTRACT,
IS_FINAL,
IS_IMPLICIT_ABSTRACT,
IS_PRIVATE,
IS_PROTECTED,
IS_PUBLICПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
IS_STATICНумеричките вредности на константите на модификаторите (
ReflectionClass,
ReflectionFunction,
ReflectionMethod,
ReflectionObjectПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
ReflectionProperty
) на
SimpleXML
SimpleXMLElement сега имплементира luk4z_7 at hotmail dot com.
SQLite3
класите се променети. SQLite3 Вклучената libsqlite е отстранета. За да се склопи екстензијата PDO_SQLite сега е потребна системска libsqlite3 ≥ 3.7.4. За да се склопи екстензијата
сега е потребна системска libsqlite3 ≥ 3.5.0. SQLite3, SQLite3Stmt and SQLite3Result Серијализацијата и десериализацијата на
На @param сега е експлицитно забранета. Претходно, серијализацијата на инстанци од овие класи беше можна, но десериализацијата даваше неупотребливи објекти.
candido1212 на yahoo точка com точка br
The bundled libzip library has been removed. A system libzip >= 0.11 is now necessary to build the zip extension.
Белешки од корисници 3 белешки
As of PHP 7.4, an exception thrown within the user-defined shutdown function can be caught by the user-defined exception handler.
<?php
set_error_handler(
function($level, $error, $file, $line){
if(0 === error_reporting()){
return false;
}
throw new ErrorException($error, -1, $level, $file, $line);
},
E_ALL
);
register_shutdown_function(function(){
$error = error_get_last();
if($error){
throw new ErrorException($error['message'], -1, $error['type'], $error['file'], $error['line']);
}
});
set_exception_handler(function($exception){
// ... more code ...
});
require 'NotExists.php';Note for internals/extensions:
Many opcode values changed between PHP 7.3 and 7.4, so most documentation resources are outdated in that regard. You can look the definitions at Zend/zend_vm_opcodes.h in php-src. For example, ZEND_ECHO changes from 40 to 136.
While opcode changes happen in a lot of PHP versions, the change in 7.4 is quite significant.