0% acharam este documento útil (0 voto)
32 visualizações2 páginas

Estouro de Memória no PHP: Soluções

O erro de estouro de memória no PHP ocorre quando muitos registros são carregados de uma vez, excedendo o limite padrão de 256MB. As soluções incluem aumentar o limite de memória no `php.ini` ou processar registros em lotes usando `chunk()` ou `cursor()` para evitar sobrecarga de memória. Para comandos recorrentes, é recomendado refatorar o código para utilizar essas abordagens de processamento eficiente.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
32 visualizações2 páginas

Estouro de Memória no PHP: Soluções

O erro de estouro de memória no PHP ocorre quando muitos registros são carregados de uma vez, excedendo o limite padrão de 256MB. As soluções incluem aumentar o limite de memória no `php.ini` ou processar registros em lotes usando `chunk()` ou `cursor()` para evitar sobrecarga de memória. Para comandos recorrentes, é recomendado refatorar o código para utilizar essas abordagens de processamento eficiente.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

Esse erro é clássico de **estouro de memória no PHP**.

O Artisan está tentando carregar muitos registros do banco de dados em memória de


uma vez (`fetchAll()`), e o limite padrão de memória (`268435456 bytes = 256MB`)
não foi suficiente.

### Possíveis soluções:

#### 1. Aumentar o limite de memória do PHP

Se o comando realmente precisa processar muitos registros de uma vez:

* No `[Link]` (procure `memory_limit`):

```ini
memory_limit = 1024M
```

* Ou apenas para esse comando:

```bash
php -d memory_limit=1024M artisan messages:replace-signature
```

#### 2. Processar os registros em lotes (mais recomendado)

O problema maior é que o código está usando algo que força `fetchAll()` (carregar
tudo na RAM).
Em Laravel, o ideal é usar **chunking** ou **cursor**:

Exemplo:

```php
// chunk: processa 1000 registros por vez
Message::chunk(1000, function ($messages) {
foreach ($messages as $message) {
// lógica aqui
}
});

// cursor: stream de registros (não carrega tudo na memória)


foreach (Message::cursor() as $message) {
// lógica aqui
}
```

Isso evita que o PHP exploda de memória em tabelas grandes.

#### 3. Debug do comando

Olhe dentro do comando `messages:replace-signature`.


Se estiver usando algo como:

```php
$messages = DB::table('messages')->get();
```

Isso carrega **tudo na RAM**.


Troque por `chunk()` ou `cursor()`.
#### 4. Rodar só em datasets menores

Se for para ambiente de homologação/teste, talvez você possa filtrar:

```php
DB::table('messages')->where('id', '<', 10000)->chunk(1000, function ($msgs) {
...
});
```

---

### Resumindo

* Se for só rodar 1x → aumente a memória com `php -d memory_limit=1024M`.


* Se for recorrente → refatore o comando para `chunk()` ou `cursor()`.

Quer que eu abra o código do teu `messages:replace-signature` e te mostre como


refatorar para usar `chunk()` e não dar mais esse erro?

Você também pode gostar