PHP.mk документација

Претходно вчитување

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

opcache.preloading.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека opcache.preloading.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Претходно вчитување

Референца за `opcache.preloading.php` со подобрена типографија и навигација.

opcache.preloading.php

Претходно вчитување

As of PHP 7.4.0, PHP can be configured to preload scripts into the opcache when the engine starts. Any functions, classes, interfaces, or traits (but not constants) in those files will then become globally available for all requests without needing to be explicitly included. That trades convenience and performance (because the code is always available) for baseline memory usage. It also requires restarting the PHP process to clear pre-loaded scripts, meaning this feature is only practical to use in production, not in a development environment.

Од PHP 7.4.0, PHP може да се конфигурира за претходно вчитување на скрипти во opcache кога моторот стартува. Сите функции, класи, интерфејси или трајти (но не и константи) во тие датотеки потоа ќе станат глобално достапни за сите барања без потреба од експлицитно вклучување. Ова тргува погодност и перформанси (бидејќи кодот е секогаш достапен) за основна потрошувачка на меморија. Исто така, бара рестартирање на PHP процесот за да се исчистат претходно вчитаните скрипти, што значи дека оваа функција е практична за употреба само во продукција, а не во развојна средина. Имајте предвид дека оптималниот компромис помеѓу перформансите и меморијата може да варира во зависност од апликацијата. „Претходно вчитај сè“ може да биде наједноставната стратегија, но не нужно и најдобрата. Дополнително, претходното вчитување е корисно само кога постои постојан процес од едно барање до друго. Тоа значи дека иако може да работи во CLI скрипта ако е овозможен opcache, генерално е бескорисно. Исклучок е кога се користи претходно вчитување на.

Забелешка: FFI библиотеки

Претходното вчитување не е поддржано на Windows. opcache.preload Конфигурирањето на претходното вчитување вклучува два чекори и бара opcache да биде овозможен. Прво, поставете го php.ini:

opcache.preload=preload.php

preload.php вредност во opcache.preload_user е произволна датотека што ќе се изврши еднаш при стартување на серверот (PHP-FPM, mod_php, итн.) и ќе го вчита кодот во постојана меморија. Во сервери што стартуваат како root пред да се префрлат на непривилегиран системски корисник, или ако PHP ќе се извршува како root (не се препорачува), opcache.preload_user=root вредноста може да го специфицира системскиот корисник за извршување на претходното вчитување. Извршувањето на претходно вчитување како root не е дозволено по дифолт. Поставете

за експлицитно да го дозволите тоа. preload.php Во include, include_once, require, require_once, или opcache_compile_file() скрипта, секоја датотека реферирана од .php ќе биде парсирана во постојана меморија. Во следниот пример, сите src датотеки во Test file.

<?php
$directory
= new RecursiveDirectoryIterator(__DIR__ . '/src');
$fullTree = new RecursiveIteratorIterator($directory);
$phpFiles = new RegexIterator($fullTree, '/.+((?<!Test)+\.php$)/i', RecursiveRegexIterator::GET_MATCH);

foreach (
$phpFiles as $key => $file) {
require_once
$file[0];
}
?>

И двете include and opcache_compile_file() директориумот ќе бидат претходно вчитани, освен ако не се

  • include ќе работи, но имаат различни импликации за тоа како се ракува со кодот. opcache_compile_file() ќе го изврши кодот во датотеката, додека
  • Кога корисникот ќе кликне некаде на сликата, придружната форма ќе биде предадена на серверот со две дополнителни променливи: include нема. Тоа значи дека само првиот поддржува условна декларација (функции декларирани внатре во if-блок). includeќе го изврши кодот, вгнездени
  • opcache_compile_file() датотеките исто така ќе бидат парсирани и нивните декларации претходно вчитани. a.php дефинира класа A and b.php дефинира класа B што се проширува AСодржи какви било информации за патеката обезбедени од клиентот што следат по името на датотеката на тековната скрипта, но предничат на низата за прашање, ако е достапно. На пример, ако тековната скрипта беше пристапена преку URI opcache_compile_file() може да ги вчита овие две датотеки по кој било редослед. Кога се користи include, сепак, a.php must прво да се вклучи.
  • Во секој случај, ако подоцнежна скрипта вклучува датотека што веќе е претходно вчитана, тогаш нејзината содржина ќе се изврши, но сите симболи што ги дефинира нема да бидат повторно дефинирани. Користењето include_once нема да спречи датотеката да се вклучи по втор пат. Можеби ќе биде потребно повторно да се вчита датотека за да се вклучат глобални константи дефинирани во неа, бидејќи тие не се обработуваат со претходно вчитување.
Кој пристап е подобар затоа зависи од посакуваното однесување. Со код што инаку би користел автолоадер, opcache_compile_file() овозможува поголема флексибилност. Со код што инаку би се вчитувал рачно, include ќе биде поотпорен.

Белешки од корисници 2 забелешки

postmaster на greg0ire dot fr
3 години пред
PHP 8.1 comes with an inheritance cache that partially overlaps with what the preloading already does. If you enabled preloading on lower versions then migrated to PHP 8.1, you might want to turn off preloading and see if that comes with a performance penalty or not.
postmaster на greg0ire dot fr
3 години пред
There are caveats when enabling preloading, one of them being that it should be enabled via a php.ini file. Enabling it with a php-fpm pool configuration won't work, for instance, since preloading is global and not per-pool. To make sure that you successfully enabled preloading, you should check for a preload_statistics key in the output of opcache_get_status(). There should already be an opcache_statistics key, but that's something else entirely.
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.