Apa Itu Error Ini?
Error:
Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
Artinya: PHP kehabisan memori saat mengeksekusi script, dan melebihi batas maksimal memori (memory_limit
) yang diizinkan dalam konfigurasi PHP.
Penyebab Umum
- File terlalu besar diproses (gambar, CSV, XML, JSON, dll)
- Loop tak terkendali atau rekursi terlalu dalam
- Query database yang menghasilkan data sangat banyak
- Framework/Plugin/Library yang boros memori
- Tidak ada batasan dalam pengolahan data (misalnya membaca seluruh file ke memori sekaligus)
Cara Mengatasinya
1. Tingkatkan Batas Memori di php.ini
Buka file konfigurasi PHP:
memory_limit = 256M
Contoh: ubah dari 128M
ke 512M
Setelah itu, restart web server:
sudo service apache2 restart
# atau
sudo systemctl restart php-fpm
2. Setel memory_limit
di .htaccess (untuk shared hosting)
php_value memory_limit 256M
3. Setel Langsung di Script PHP (darurat atau hanya satu halaman)
ini_set('memory_limit', '256M');
Hanya berpengaruh jika konfigurasi server mengizinkan perubahan ini.
4. Gunakan CLI Flag Saat Menjalankan Script via Terminal
php -d memory_limit=512M script.php
5. Optimalkan Kode
Jika error tetap muncul walau sudah menambah memori, itu tandanya ada masalah dalam kode. Contoh solusi:
-
Jangan load seluruh file ke memori:
// Salah: membaca seluruh file sekaligus $data = file_get_contents("data.csv"); // Benar: baca baris per baris $handle = fopen("data.csv", "r"); while (($line = fgets($handle)) !== false) { // proses baris } fclose($handle);
-
Gunakan
LIMIT
dalam query database - Hindari array besar tak terkendali
-
Gunakan generator (
yield
) untuk pengolahan data besar
0 comments:
Post a Comment