🛠️
Хостинг

PHP янгилангач сайт бузилди: тез тиклаш ва сабабини топиш

14.11.2026
← Барча мақолалар

PHP версиясини янгилагандан кейин сайт ўрнига оқ саҳифа, 500 хатоси ёки "Сайтда жиддий хатолик юз берди" деган хабар чиқиши жуда кўп учрайдиган ҳолат. Бундай пайтда ваҳима қилиш ва тасодифий созламаларни ўзгартириш вазиятни янада чалкаштиради. Аслида тиклаш тартиби оддий: аввал сайтни тезда ишлайдиган ҳолатга қайтариш, кейин хотиржам сабабини топиш ва шундан сўнг янги версияга қайта ўтиш. Ушбу мақолада айнан шу тартибни амалий мисол билан кўриб чиқамиз.

Биринчи беш дақиқа: сайтни ишлайдиган ҳолатга қайтариш

Агар сайт PHP версиясини ўзгартирган заҳотингиз бузилган бўлса, сабаби деярли аниқ янги версия билан мос келмасликдир. Шунинг учун энг тез ечим аввалги версияни қайтариш. ISPmanager панелида сайтлар рўйхатидан керакли сайтни очиб, PHP созламаларида олдинги версияни танланг ва сақланг. Кўп ҳолларда сайт бир неча сонияда қайта ишлай бошлайди ва мижозлар муаммони сезмай қолади.

Версияни қайтаришдан олдин битта ишни қилиш фойдали: хатолар журналидан охирги қаторларни нусхалаб олинг ёки ҳеч бўлмаса хато матнини ёзиб қўйинг. Сайт ишга тушгач ҳам бу маълумот журналда қолади, лекин хато айнан қайси вақтда ва қайси файлда юз берганини олдиндан билиш кейинги таҳлилни тезлаштиради.

Хатонинг сабабини журналдан топиш

Оқ саҳифа ёки 500 хатоси фойдаланувчига ҳеч нарса айтмайди, лекин сервер журналида аниқ сабаб ёзилган бўлади. ISPmanager'да сайт журналларини панелнинг ўзидан кўриш мумкин, улар одатда аккаунтингиздаги logs папкасида домен номи билан сақланади. SSH орқали кириш имконингиз бўлса, охирги қаторларни қуйидагича кўрасиз (файл номи серверга қараб бироз фарқ қилиши мумкин):

# Oxirgi 50 qatorni ko'rish
tail -n 50 ~/logs/example.uz.error.log

# Faqat fatal xatolarni ajratib olish
grep "PHP Fatal error" ~/logs/example.uz.error.log | tail -n 20

Журнал қаторида учта муҳим маълумот бор: хато тури, хабар матни ва файл йўли билан қатор рақами. Файл йўли кўпинча муаммоли плагин ёки мавзуни дарҳол кўрсатади, масалан wp-content/plugins/eski-slayder/ папкаси ичидаги файл. Шу билан сабабни излаш доираси битта компонентга тораяди.

Энг кўп учрайдиган хатолар ва уларнинг маъноси

Эски коддан янги PHP'га ўтганда бир хил хатолар қайта-қайта учрайди. Қуйидаги жадвал уларни тез таниб олишга ёрдам беради:

Журналдаги хабарСабабиЕчим йўналиши
Call to undefined function mysql_connect()mysql_* функциялари PHP 7.0 да олиб ташланганКодни mysqli ёки PDO га ўтказиш
Call to undefined function create_function() ёки each()PHP 8.0 да олиб ташланганПлагин ёки кодни янгилаш
count(): Argument #1 ($value) must be of type Countable|arrayPHP 8 да массив бўлмаган қийматни санаш хатога айландиПлагинни янгилаш ёки кодда текширув қўшиш
Array and string offset access syntax with curly braces is no longer supported$str{0} ёзуви PHP 8.0 да олиб ташланган$str[0] га алмаштириш
Call to undefined function mb_strlen()Янги версияда mbstring кенгайтмаси ёқилмаганПанелда кенгайтмани ёқиш
requires the ionCube PHP LoaderШифрланган скрипт учун юкловчи янги версияда йўқ ёки мос эмасЮкловчини ёқиш ёки скрипт ишлаб чиқарувчисидан мос версияни олиш

Жадвалдаги охирги икки ҳолат код билан эмас, балки созлама билан боғлиқ. Ҳар бир PHP версиясининг ўз кенгайтмалар рўйхати бор ва эски версияда ёқилган кенгайтма янгисида автоматик ёқилмаган бўлиши мумкин. Бундай ҳолатда кодга тегиш шарт эмас, панелда керакли кенгайтмани ёқиш кифоя. Агар кенгайтмани ўзингиз ёқа олмасангиз, sayt.uz кабинетидан техник ёрдамга тикет ёзинг.

Амалий мисол: Фарғонадаги ресторан сайти

Фарғонадаги рестораннинг сайти example.uz WordPress'да ишлайди ва меню саҳифасида эски слайдер плагини ўрнатилган. Сайт эгаси PHP 7.4 дан 8.3 га ўтди ва бош саҳифа ўрнига "Сайтда жиддий хатолик юз берди" ёзувини кўрди. У биринчи навбатда версияни 7.4 га қайтарди ва сайт дарҳол тикланди. Кейин журналда count(): Argument #1 ($value) must be of type Countable|array, null given хатосини ва слайдер плагини папкасидаги файл йўлини топди.

Плагин бир неча йилдан бери янгиланмаган эди, шунинг учун уни тузатишни кутишнинг маъноси йўқ эди. Сайт эгаси синов нусхасида плагинни ўчириб, ўрнига фаол қўллаб-қувватланадиган бошқа слайдер плагинини ўрнатди ва меню расмларини қайта жойлади. Синов нусхаси 8.3 да хатосиз ишлагач, худди шу ўзгаришлар асосий сайтда қилинди ва PHP яна 8.3 га ўтказилди.

WordPress'да қўшимча воситалар

WordPress фатал хато юз берганда администратор почтасига тиклаш режими ҳаволаси билан хат юборади. Бу ҳавола орқали админ панелга кириб, муаммоли плагинни ўчириш мумкин. Агар хат келмаса, плагинни файл менежери ёки SSH орқали папка номини ўзгартириб ўчирса бўлади, WordPress номи ўзгарган папкадаги плагинни юкламайди:

cd ~/www/example.uz/wp-content/plugins
mv eski-slayder eski-slayder.off

Хатоларни экранга чиқармасдан файлга ёзиш учун wp-config.php файлига қуйидаги қаторларни вақтинча қўшиш мумкин. Хатолар wp-content/debug.log файлига ёзилади. Текширув тугагач бу созламаларни ўчириб қўйинг, чунки журнал файли ташқаридан очилиши мумкин.

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Қайта янгилашдан олдин нимани қилиш керак

Сабаб топилиб тузатилгач, янги версияга шошилмасдан қайта ўтиш керак. Энг ишончли усул аввал синов нусхасида текшириш: сайтни субдоменга, масалан test.example.uz га нусхалаб, унга янги PHP версиясини белгилаш ва асосий саҳифаларни бирма-бир очиб чиқиш. Айниқса форма юбориш, сават, тўлов ва админ панел саҳифаларини текшириш муҳим, чунки хато фақат маълум бир саҳифада чиқиши мумкин.

Шуни ҳам ёдда тутингки, версияни қайтариш фақат вақтинчалик ечим. Эски PHP версиялари хавфсизлик ямоқларини олмайди, шунинг учун сайт ишлаши билан тинчланиб қолмасдан, тузатиш ва қайта янгилаш учун аниқ муддат белгилаш керак.

Ўхшаш мақолалар

🐍 aiogram ботни серверга жойлаш: virtualenv, systemd ва webhook 🔀 cPanel'дан ISPmanager'га кўчиш: файллар, база, почта ва DNS 🖥️ Панел терминали тез узилади: сабаблари ва тўғри SSH уланиш 🔍 Хостингда жой эгаллаётган катта файлларни топиш: буйруқлар ва амалий усуллар
🌐 Тил
🇺🇿 O'zbek 🇺🇿 Ўзбек ✓ 🇷🇺 Русский 🇬🇧 English