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
php
memory-management
memory-limit
panidarapu
fonte
fonte
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.
fonte
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
fonte
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 ...
fonte
Fazendo:
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.
fonte
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 umwhile()
loop para buscar e processar uma linha por vez. O mesmo se aplica ao processamento de um arquivo.fonte
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
.fonte
$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.fonte
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
eWP_MAX_MEMORY_LIMIT
. Apenas aumente, foram 64 MB no meu caso, eu aumentei para 128 MB e depois para 200 MB.Aliás, não faça o seguinte código, porque isso é uma prática ruim:
fonte
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' );
edefine( 'WP_MAX_MEMORY_LIMIT', '256M' );
. Diferentemente dos arquivos no WP 'principal' (ou seja, tudo abaixowp-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:
E também aloque as variáveis indesejadas no script.
Confira esta biblioteca php: Liberando memória com PHP
fonte
fonte
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 como0 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
eyum
etcxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
fonte
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.
fonte
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.
fonte
Escrever
ini_set('memory_limit', '-1');
no seu index.php na parte superior após a abertura da tag php
fonte
Eu estava recebendo a mesma mensagem de erro depois de mudar para um novo tema no Wordpress. O PHP estava executando a versão 5.3, então mudei para 7.2. Isso corrigiu o problema.
fonte
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.
fonte
usuários wordpress adicionar linha:
@ini_set('memory_limit', '-1');
em wp-settings.php, que você pode encontrar na pasta raiz instalada do wordpress
fonte
Eu não havia renovado minha hospedagem e o banco de dados era somente leitura. O Joomla precisava escrever a sessão e não conseguiu.
fonte
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
Eu havia definido
memory_limit = 256
(o que significa256 bytes
) emvez de
memory_limit = 256M
(o que significa256 Mega bytes
).Depois de corrigi-lo, meu processo começou a funcionar bem.
fonte
Execute este comando no diretório raiz do Magento
php -d memory_limit=4G bin/magento
fonte
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 }
fonte