Битта хостинг аккаунтида кўпинча бир нечта сайт яшайди: компаниянинг асосий сайти, эски акция саҳифаси, блог ва синов учун очилган нусха. Бу сайтлар турли йилларда, турли дастурчилар томонидан ёзилган бўлади ва ҳар бири PHP тилига ўзича талаб қўяди. Агар бутун аккаунт учун битта PHP версияси мажбурий бўлса, эски сайтни сақлаб қолиш учун янги сайтни ҳам эски версияда ушлаб туришга тўғри келади. Ҳар бир сайтга алоҳида PHP версиясини танлаш имконияти айнан шу муаммони ҳал қилади.
Нима учун сайтлар турли PHP версиясини талаб қилади
PHP ҳар йили янги асосий версия чиқаради ва ҳар бир версия билан баъзи эски функциялар ўчирилади, янги синтаксис қўшилади. Масалан, бир неча йил олдин ёзилган махсус CMS PHP 7.4 да муаммосиз ишлайди, лекин 8.x версияларида ўчирилган функцияларга мурожаат қилгани учун хато беради. Аксинча, янги Laravel лойиҳаси ёки сўнгги WordPress плагинлари камида PHP 8.2 ёки ундан юқори версияни талаб қилиши мумкин. Шу сабабли икки сайтни битта версияга мажбурлаш улардан бирини синдиради.
Яна бир сабаб бу хавфсизлик ва тезлик. Янги PHP версиялари одатда тезроқ ишлайди ва хавфсизлик ямоқларини олади. Барча сайтлар учун битта умумий версия бўлса, энг эски сайт бутун аккаунтни орқада ушлаб туради. Алоҳида версия эса янги сайтларни замонавий версияга ўтказиб, эски сайтни эса янгилангунча вақтинча эски версияда қолдириш имконини беради.
ISPmanager панелида версияни қаердан танлаш мумкин
sayt.uz хостингида бошқарув панели ISPmanager бўлиб, унга sayt.uz кабинетидаги хостинг саҳифасидан бевосита кирасиз. Панелда сайтлар рўйхати (WWW-доменлар бўлими) мавжуд. Керакли сайтни танлаб таҳрирлаш ойнасини очсангиз, PHP созламалари бўлимида ишлаш режими ва версияси кўрсатилади. Рўйхатдан керакли версияни танлаб сақлаганингиздан сўнг ўзгариш фақат шу сайтга таъсир қилади, қолган сайтлар ўз версиясида ишлашда давом этади.
Панел версиясига ва тарифга қараб меню номлари бироз фарқ қилиши мумкин. Агар рўйхатда керакли версияни кўрмасангиз ёки танлаш майдони фаол бўлмаса, бу созлама тарифингизда ёпиқ бўлиши мумкин. Бундай ҳолатда кабинетдан техник ёрдамга тикет ёзиб, қайси версиялар мавжудлигини аниқлаб олиш энг тўғри йўл.
Ишлаш режимининг аҳамияти
PHP версияси билан бирга ишлаш режими ҳам танланади. Одатда Apache модули, CGI ва FastCGI (PHP-FPM) вариантлари бўлади. Альтернатив версиялар кўпинча фақат CGI ёки FastCGI режимида мавжуд, чунки Apache модули серверда фақат битта версия билан ишлай олади. PHP-FPM режими эса ҳар бир сайт учун алоҳида жараёнлар ҳовузини ишлатади ва кўп ҳолларда энг барқарор танлов ҳисобланади.
Амалий мисол: Тошкентдаги битта компаниянинг учта сайти
Тасаввур қилинг, Тошкентдаги қурилиш материаллари дўкони битта хостинг аккаунтида учта сайт юритади. Асосий сайт example.uz 2019-йилда махсус PHP кодида ёзилган ва ҳозирча фақат PHP 7.4 да барқарор ишлайди. Янги интернет-дўкон shop.example.uz WooCommerce асосида қурилган ва PHP 8.3 ни талаб қилади. Учинчи сайт blog.example.uz эса оддий WordPress блоги бўлиб, PHP 8.2 да ҳам, 8.3 да ҳам яхши ишлайди.
Бу ҳолатда тўғри ечим ҳар бир сайтга ўз версиясини белгилаш: асосий сайтга вақтинча 7.4, дўкон ва блогга 8.3. Шу билан бирга асосий сайтни янгилаш режасини тузиш керак, чунки 7.4 версияси расман қўллаб-қувватланмайди ва хавфсизлик ямоқларини олмайди. Алоҳида версия бу ерда доимий ечим эмас, балки эски сайтни хавфсиз тарзда янгилаш учун вақт ютиш воситасидир.
| Сайт | Платформа | PHP версияси | Изоҳ |
|---|---|---|---|
| example.uz | Махсус код | 7.4 | Вақтинча, янгилаш режалаштирилган |
| shop.example.uz | WooCommerce | 8.3 | Плагин талаблари бўйича |
| blog.example.uz | WordPress | 8.3 | Замонавий версия |
Версияни текшириш, cron ва терминал билан ишлаш
Версияни ўзгартиргандан кейин сайт ҳақиқатан қайси версияда ишлаётганини текшириш фойдали. Бунинг энг оддий усули сайт папкасида вақтинчалик файл яратиш ва уни браузерда очиш. Текширувдан кейин бу файлни албатта ўчиринг, чунки у сервер ҳақида ортиқча маълумот беради.
<?php
echo PHP_VERSION;
Муҳим нозик жиҳат шундаки, панелда сайтга танланган версия фақат веб-сўровларга тегишли. Агар SSH орқали терминалда php буйруғини ишга туширсангиз ёки cron вазифаси ёзсангиз, у сервернинг стандарт PHP версиясидан фойдаланиши мумкин. Натижада сайт 8.3 да ишлайди, cron скрипти эса бошқа версияда ишлаб, кутилмаган хато беради. Шунинг учун cron ва терминал буйруқларида керакли версиянинг тўлиқ йўлини кўрсатиш керак.
# Standart versiyani ko'rish
php -v
# Alternativ versiyani to'liq yo'l bilan chaqirish (yo'l serverga qarab farq qiladi)
/opt/php83/bin/php -v
# Cron uchun misol: har 15 daqiqada skriptni PHP 8.3 bilan ishga tushirish
*/15 * * * * /opt/php83/bin/php /var/www/user/data/www/shop.example.uz/cron.php
ISPmanager серверларида альтернатив версиялар одатда /opt/php83/bin/php каби йўлларда жойлашади, лекин аниқ йўл сервер созламасига боғлиқ. Агар ишончингиз комил бўлмаса, терминалда ls /opt буйруғи билан текширинг ёки техник ёрдамдан сўранг. Composer ишлатадиган лойиҳаларда ҳам худди шу қоида амал қилади: Composer'ни сайт ишлайдиган версия билан ишга туширинг.
Версияни ўзгартиришдан олдин нималарни текшириш керак
Версияни алмаштириш бир тугма босиш билан бажарилади, лекин унинг оқибати жиддий бўлиши мумкин. Шунинг учун қуйидаги тартибга амал қилиш тавсия этилади:
- Сайт файллари ва маълумотлар базасининг захира нусхасини олинг.
- CMS, мавзу ва плагинларнинг янги версияни қўллаб-қувватлашини уларнинг ҳужжатларидан текширинг.
- Иложи бўлса, аввал сайтнинг синов нусхасида янги версияни синаб кўринг.
- Ўзгартиришни сайтга ташриф кам бўлган вақтда, масалан кечқурун бажаринг.
- Ўзгартиргандан кейин асосий саҳифалар, форма, сават ва админ панелни қўлда текширинг.
Кенгайтмаларга ҳам эътибор беринг. Ҳар бир PHP версияси учун кенгайтмалар рўйхати алоҳида бўлади, шунинг учун эски версияда ёқилган intl, imagick ёки ionCube янги версияда автоматик ёқилмаган бўлиши мумкин. Шунингдек, memory_limit ва upload_max_filesize каби созламалар ҳам версияга қараб алоҳида сақланиши мумкин, уларни янги версияда қайта текширинг.
Муаммо чиқса қандай қайтариш мумкин
Алоҳида версия тизимининг катта афзаллиги шундаки, хато чиқса қайтиш жуда тез. Агар янги версияга ўтгандан кейин сайт оқ саҳифа ёки 500 хатосини кўрсатса, панелда аввалги версияни қайта танланг ва сақланг. Одатда сайт бир неча сонияда аввалги ҳолатига қайтади. Шундан кейин хатолар журналини кўриб, муаммонинг сабабини хотиржам аниқлаш мумкин.
Хатолар журнали панелда сайт журналлари бўлимида ёки аккаунтингиздаги logs папкасида бўлади. У ердаги Fatal error қаторлари қайси файл ва қайси функция муаммо туғдираётганини аниқ кўрсатади. Шу маълумот билан дастурчи кодни янгилайди, кейин эса янги версияга яна ўтилади. Агар ўзингиз ҳал қила олмасангиз, техник ёрдамга журналдаги хато матнини юборсангиз, муаммони тезроқ аниқлашга ёрдам беради.