Ketika PO Tidak Tersimpan Tanpa Error: Drama max_input_vars di Laravel
php laravel error
Sebagai developer, kita sering merasa sistem sudah aman kalau:
- API berhasil dipanggil
- Data tersimpan ke database
- Log tidak menunjukkan error
- Sudah berbulan-bulan berjalan lancar di production Aku juga berpikir begitu.
Setup Awalnya Aman Waktu itu aku membuat fitur create PO di Laravel. Flow-nya kira-kira seperti ini:
- User submit data PO (bisa banyak dalam satu request)
- Backend Laravel:
- Nembak API eksternal (POST API)
- Simpan data request ke database
- Simpan juga response API ke database
- Return response ke user
Semua berjalan normal. Naik ke production. Aman. Tidak ada error. Tidak ada komplain.
Berbulan-bulan.
Tiba-Tiba PO Tidak Tersimpan
Suatu hari user bilang: “Mas, aku create PO baru kok nggak ke-save ya?”
Aku coba pakai data dari user tersebut. Dan benar. Tidak tersimpan.
Yang aneh:
- Tidak ada error di log
- Tidak ada exception
- API seperti tidak menerima semua data
Aku mulai curiga. Pola yang Tidak Biasa Yang membedakan request kali ini adalah Data PO yang dikirim banyak sekali. Sekitar 400 PO dalam satu request.
Aku coba reproduce di local. Dan akhirnya muncul warning ini:
PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini.
Nah lo.
Ternyata Masalahnya max_input_vars
Di file php.ini, ada konfigurasi ini:
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000
Kalau tidak diaktifkan, default PHP hanya menerima maksimal 1000 input variables dari:
- GET
- POST
- COOKIE
Bayangkan:
Kalau 1 PO punya 10 field Berarti 400 PO = 4000 field
Jelas tembus batas 1000.
Akibatnya?
PHP diam-diam memotong input setelah 1000 variable.
Tidak error. Tidak exception. Data cuma kepotong.
Dan tentu saja, data yang dikirim ke API juga jadi tidak lengkap.
Solusinya
- Aku aktifkan dan ubah di php.ini: max_input_vars = 5000
- Restart server.
- Test ulang.
Berhasil. PO tersimpan. API menerima data lengkap. Semua kembali normal.
Pelajaran Penting
Error tidak selalu muncul di log.
Kadang bukan bug di Laravel.
Kadang bukan salah logic.
Kadang cuma… konfigurasi server.
Dan yang bikin tricky: Sistem bisa berjalan berbulan-bulan tanpa masalah, sampai suatu hari ada edge case besar yang memicu limit tersembunyi.