PHP 8.5 впроваджує опцію INI Diff

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
PHP 8.5 приносить захоплюючі нововведення, зокрема новий параметр `diff` для команди `php --ini`, який спрощує виявлення змін у конфігураційних налаштуваннях. Досліджуйте разом із нами, як скористатися цим функціоналом і відкрити нові можливості для налаштування вашого середовища розробки

PHP 8.5 вводить опцію diff для прапора php --ini, що спрощує виявлення змінених значень INI у вашій конфігурації. Використання прапора --ini дозволяє переглянути завантажений файл конфігурації php.ini та додаткові файли .ini:

$ php --ini
Шлях до конфігураційного файлу (php.ini): "/usr/local/etc/php"
Завантажений конфігураційний файл: "/usr/local/etc/php/php.ini"
Шукати додаткові .ini файли в: "/usr/local/etc/php/conf.d"
Додаткові .ini файли, що були розібрані:      /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/zz-app.ini

З початку PHP 8.5 ви можете використовувати diff для відображення INI значень, що відрізняються від вбудованих за замовчуванням:

$ php --ini=diff
Ненастроєні INI параметри:
allow_url_include: "0" -> ""
auto_append_file: (none) -> ""
auto_prepend_file: (none) -> ""
display_errors: "1" -> ""
display_startup_errors: "1" -> ""
enable_dl: "1" -> ""
error_reporting: (none) -> "22527"
...

# Спробуйте самі

3 липня 2025 року PHP випустив першу альфа-версію 8.5. Незважаючи на доступність збірок, найзручніший спосіб експериментувати з PHP 8.5 — використовувати офіційні Docker-контейнери PHP.

Розгляньмо, як протестувати новий прапор php --ini=diff та інші функції PHP, зокрема Оператор трубопроводу. Щоб слідкувати за інструкцією, створіть нову папку з Dockerfile та кількома прикладними файлами:

mkdir php-85-demo
cd $_
touch Dockerfile
mkdir php/
touch php/app.ini

Перед внесенням змін ми можемо швидко переглянути зміни INI значень в офіційному Docker-образі PHP:

docker run --rm -it php:8.5-rc-alpine sh
 
# у Docker-контейнері
php --ini=diff
Ненастроєні INI параметри:
html_errors: "1" -> "0"
implicit_flush: "0" -> "1"
max_execution_time: "30" -> "0"

Ми запустили контейнер за допомогою мітки 8.5-rc-alpine і побачили, що з коробки образ PHP змінює три INI налаштування. Якщо подивитися уважно, образ PHP не завантажує файл INI за замовчуванням, тому він практично на 100% складається з значень за замовчуванням:

$php --ini
Шлях до конфігураційного файлу (php.ini): "/usr/local/etc/php"
Завантажений конфігураційний файл: (none)
...

Зазвичай ви копіюєте готові файли php.ini, що постачаються з Docker-образом PHP. Давайте використаємо шаблон php.ini для продуктивного середовища, щоб переглянути, які ненастроєні INI значення змінюються при використанні виробничого php.ini:

FROM php:8.5-rc-alpine
 
RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
COPY php/app.ini $PHP_INI_DIR/conf.d/app.ini

Наш Dockerfile копіює INI файл php.ini-production у шлях, де PHP очікує файл php.ini. Далі ми копіюємо прикладний файл app.ini, що розміщується там, де PHP завантажує додаткові INI файли.

Тепер давайте додамо власне налаштування до файлу php/app.ini, щоб воно з’явилося у нашому результаті:

memory_limit=512M

Якщо ми зберемо наш образ і запустимо контейнер, ми можемо перевірити, які зміни ми маємо:

$ docker build -t php85-demo .
$ docker run -it --rm php85-demo sh
 
# всередині Docker-контейнера
$ php --ini=diff
Ненастроєні INI параметри:
allow_url_include: "0" -> ""
auto_append_file: (none) -> ""
auto_prepend_file: (none) -> ""
display_errors: "1" -> ""
display_startup_errors: "1" -> ""
enable_dl: "1" -> ""
error_reporting: (none) -> "22527"
html_errors: "1" -> "0"
ignore_repeated_errors: "0" -> ""
ignore_repeated_source: "0" -> ""
implicit_flush: "0" -> "1"
log_errors: "0" -> "1"
mail.add_x_header: "0" -> ""
mail.mixed_lf_and_crlf: "0" -> ""
max_execution_time: "30" -> "0"
memory_limit: "128M" -> "512M"
mysqlnd.collect_memory_statistics: "0" -> ""
request_order: (none) -> "GP"
session.cookie_httponly: "0" -> ""
session.gc_divisor: "100" -> "1000"
short_open_tag: "1" -> ""
unserialize_callback_func: (none) -> ""
user_dir: (none) -> ""
variables_order: "EGPCS" -> "GPCS"
zend.assertions: "1" -> "-1"
zend.exception_ignore_args: "0" -> "1"
zend.exception_string_param_max_len: "15" -> "0"
zlib.output_compression: "0" -> ""

Файл INI для продуктивного середовища містить кілька змін до значень за замовчуванням. Приємно знати, що ми можемо швидко побачити всі відмінності без необхідності переглядати значення у файлі php.ini

Популярні

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!