Esta mensagem de erro está sendo apresentada, alguma sugestão?
Tamanho de memória permitido de 33554432 bytes esgotados (tentou alocar 43148176 bytes) em php
Esta mensagem de erro está sendo apresentada, alguma sugestão?
Tamanho de memória permitido de 33554432 bytes esgotados (tentou alocar 43148176 bytes) em php
Respostas:
Finalmente encontrei a resposta:
Basta adicionar esta linha abaixo à linha antes de você receber erro no seu arquivo
ini_set('memory_limit', '-1');
Vai demorar um uso ilimitado de memória do servidor, está funcionando bem.
Obrigado por dar sugestões aos amigos.
UNLIMITED
.
Aqui estão dois métodos simples para aumentar o limite de hospedagem compartilhada:
Se você tiver acesso ao seu arquivo PHP.ini, altere a linha no PHP.ini. Se sua linha mostra 32M, tente 64M:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Se você não tem acesso ao PHP.ini, tente adicionar isso a um arquivo .htaccess:
php_value memory_limit 64M
Seu script está usando muita memória. Isso geralmente pode acontecer no PHP se você tiver um loop que ficou fora de controle e estiver criando objetos ou adicionando matrizes a cada passagem do loop.
Verifique se há loops infinitos.
Se esse não for o problema, tente ajudar o PHP destruindo objetos com os quais você terminou configurando-os como nulos. por exemplo.$OldVar = null;
Verifique o código onde o erro realmente acontece também. Você esperaria que essa linha alocasse uma quantidade enorme de memória? Caso contrário, tente descobrir o que deu errado ...
Fazendo:
ini_set('memory_limit', '-1');
nunca é bom. Se você deseja ler um arquivo muito grande, é uma boa prática copiá-lo pouco a pouco. Tente o seguinte código para obter as melhores práticas.
$path = 'path_to_file_.txt';
$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );
while (!feof($file)) {
$output .= fread( $file, $len );
}
fclose($file);
echo 'Output is: ' . $output;
while
loop:fclose($file)
Infelizmente, é fácil programar em PHP de uma maneira que consome memória mais rapidamente do que você imagina. Copiar strings, matrizes e objetos em vez de usar referências fará isso, embora o PHP 5 deva fazer isso mais automaticamente do que no PHP 4. Mas lidar com o conjunto de dados completo em várias etapas também é um desperdício, se comparado ao processamento da menor unidade lógica de uma vez. O exemplo clássico está trabalhando com grandes conjuntos de resultados de um banco de dados: a maioria dos programadores busca todo o conjunto de resultados em uma matriz e, em seguida, faz um loop sobre ele uma ou mais vezes foreach()
. É muito mais eficiente na memória usar um while()
loop para buscar e processar uma linha por vez. O mesmo se aplica ao processamento de um arquivo.
Se você quiser ler arquivos grandes, leia-os pouco a pouco em vez de lê-los imediatamente.
É simples: se você ler um arquivo grande de 1 MB ao mesmo tempo, será necessário pelo menos 1 MB de memória ao mesmo tempo para armazenar os dados.
Então você deve lê-los pouco a pouco usando fopen
& fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Eu enfrentei o mesmo problema no php7.2 com o laravel 5.6. Eu apenas aumento a quantidade de variável memory_limit = 128M
no php.ini conforme meus aplicativos exigem. Pode ser 256M / 512M / 1048M ..... Agora funciona bem.
Eu também estava tendo o mesmo problema, procurei arquivos phpinfo.ini, php.ini ou .htaccess sem sucesso. Finalmente, olhei para alguns arquivos php, os abri e verifiquei os códigos dentro de memória. Finalmente, essa solução foi a que eu criei e funcionou para mim. Eu estava usando o wordpress, então esta solução pode funcionar apenas para o problema de limite de tamanho de memória do wordpress. Minha solução, abra o arquivo default-constants.php na pasta / public_html / wp-includes . Abra esse arquivo com o editor de código e encontre as configurações de memória no wp_initial_constants
escopo, ou apenas pressione Ctrl + F para encontrar a palavra "memória". Lá você virá WP_MEMORY_LIMIT
e WP_MAX_MEMORY_LIMIT
. Apenas aumente, foram 64 MB no meu caso, eu aumentei para 128 MB e depois para 200 MB.
// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MEMORY_LIMIT', $current_limit );
} elseif ( is_multisite() ) {
define( 'WP_MEMORY_LIMIT', '200M' );
} else {
define( 'WP_MEMORY_LIMIT', '128M' );
}
}
if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} else {
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
}
}
Aliás, não faça o seguinte código, porque isso é uma prática ruim:
ini_set('memory_limit', '-1');
wp-config.php
, onde eles não serão substituídos por futuras atualizações do WordPress. Além disso, alguns plugins de segurança (como o WordFence, por exemplo) irão reclamar se os arquivos do WordPress 'principais' forem alterados ...
wp-config.php
e adicionar as duas linhas lá ( ou seja, define( 'WP_MEMORY_LIMIT', '200M' );
e define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. Diferentemente dos arquivos no WP 'principal' (ou seja, tudo abaixo wp-includes
), que serão substituídos pelas atualizações do WP, wp-config.php
não - ele está exatamente para o objetivo exato de substituir as constantes WP!
-1
é bom para processos de execução curta. Por exemplo, um container php builder usado para executar testes de unidade ou instalações do compositor / etc. Só não gere seu site de produção com esse conjunto definido.
Você pode aumentar a memória permitida para o script php executando a seguinte linha acima de todos os códigos no script:
ini_set('memory_limit','-1'); // enabled the full memory available.
E também aloque as variáveis indesejadas no script.
Confira esta biblioteca php: Liberando memória com PHP
Percebo que muitas respostas apenas tentam aumentar a quantidade de memória dada a um script que tem seu lugar, mas na maioria das vezes isso significa que algo está sendo muito liberal com a memória devido a uma quantidade imprevista de volume ou tamanho. Obviamente, se você não é o autor de um script, está à mercê do autor, a menos que se sinta ambicioso :) Os documentos do PHP dizem mesmo que problemas de memória são devidos a " scripts mal escritos "
Deve-se mencionar que ini_set('memory_limit', '-1');
(sem limite) pode causar instabilidade no servidor como 0 bytes free = bad things
. Em vez disso, encontre um equilíbrio razoável entre o que seu script está tentando fazer e a quantidade de memória disponível em uma máquina.
Uma abordagem melhor: se você é o autor do script (ou ambicioso), pode depurar esses problemas de memória com o xdebug . A versão mais recente (2.6.0 - lançada em 2018-01-29) trouxe de volta o perfil de memória que mostra quais chamadas de função estão consumindo grandes quantidades de memória. Ele expõe problemas no script que são difíceis de encontrar. Geralmente, as ineficiências estão em um loop que não está esperando o volume que está recebendo, mas cada caso será deixado como um exercício para o leitor :)
A documentação do xdebug é útil, mas se resume a três etapas:
apt-get
e yum
etcxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Se você estiver tentando ler um arquivo, isso ocupará memória em PHP. Por exemplo, se você estiver tentando abrir e ler um arquivo MP3 (como, por exemplo, $ data = file (" http://mydomain.com/path/sample.mp3 ")), ele armazenará tudo na memória .
Como Nelson sugere, você pode trabalhar para aumentar seu limite máximo de memória se realmente precisar usar tanta quantidade de memória.
Tivemos uma situação semelhante e testamos as respostas no topo das respostas ini_set ('memory_limit', '-1'); e tudo funcionou bem, arquivos de imagens compactadas maiores que 1 MB em KBs.
Se você estiver usando uma hospedagem compartilhada, não poderá aplicar o incremento no limite de tamanho do php.
Basta ir ao seu cpanel e atualizar sua versão php para 7.1 e acima, então você está pronto para começar.
usuários wordpress adicionar linha:
@ini_set('memory_limit', '-1');
em wp-settings.php, que você pode encontrar na pasta raiz instalada do wordpress
Eu tive o mesmo problema que executando php na linha de comando. Recentemente, alterei o arquivo php.ini e cometi um erro ao alterar o php.ini
Isto é para php7.0
caminho para o php.ini onde cometi um erro:
/etc/php/7.0/cli/php.ini
Eu havia definido memory_limit = 256
(o que significa 256 bytes
) em
vez de memory_limit = 256M
(o que significa 256 Mega bytes
).
; Quantidade máxima de memória que um script pode consumir (128 MB)
; http://php.net/memory-limit
memory_limit = 128M
Depois de corrigi-lo, meu processo começou a funcionar bem.
Execute este comando no diretório raiz do Magento php -d memory_limit=4G bin/magento
se você estiver usando laravel, use estas maneiras
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
ao invés de
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}