Другие изменения
Улучшения производительности
Ядро PHP
Добавлен специальный опкод виртуальной машины для функции 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
и FOO_LIBS
.
Следующие модули и SAPI были затронуты этим изменением:
-
CURL:
- Опция --with-curl больше не принимает каталог.
-
Enchant:
- Опция --with-enchant больше не принимает каталог.
-
FPM:
- Опция --with-fpm-systemd теперь использует только pkg-config для проверок libsystem. Минимальная обязательная версия libsystemd - 209.
-
GD:
- Опция --with-gd переименована в --enable-gd (должен быть включен модуль или нет), а опция --with-external-gd использует внешнюю библиотеку libgd, вместо той, которая идет в комплекте.
- Опция --with-png-dir удалена. Наличие libpng теперь обязательно.
- Опция --with-zlib-dir удалена. Наличие zlib теперь обязательно.
- Опция --with-freetype-dir переименована в --with-freetype
- Опция --with-jpeg-dir переименована в --with-jpeg
- Опция --with-webp-dir переименована в --with-webp
- Опция --with-xpm-dir переименована в --with-xpm
-
IMAP:
- Опция --with-kerberos-systemd больше не принимает каталог.
-
Intl:
- Опция --with-icu-dir удалена. Если передан --enable-intl, тогда всегда требуется наличие libicu.
-
LDAP:
- Опция --with-ldap-sasl больше не принимает каталог.
-
Libxml:
- Опция --with-libxml-dir удалена.
- Опция --enable-libxml переименована в --with-libxml.
- Опция --with-libexpat-dir переименована в --with-expat и больше не принимает каталог.
-
Litespeed:
- Опция --with-litespeed переименована в --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 переименована в --with-zip.
Экранирование CSV
fputcsv(),
fgetcsv(),
SplFileObject::fputcsv(),
SplFileObject::fgetcsv() и
SplFileObject::setCsvControl()
теперь принимаем пустую строку в аргументе $escape
.
Это отключит проприетарный механизм экранирования PHP.
Поведение функции str_getcsv() было соответствующим образом скорректировано (ранее пустая строка была идентична использованию значения по умолчанию).
Метод SplFileObject::getCsvControl() теперь также может возвращать пустую строку для третьего элемента массива, соответственно.
Фильтрация данных
Модуль filter больше не поддерживает ---with-pcre-dir для Unix-сборок и поэтому может быть спокойно собран для общего пользования с помощью ./configure.
GD
Поведение функции imagecropauto() в встроенной библиотеке libgd было синхронизировано с системной библиотекой libgd:
-
IMG_CROP_DEFAULT
в случае неудачного выполнения не заменяется наIMG_CROP_SIDES
- Пороговое значение кадрирования теперь рассчитывается из алгоритма в системной библиотеке libgd
Значение по умолчанию $mode
imagecropauto() было изменено на
IMG_CROP_DEFAULT
; передача -1
теперь объявлена устаревшей.
imagescale() теперь поддерживает масштабирование
с сохранением соотношения сторон до фиксированной высоты
при передаче -1
в параметр $new_width
.
Фреймворк хеш-кодов HASH
Модуль hash больше нельзя отключить, теперь он является неотъемлемой частью любой PHP-сборки, подобно модулю date.
Intl
Модуль intl теперь требует как минимум ICU 50.1.
Класс ResourceBundle теперь реализует Countable.
Облегченный протокол доступа к каталогам (LDAP)
Поддержка nsldap и umich_ldap была удалена.
Libxml
Все модули на основе libxml теперь требуют libxml версии 2.7.6 или новее.
Многобайтовые строки
Библиотека oniguruma больше не идет в комплекте с PHP, вместо нее в системе должна быть libonig. В качестве альтернативы можно указать ---disable-mbregex, чтобы отключить компонент mbregex.
OPcache
Конфигурационные опции --disable-opcache-file и --enable-opcache-file удалены в пользу использования INI-директивы opcache.file_cache
Хеширование паролей
Функции password_hash() и
теперь принимают обнуляемую строку (string) и целое число (int) в аргументе $algo
.
PEAR
Установка PEAR (вместе с PECL) больше не включена по умолчанию. Ее можно явно включить, используя --with-pear. Эта опция объявлена устаревшей и может быть удалена в будущем.
Reflection
Изменены числовые значения констант-модификаторов
(IS_ABSTRACT
,
IS_DEPRECATED
,
IS_EXPLICIT_ABSTRACT
,
IS_FINAL
,
IS_IMPLICIT_ABSTRACT
,
IS_PRIVATE
,
IS_PROTECTED
,
IS_PUBLIC
и
IS_STATIC
) в классах
ReflectionClass,
ReflectionFunction,
ReflectionMethod,
ReflectionObject и
ReflectionProperty.
SimpleXML
Класс SimpleXMLElement теперь реализует Countable.
SQLite3
Встроенная в сборке библиотека libsqlite удалена. Для сборки модуля SQLite3 теперь требуется libsqlite3 ≥ 3.7.4. Чтобы собрать модуль PDO_SQLite обязательно требуется libsqlite3 ≥ 3.5.0.
Сериализация и десериализация SQLite3, SQLite3Stmt и SQLite3Result теперь явно запрещены. Раньше сериализация экземпляров этих классов была возможна, но десериализация делала объекты неиспользуемыми для дальнейшей работы.
Нотацию @param
теперь также можно использовать для обозначения параметров SQL-запроса.
Zip
Встроенная библиотека libzip удалена. Теперь обязательно наличие в системе библиотеки libzip >= 0.11, чтобы собрать модуль zip.