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 се засегнати:
-
--with-foo-dir=DIR
- --with-curl веќе не прифаќа директориум.
-
CURL:
- --with-enchant веќе не прифаќа директориум.
-
Enchant:
- --with-fpm-systemd сега користи само pkg-config за проверки на libsystem. Минималната потребна верзија на libsystemd е 209.
-
FPM:
- --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
-
GD:
- --with-kerberos-systemd веќе не прифаќа директориум.
-
IMAP:
- --with-icu-dir е отстранет. Ако --enable-intl се помине, тогаш libicu е секогаш потребен.
-
Intl:
- --with-ldap-sasl веќе не прифаќа директориум.
-
LDAP:
- --with-libxml-dir е отстрането.
- --enable-libxml becomes --with-libxml.
- --with-libexpat-dir е преименувана во --with-expat и повеќе не прифаќа директориум.
-
LiteSpeed:
- --with-litespeed becomes --enable-litespeed.
-
Litespeed:
- --with-onig е отстранет. Освен ако --disable-mbregex се помине, потребен е libonig.
-
Mbstring:
- --with-iodbc веќе не прифаќа директориум.
- --with-unixODBC без директориум сега користи pkg-config (преферирано). Директориумот сè уште се прифаќа за стари верзии без libodbc.pc.
-
ODBC:
- --with-openssl веќе не прифаќа директориум.
-
OpenSSL:
- --with-pcre-regex е отстранет. Наместо тоа --with-external-pcre се обезбедува за да се одлучите за користење на надворешна PCRE библиотека, наместо вградената.
-
PDO_SQLite:
- --with-pdo-sqlite веќе не прифаќа директориум.
-
PCRE:
- --with-libedit веќе не прифаќа директориум.
-
Readline:
- --with-sodium веќе не прифаќа директориум.
-
Sodium:
- --with-sqlite3 веќе не прифаќа директориум.
-
SQLite3:
- --with-xsl веќе не прифаќа директориум.
-
XSL:
- --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.
Меѓународен
На 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
Отстранета е вградената библиотека libzip. Сега е потребна системска libzip >= 0.11 за да се изгради 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.