15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
04.01.2024

LiteSpeed хостинг и управление на PHP версии: Пълно техническо ръководство за потребители на AlexHost

Изборът на правилната версия на PHP за вашата хостинг среда е едно от най-важните решения при разгръщането на уеб приложения. Грешната версия може безшумно да влоши производителността, да въведе уязвимости в сигурността или напълно да наруши съвместимостта с фреймуърка. Споделеният хостинг на AlexHost, задвижван от LiteSpeed, поддържа едновременно PHP 7.3, 7.4, 8.0 и 8.1, позволявайки ви да задавате различни версии на PHP за всеки домейн чрез MultiPHP Manager на cPanel — без да докосвате конфигурационни файлове на сървъра или да отваряте тикет за поддръжка.

Това ръководство обхваща какво всъщност предоставя всяка версия на PHP на ниво двигател, как правилно да превключвате версии в инфраструктурата на AlexHost и как да избегнете често срещаните клопки, които причиняват неизправности в приложенията след смяна на версията.

Защо изборът на версия на PHP е по-важен, отколкото повечето разработчици осъзнават

PHP не е монолитна среда за изпълнение. Всяка основна и второстепенна версия променя поведението на Zend Engine, премахва функции, променя правилата за преобразуване на типове и модифицира начина, по който OPcache и JIT компилаторът взаимодействат с вашия код. Изпълнението на PHP 7.3 код върху PHP 8.1 без тестване не е безопасно надграждане — това е хазарт с вашата производствена среда.

LiteSpeed Web Server обработва изпълнението на PHP чрез LSAPI (LiteSpeed Server Application Programming Interface), което е архитектурно различно от mod_php на Apache или FastCGI. LSAPI поддържа постоянни PHP работни процеси, елиминирайки режийните разходи за стартиране на процес при всяка заявка, което натоварва традиционните конфигурации. Резултатът е измеримо по-ниско време до първия байт (TTFB) и значително намалени CPU цикли на заявка — особено важно за PHP-интензивни приложения като WordPress, Magento или Laravel.

Когато комбинирате LSAPI на LiteSpeed с MultiPHP Manager на cPanel, получавате изолация на версията на PHP на ниво процес за всеки домейн, а не само на ниво конфигурация. Това е критично разграничение за агенции или разработчици, хостващи множество клиентски сайтове в един акаунт за Споделен Уеб Хостинг.

Сравнение на версиите на PHP: Матрица на функции и сигурност

Функция / АтрибутPHP 7.3PHP 7.4PHP 8.0PHP 8.1
Официална поддръжка за сигурностПриключи дек. 2021Приключи ноем. 2022Приключи ноем. 2023Приключи ноем. 2024
JIT компилаторНеНеДа (експериментален)Да (подобрен)
Типизирани свойстваНеДаДаДа
Стрелкови функцииНеДаДаДа
Обединени типовеНеНеДаДа
Именувани аргументиНеНеДаДа
Match изразНеНеДаДа
Атрибути (Анотации)НеНеДаДа
Изброявания (Enums)НеНеНеДа
Fibers (Корутини)НеНеНеДа
Readonly свойстваНеНеНеДа
Типове на пресечната точкаНеНеНеДа
Nullsafe операторНеНеДаДа
OPcache предварително зарежданеНеДаДаДа
Относителна производителност спрямо 7.3Базова линия+~5-10%+~15-20%+~20-25%

Основен извод от тази таблица: PHP 7.3 и 7.4 са след официалните си дати на край на живота. Те трябва да се използват само когато дадено наследено приложение има твърди зависимости, които не могат да бъдат разрешени — не като избор по подразбиране за нови разгръщания.

PHP 7.3: Наследена стабилност с известни ограничения

PHP 7.3 беше версия, фокусирана върху поддръжката, която въведе array_key_first(), array_key_last(), гъвкав синтаксис heredoc/nowdoc и функцията is_countable(). Тя представляваше стабилна платформа за приложения, работещи на PHP 5.x, и се нуждаещи от път за миграция без агресивен рефакторинг.

Критична оперативна реалност: PHP 7.3 достигна края на живота си през декември 2021 г. Не получава пачове за сигурност от PHP проекта. Използването му в производство означава, че всяка новооткрита уязвимост в Zend Engine или основните разширения ще остане непоправена. Единствената легитимна причина да използвате PHP 7.3 в AlexHost днес е да поддържате наследено приложение, докато миграцията към PHP 8.x е активно в ход.

Честа употреба: По-стари инсталации на Joomla 3.x, наследени приложения на CodeIgniter 3 или персонализирани кодови бази от ерата на PHP 5.6, които не са актуализирани за използване на съвременни декларации за типове.

PHP 7.4: Последният от линията 7.x — Полезен за преходни разгръщания

PHP 7.4 беше финалната версия в клона PHP 7 и въведе няколко функции, които направиха кода значително по-поддържаем и производителен, без да изискват разрушителните промени, дошли с PHP 8.0.

Типизираните свойства на класовете ви позволяват да налагате ограничения за типове на ниво клас:

class User {
    public int $id;
    public string $email;
    public ?DateTime $lastLogin;
}

Това елиминира цяла категория грешки по време на изпълнение, които преди това се появяваха само при специфични пътища на изпълнение.

Стрелковите функции намаляват многословността на кратките затваряния, особено полезни при операции с масиви:

$multiplied = array_map(fn($n) => $n * 2, $numbers);

Предварителното зареждане на OPcache (въведено в 7.4) е архитектурно значимо: позволява на PHP да зарежда и компилира набор от файлове в споделена памет при стартиране на сървъра, правейки тези файлове достъпни за всички работни процеси без повторна компилация. На LiteSpeed с LSAPI, това умножава ползата от производителността, тъй като постоянните работници вече избягват режийните разходи за стартиране на процеси.

PHP 7.4 достигна края на живота си през ноември 2022 г. Подходящ е за инсталации на WordPress, работещи с по-стари плъгини с известни несъвместимости с PHP 8.x, или за разгръщания на Drupal 7, все още чакащи миграция.

PHP 8.0: Архитектурната точка на прегъване

PHP 8.0 не беше инкрементална версия. Тя въведе промени, които фундаментално промениха начина, по който PHP кодът се пише, изпълнява и разсъждава. Няколко дългогодишни поведения бяха променени или премахнати, правейки го разрушително надграждане за кодови бази, разчитащи на свободно преобразуване на типове или остарели функции.

Just-In-Time компилация

JIT компилаторът в PHP 8.0 компилира горещи пътища на кода до нативен машинен код по време на изпълнение, заобикаляйки повторната интерпретация. При натоварвания, ограничени от CPU — математически изчисления, обработка на изображения, тръбопроводи за трансформация на данни — JIT може да осигури значително ускорение. Въпреки това, за типични уеб приложения, ограничени от I/O (заявки към база данни, четене на файлове, API извиквания), ползата от JIT често е незначителна, тъй като тесното място не е изпълнението на CPU, а изчакването на външни ресурси.

Разбирането на това разграничение предотвратява честата грешка да се очаква JIT автоматично да ускори WordPress сайт. Няма да стане — освен ако сайтът не извършва значителни изчисления вътре в процеса.

Обединени типове и именувани аргументи

Обединените типове позволяват на параметър на функция или върната стойност да приема изрично множество типове:

function processInput(int|string $input): int|false {
    // ...
}

Именуваните аргументи отделят реда на аргументите от сигнатурите на функциите, драматично подобрявайки четимостта при функции с множество незадължителни параметри:

array_slice(array: $data, offset: 2, length: 5, preserve_keys: true);

Match изразът

Изразът match замества switch със строго сравнение на типове, без поведение на преминаване и връщания, базирани на изрази:

$status = match($code) {
    200, 201 => 'success',
    404 => 'not found',
    500 => 'server error',
    default => 'unknown',
};

За разлика от switch, match хвърля UnhandledMatchError, ако нито един клон не съвпада и не е предоставено значение по подразбиране — правейки безшумните неуспехи невъзможни.

Атрибути (Структурирани метаданни)

Атрибутите на PHP 8.0 заместват анотациите в docblock, използвани от фреймуърки като Doctrine и Symfony. Те се анализират от самия двигател, а не от потребителски regex:

#[Route('/api/users', methods: ['GET'])]
public function listUsers(): Response { ... }

Това има значителни последици за производителността на фреймуърка и точността на инструментите за IDE.

PHP 8.1: Съвременен PHP от производствен клас

PHP 8.1 е версията, към която повечето нови проекти трябва да се насочат към момента на писане. Тя надгражда основата на PHP 8.0 и добавя функции, които адресират дългогодишни пропуски в системата от типове на езика и модела на конкурентност.

Изброявания

Enums решават проблема с „магическите константи”, който преследваше PHP кодовите бази в продължение на десетилетия:

enum Status: string {
    case Active = 'active';
    case Inactive = 'inactive';
    case Pending = 'pending';
}

Подкрепените enums могат да се съхраняват в бази данни и да се сериализират чисто. Чистите enums осигуряват типово-безопасно представяне на състоянието без крехкостта на константи на класове или целочислени флагове.

Fibers: Кооперативна многозадачност

Fibers въвеждат нискониво примитив за конкурентност в PHP. За разлика от нишките, Fibers са кооперативни — те предават контрол изрично. Това е основата, която асинхронните PHP фреймуърки (като ReactPHP и Amp) използват за имплементиране на неблокиращо I/O без изискване на разширения като Swoole:

$fiber = new Fiber(function(): void {
    $value = Fiber::suspend('first suspension');
    echo "Resumed with: " . $value;
});

$value = $fiber->start();
$fiber->resume('hello');

За приложения, работещи на VPS Хостинг с пълен контрол върху PHP средата за изпълнение, Fibers отварят вратата към изграждане на приложения, базирани на цикъл на събития, в чист PHP.

Readonly свойства

Readonly свойствата налагат неизменност след инициализация, което е от съществено значение за обектите на стойности и домейн ентитетите в DDD (Domain-Driven Design) архитектури:

class OrderId {
    public function __construct(
        public readonly string $value
    ) {}
}

Веднъж зададено в конструктора, $value не може да бъде модифицирано. Всеки опит хвърля Error. Това елиминира цял клас шаблонен код за защитно програмиране.

Типове на пресечната точка

Докато обединените типове казват „това ИЛИ онова,” типовете на пресечната точка казват „това И онова” — изисквайки стойност да имплементира множество интерфейси едновременно:

function processEntity(Serializable&Countable $entity): void { ... }

Това е особено ценно в архитектурите на контейнери за услуги и тръбопроводи за middleware.

Как да промените версиите на PHP в AlexHost LiteSpeed хостинг чрез cPanel

Средите за VPS с cPanel и споделен хостинг на AlexHost предоставят управление на версиите на PHP чрез MultiPHP Manager на cPanel. Ето точната процедура:

Стъпка 1: Достъп до вашето табло за управление на cPanel

Влезте в акаунта си в AlexHost и навигирайте до секцията Данни за вход, за да извлечете вашите идентификационни данни за cPanel. Отворете cPanel директно чрез предоставения URL (обикновено yourdomain.com:2083 или директния IP с порт).

Стъпка 2: Навигирайте до MultiPHP Manager

Вътре в cPanel, намерете секцията Софтуер. Кликнете върху MultiPHP Manager. Този интерфейс изброява всички домейни и поддомейни, свързани с вашия акаунт, всеки с показаната му текуща версия на PHP.

Стъпка 3: Изберете целевия домейн и версията на PHP

Поставете отметка в квадратчето до домейна или поддомейна, който искате да промените. Използвайте падащото меню PHP версия, за да изберете от наличните версии — PHP 7.3, 7.4, 8.0 или 8.1 в зависимост от конфигурацията на вашия хостинг план. Кликнете Приложи.

Стъпка 4: Проверете промяната

След прилагане, промяната влиза в сила незабавно за нови заявки. Проверете, като създадете временен файл phpinfo.php в основната директория на документите на домейна:

<?php phpinfo(); ?>

Потвърдете версията на PHP в изхода, след което изтрийте незабавно този файл — оставянето на phpinfo() изложен в производство е уязвимост в сигурността, която разкрива конфигурацията на вашия сървър на нападателите.

Стъпка 5: Тествайте функционалността на приложението

Не приемайте, че промяната на версията на PHP е безопасна без тестване. Проверете журнала за грешки на вашето приложение (/home/username/logs/ или чрез инструмента Грешки на cPanel) за известия за остарели функции, фатални грешки или извиквания на недефинирани функции, указващи несъвместимост.

Замяна на версията на PHP за директория чрез .htaccess

За детайлен контрол — например, изпълнение на наследена поддиректория на PHP 7.4, докато основният сайт работи на PHP 8.1 — можете да замените версията на PHP на ниво директория, използвайки .htaccess:

<FilesMatch ".php$">
    SetHandler application/x-httpd-ea-php81
</FilesMatch>

Форматът на името на манипулатора е application/x-httpd-ea-phpXX, където XX съответства на номера на версията без десетичната точка. Това е конвенция на EasyApache 4, използвана в cPanel среди.

Матрица за вземане на решения при избор на версия на PHP

СценарийПрепоръчана версия на PHPОбосновка
Нов проект на Laravel 10+ или Symfony 6+PHP 8.1Изисква минимум PHP 8.1; пълна поддръжка на функции
WordPress 6.x (всички плъгини актуализирани)PHP 8.1Официална препоръка; подобрения в производителността
WordPress с наследени плъгини (преди 2022)PHP 7.4 или 8.0Тествайте съвместимостта преди надграждане
Magento 2.4.6+PHP 8.1Официалната матрица за поддръжка изисква 8.1
Drupal 10PHP 8.1Минимално изискване
Наследен Joomla 3.xPHP 7.3 или 7.4Joomla 3.x не е напълно съвместим с PHP 8.x
Персонализирано наследено приложение (преди 2018)PHP 7.3Мигрирайте възможно най-скоро
Нов API микросервиз или CLI инструментPHP 8.1Налични са Enums, Fibers, readonly свойства

Последици за сигурността при използване на PHP версии след края на живота

Тази точка заслужава изрично подчертаване. PHP версиите след датата на края на живота не получават пачове за сигурност от PHP проекта. Това означава:

  • CVE, открити след EOL, не се поправят в засегнатия клон на версията.
  • Средите за споделен хостинг са особено изложени, тъй като компрометиран PHP процес потенциално може да засегне съседни акаунти в зависимост от конфигурацията на изолацията.
  • Съответствието с PCI DSS изрично забранява използването на софтуер след поддържания от доставчика край на живота. Ако обработвате плащания, използването на PHP 7.3 или 7.4 е нарушение на съответствието.
  • Защитните стени за уеб приложения (WAF) могат да намалят някои рискове, но не могат да поправят уязвимости на ниво двигател.

Ако имате нужда от пълен контрол върху вашата PHP среда, ритъма на поправки за сигурност и възможността да компилирате персонализирани PHP разширения, Dedicated сървър ви дава изолацията и административния достъп, които споделените среди не могат да осигурят.

Специфични за LiteSpeed съображения за производителността на PHP

Няколко поведения на LiteSpeed взаимодействат с избора на версия на PHP по начини, които не са очевидни:

LiteSpeed Cache (LSCache): Плъгинът LSCache за WordPress работи на ниво уеб сървър, а не на ниво PHP. Въпреки това, подобрените нива на попадения в OPcache на PHP 8.x означават, че пропуснатите кешове се обслужват по-бързо, намалявайки наказанието за производителност при некешираните заявки.

Постоянство на LSAPI работниците: LiteSpeed поддържа PHP работниците живи между заявките. Това означава, че JIT компилаторът на PHP 8.1 има повече възможности да се загрее и оптимизира горещите пътища на кода в сравнение с традиционна CGI конфигурация, при която всяка заявка стартира студен процес.

PHP-FPM срещу LSAPI: На VPS контролни панели, където конфигурирате стека сами, може да избирате между PHP-FPM и LSAPI. LSAPI последователно надминава PHP-FPM в бенчмаркове за LiteSpeed среди, тъй като използва специално изграден комуникационен протокол, а не общия интерфейс на FastCGI.

Ограничения на паметта и брой работници: PHP 8.x има малко по-висок базов отпечатък на паметта от PHP 7.x поради допълнителни структури за изпълнение за JIT и системата от типове. Ако работите в среда с ограничена памет, наблюдавайте настройките memory_limit след надграждане.

Практически контролен списък с основни изводи

Преди да промените или изберете версия на PHP в AlexHost LiteSpeed хостинга, преминете през този контролен списък:

  • Проверете официалната матрица за съвместимост с PHP на вашето приложение — не гадайте. Laravel, WordPress, Magento и Drupal публикуват минимални и максимални поддържани версии на PHP.
  • Одитирайте инсталираните плъгини и разширения — кодът на трети страни е най-честият източник на несъвместимост с PHP 8.x. Изпълнете composer check-platform-reqs, ако използвате Composer.
  • Първо тествайте промяната — използвайте поддомейн или среда за тестване, за да тествате промяната на версията на PHP, преди да я приложите в производство.
  • Прегледайте журналите за грешки незабавно след превключване — търсете записи E_DEPRECATED, E_NOTICE и E_FATAL, указващи нарушена съвместимост.
  • Изтрийте всички файлове phpinfo(), създадени по време на проверката.
  • Не използвайте EOL PHP версии в производство, освен ако нямате документиран, ограничен във времето план за миграция и компенсиращи контроли за сигурност.
  • Използвайте MultiPHP INI Editor (също в секцията Софтуер на cPanel), за да настроите PHP директивите за всеки домейн като memory_limit, upload_max_filesize и max_execution_time след промяна на версията — стойностите по подразбиране се различават между версиите.
  • Ако вашето приложение изисква PHP 8.2 или 8.3, помислете за надграждане до VPS план, където контролирате пълния софтуерен стек и можете да инсталирате всяка версия на PHP чрез хранилища като Remi или ondrej/php.

Често задавани въпроси

Мога ли да изпълнявам различни версии на PHP на различни домейни в рамките на един и същ акаунт за споделен хостинг на AlexHost?

Да. MultiPHP Manager на cPanel прилага настройките на версията на PHP на ниво домейн. Всеки домейн или поддомейн в акаунта ви може да изпълнява различна версия на PHP независимо, управлявана чрез същия интерфейс, без да засяга другите домейни.

Изисква ли превключването на версии на PHP в MultiPHP Manager рестартиране на сървъра или причинява ли престой?

Не. Промяната се прилага незабавно за нови входящи заявки. Съществуващите дълготрайни PHP процеси могат да продължат на старата версия до завършването им, но за типични уеб заявки този преход е безпроблемен и не причинява измерим престой.

Ще ускори ли автоматично JIT компилаторът на PHP 8.1 моя WordPress сайт?

Не значително за стандартни разгръщания на WordPress. JIT облагодетелства натоварванията, ограничени от CPU. Производителността на WordPress е ограничена предимно от времето за заявки към базата данни и I/O операциите, които JIT не ускорява. По-значимите подобрения на PHP 8.x за WordPress са по-добрата ефективност на OPcache и намалените режийни разходи при извикване на функции.

Каква е разликата между MultiPHP Manager и MultiPHP INI Editor в cPanel?

MultiPHP Manager контролира коя версия на PHP е назначена на всеки домейн. MultiPHP INI Editor контролира PHP конфигурационните директиви (настройките php.ini) за всяка комбинация от домейн и версия на PHP. И двата инструмента са необходими за пълно управление на PHP средата — само изборът на версия не конфигурира ограниченията на паметта, таймаутите за изпълнение или зареждането на разширения.

Какво трябва да направя, ако приложението ми се счупи след надграждане до PHP 8.x?

Първо, върнете се към предишната версия на PHP в MultiPHP Manager, за да възстановите услугата. След това прегледайте журналите за грешки за конкретни съобщения за грешки. Честите проблеми включват премахнати функции (each(), create_function()), променено поведение при преобразуване на типове и остарели методи на класове в стил конструктор. Адресирайте всеки проблем в тестова среда, преди да опитате надграждането отново. Ако приложението е CMS или фреймуърк, проверете дали съществува актуализирана версия, която официално поддържа PHP 8.x.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало