Saytning admin panelida katta fotosurat, PDF katalog yoki plagin arxivini yuklamoqchi bo'lsangiz, ba'zan "Fayl hajmi ruxsat etilganidan katta" degan xabar chiqadi, ba'zan esa forma hech qanday xatosiz shunchaki bo'sh qaytadi. Ikkala holatda ham sabab ko'pincha PHP'ning fayl yuklash chegaralarida. Bu chegaralar bir nechta va ular bir-biriga bog'liq, shuning uchun faqat bittasini oshirish ko'pincha natija bermaydi. Quyida har bir parametr nimani boshqarishini va ularni qanday birgalikda sozlashni tushuntiramiz.
Fayl yuklashni qaysi sozlamalar cheklaydi
Asosiy parametr upload_max_filesize. U bitta yuklanayotgan faylning eng katta hajmini belgilaydi va PHP'ning standart qiymati atigi 2 MB. Ikkinchi parametr post_max_size butun POST so'rovining hajmini cheklaydi, ya'ni formadagi barcha fayllar va matn maydonlari yig'indisini. Uning standart qiymati 8 MB. Uchinchisi max_file_uploads bitta so'rovda nechta fayl yuklash mumkinligini belgilaydi, standart holatda 20 ta.
Bu parametrlar o'rtasida mantiqiy tartib bor: post_max_size har doim upload_max_filesize dan katta bo'lishi kerak, chunki fayl so'rovning bir qismi. Agar bir formada bir nechta fayl yuborilsa, post_max_size ularning umumiy hajmini sig'dira olishi lozim. PHP hujjatlarida memory_limit ham odatda post_max_size dan katta bo'lishi tavsiya etiladi. Fayl yuklash vaqti uzoq bo'lsa, max_input_time va max_execution_time ham ahamiyatga ega bo'ladi.
| Parametr | Nimani cheklaydi | Standart qiymat |
|---|---|---|
upload_max_filesize | Bitta fayl hajmi | 2M |
post_max_size | Butun so'rov hajmi | 8M |
max_file_uploads | Bir so'rovdagi fayllar soni | 20 |
Hosting provayderlari odatda bu qiymatlarni standartdan kattaroq qilib qo'yadi, shuning uchun aniq raqamni o'z saytingizda tekshirib ko'rish kerak.
Nega forma xatosiz bo'sh qaytadi
Eng chalkash holat so'rov post_max_size dan oshib ketganda yuz beradi. Bunda PHP so'rovni umuman qayta ishlamaydi: $_POST va $_FILES massivlari bo'sh keladi va ilova foydalanuvchiga tushunarli xato ko'rsata olmaydi. Natijada sahifa shunchaki yangilanadi, kiritilgan ma'lumot yo'qoladi. Log faylida esa quyidagiga o'xshash ogohlantirish qoladi:
PHP Warning: POST Content-Length of 52428800 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
Fayl upload_max_filesize dan katta, lekin post_max_size dan kichik bo'lsa, vaziyat aniqroq. So'rov qabul qilinadi, lekin fayl saqlanmaydi va $_FILES['file']['error'] qiymati UPLOAD_ERR_INI_SIZE (1) bo'ladi. Yaxshi yozilgan ilova shu kodni tekshirib, foydalanuvchiga hajm chegarasi haqida xabar beradi:
if ($_FILES['file']['error'] === UPLOAD_ERR_INI_SIZE) {
echo 'Fayl juda katta. Ruxsat etilgan hajm: ' . ini_get('upload_max_filesize');
}
413 Request Entity Too Large: veb-server chegarasi
PHP sozlamalarini oshirgandan keyin ham katta fayl yuklanmasa va brauzer 413 Request Entity Too Large sahifasini ko'rsatsa, so'rovni PHP'ga yetib bormasdan veb-server rad etgan. Nginx'da buni client_max_body_size parametri boshqaradi va uning standart qiymati 1 MB. Apache'da shunga o'xshash vazifani LimitRequestBody bajaradi. Umumiy hostingda bu server sozlamalari odatda mijoz qo'lida emas, shuning uchun bunday holatda texnik yordamga murojaat qilish kerak. O'z VPS serveringizda esa Nginx konfiguratsiyasiga qiymat qo'shib, xizmatni qayta yuklaysiz:
# /etc/nginx/conf.d/example.uz.conf, server bloki ichida
client_max_body_size 64m;
sudo nginx -t && sudo systemctl reload nginx
Sozlamalarni qayerda o'zgartirish mumkin
Umumiy hostingda eng oson yo'l hosting panelidagi PHP sozlamalari. ISPmanager panelida sayt uchun upload_max_filesize va post_max_size qiymatlarini o'zgartirish mumkin, sayt.uz mijozlari panelga sayt.uz kabinetidan kiradi. PHP FPM yoki CGI rejimida ishlasa, sayt papkasidagi .user.ini fayli ham ishlaydi. Ikkala parametrni ham birga o'zgartirishni unutmang:
; .user.ini
upload_max_filesize = 64M
post_max_size = 72M
max_execution_time = 120
Bu parametrlarni kod ichida ini_set() bilan o'zgartirib bo'lmaydi. Sababi oddiy: PHP so'rovni skript ishga tushishidan oldin qabul qiladi va chegara shu bosqichda tekshiriladi, skript esa juda kech ishga tushadi. .htaccess dagi php_value esa faqat PHP Apache moduli sifatida ishlaganda ishlaydi, boshqa rejimlarda 500 xatoga olib keladi.
O'zgarishdan keyin natijani tekshirish uchun WordPress'da "Media" bo'limidagi yuklash oynasida ko'rsatilgan "Maksimal yuklash hajmi" yozuviga qarang. Boshqa saytlarda ini_get('upload_max_filesize') qiymatini chiqaradigan vaqtinchalik skript yetarli.
Misol: Buxorodagi kollej va ma'ruza videolari
Buxorodagi kasb-hunar kolleji misol.uz saytida o'qituvchilar uchun materiallar bo'limi bor. O'qituvchilar 5-10 MB lik PDF taqdimotlarni muammosiz yuklashardi, lekin 300 MB lik ma'ruza videosini yuklamoqchi bo'lishganda sahifa uzoq kutib, keyin bo'sh holatda qaytgan. Tekshiruv post_max_size 64 MB ekanini ko'rsatdi. Bu yerda chegarani 300 MB dan oshirish to'g'ri yechim bo'lmadi: sekin internet bilan bunday yuklash bir necha daqiqa davom etadi, uzilsa boshidan boshlash kerak bo'ladi va server resurslari band bo'ladi. Shuning uchun PDF fayllar uchun chegara 64 MB qoldirildi, videolar esa video platformaga joylanib, saytga faqat o'sha videoning havolasi va pleyeri qo'shiladigan bo'ldi.
Juda katta fayllar uchun boshqa yo'llar
Yuz megabaytlab yoki gigabaytlab fayllarni brauzer formasi orqali yuklash yaxshi g'oya emas. Buning o'rniga quyidagi usullardan foydalanish ancha ishonchli:
- FTP yoki SFTP orqali yuklash: FileZilla yoki WinSCP kabi dasturlar uzilgan yuklashni davom ettira oladi.
- Hosting panelining fayl menejeri orqali arxivni yuklab, so'ng serverning o'zida ochish.
- Katta faylni bo'laklarga bo'lib yuklaydigan (
chunked upload) plaginlar yoki kutubxonalar. - Videolar uchun maxsus video platformalar, chunki ular videoni turli sifatlarda tayyorlab beradi va hosting trafigini tejaydi.
Chegaralarni belgilashda saytingiz amalda qanday fayllar bilan ishlashidan kelib chiqing. Rasmlar va hujjatlar uchun 32-64 MB odatda yetarli, undan kattasi uchun esa yuqoridagi muqobil yo'llar xavfsizroq. Haddan tashqari katta chegara yomon niyatli foydalanuvchiga serverni katta so'rovlar bilan band qilish imkonini ham beradi.