Volver a la página principal
lunes 15 julio 2024
134

Cómo solucionar el error de PHP "Fatal error: Allowed memory size of 134217728 bytes exhausted"

Causas comunes del error

1. Límite de memoria insuficiente: El límite de memoria establecido en la configuración de PHP es demasiado bajo para las necesidades del script.

2. Scripts ineficientes: Scripts que consumen mucha memoria debido a bucles excesivos o manejo ineficiente de datos.

3. Carga de datos grandes: Manejo de grandes cantidades de datos en una sola operación.

4. Fugas de memoria: Uso incorrecto de la memoria en el script que lleva a un consumo excesivo.

Soluciones

1. Aumentar el límite de memoria en la configuración de PHP

Puedes aumentar el límite de memoria en el archivo de configuración php.ini. Busca la línea memory_limit y ajusta el valor.

  • Abre el archivo php.ini:
  • Linux:
sudo nano /etc/php/7.x/apache2/php.ini  # Reemplaza 7.x con tu versión de PHP
  • Windows:
  • Abre C:\xampp\php\php.ini (o la ubicación correspondiente según tu instalación).
  • Encuentra y modifica la línea:
memory_limit = 256M  # Aumenta el límite a 256MB (o el valor que necesites)
  • Guarda el archivo y reinicia el servidor web:
  • Linux:
sudo service apache2 restart
  • Windows:
  • Reinicia Apache desde el panel de control de XAMPP o la herramienta que estés utilizando.

2. Aumentar el límite de memoria en el script PHP

Puedes aumentar el límite de memoria dentro del propio script PHP utilizando la función ini_set.

ini_set('memory_limit', '256M');  // Aumenta el límite a 256MB

Coloca esta línea al inicio del script que está causando el problema.

3. Optimizar el script PHP

Revisa y optimiza tu script para asegurar que no está consumiendo más memoria de la necesaria.

  • Evita bucles innecesarios:
// Ineficiente
  for ($i = 0; $i < 1000000; $i++) {
      $array[] = $i;
  }

  // Más eficiente
  $array = range(0, 999999);
  • Usa paginación para manejar grandes cantidades de datos:

En lugar de cargar todos los datos en memoria a la vez, carga solo lo necesario utilizando paginación.

$limit = 100;
  $offset = 0;

  while ($data = fetchData($limit, $offset)) {
      process($data);
      $offset += $limit;
  }

4. Verificar fugas de memoria

Asegúrate de que no hay fugas de memoria en tu script.

  • Liberar memoria innecesaria:

Usa unset para liberar variables que ya no necesitas.

$data = fetchData();
  process($data);
  unset($data);  // Libera la memoria ocupada por $data

5. Verificar configuraciones específicas del servidor web

Algunos servidores web tienen configuraciones específicas que pueden limitar el uso de memoria. Asegúrate de revisar la configuración de tu servidor web (Apache, Nginx, etc.) para asegurarte de que no hay restricciones adicionales.

Ejemplo de solución paso a paso

Supongamos que tienes el siguiente script que causa el error:

$data = file_get_contents('largefile.txt');
processData($data);

1. Aumentar el límite de memoria en el script:

ini_set('memory_limit', '256M');
   $data = file_get_contents('largefile.txt');
   processData($data);

2. Optimizar el script:

Si largefile.txt es demasiado grande para cargarlo todo en memoria, considera procesarlo en partes:

$handle = fopen('largefile.txt', 'r');
   if ($handle) {
       while (($line = fgets($handle)) !== false) {
           processLine($line);
       }
       fclose($handle);
   } else {
       // Error al abrir el archivo
   }

3. Reiniciar el servidor web:

Después de cambiar la configuración de php.ini, reinicia el servidor web:

  • Linux:
sudo service apache2 restart
  • Windows:

Reinicia Apache desde el panel de control de XAMPP.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer