Questo messaggio di errore è stato presentato, qualche suggerimento?
Dimensione della memoria consentita di 33554432 byte esauriti (tentato di allocare 43148176 byte) in php
Questo messaggio di errore è stato presentato, qualche suggerimento?
Dimensione della memoria consentita di 33554432 byte esauriti (tentato di allocare 43148176 byte) in php
Risposte:
Alla fine ho trovato la risposta:
Basta aggiungere questo sotto la riga prima della riga di errore nel file
ini_set('memory_limit', '-1');
Ci vorrà un utilizzo illimitato della memoria del server, funziona benissimo.
Grazie per aver suggerito amici.
UNLIMITED
.
Ecco due semplici metodi per aumentare il limite di hosting condiviso:
Se hai accesso al tuo file PHP.ini, cambia la linea in PHP.ini Se la tua linea mostra 32M prova 64M:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Se non hai accesso a PHP.ini prova ad aggiungere questo a un file .htaccess:
php_value memory_limit 64M
Lo script utilizza troppa memoria. Questo può accadere spesso in PHP se hai un loop che è fuori controllo e stai creando oggetti o aggiungendo array ad ogni passaggio del loop.
Verifica la presenza di loop infiniti.
Se questo non è il problema, prova ad aiutare PHP distruggendo gli oggetti con cui hai finito impostandoli su null. per esempio.$OldVar = null;
Controlla anche il codice in cui si verifica l'errore. Ti aspetteresti che quella linea stia allocando una grande quantità di memoria? In caso contrario, prova a capire cosa è andato storto ...
Fare:
ini_set('memory_limit', '-1');
non è mai buono. Se si desidera leggere un file molto grande, è consigliabile copiarlo bit per bit. Prova il seguente codice per le migliori pratiche.
$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
ciclo:fclose($file)
Sfortunatamente è facile programmare in PHP in un modo che consuma memoria più velocemente di quanto pensiate. Copiare stringhe, array e oggetti invece di usare i riferimenti lo farà, anche se PHP 5 dovrebbe farlo in modo più automatico rispetto a PHP 4. Ma gestire l'intero set di dati su più passaggi è anche dispendioso rispetto all'elaborazione dell'unità logica più piccola Al tempo. L'esempio classico sta lavorando con set di risultati di grandi dimensioni da un database: la maggior parte dei programmatori recupera l'intero gruppo di risultati in un array e quindi lo esegue il ciclo uno o più volte con foreach()
. È molto più efficiente della memoria utilizzare un while()
loop per recuperare ed elaborare una riga alla volta. Lo stesso vale per l'elaborazione di un file.
Se vuoi leggere file di grandi dimensioni, dovresti leggerli bit per bit invece di leggerli contemporaneamente.
È semplice matematica: se leggi un file di grandi dimensioni da 1 MB alla volta, sono necessari almeno 1 MB di memoria contemporaneamente per conservare i dati.
Quindi dovresti leggerli poco a poco usando fopen
& fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Ho riscontrato lo stesso problema in php7.2 con laravel 5.6. Ho solo aumentare la quantità di variabili memory_limit = 128M
in php.ini come richiedono le mie applicazioni. Potrebbe essere 256 M / 512 M / 1048 M ..... Ora funziona benissimo.
Avevo anche lo stesso problema, ho cercato inutilmente i file phpinfo.ini, php.ini o .htaccess. Finalmente ho guardato alcuni file php, li ho aperti e ho controllato i codici all'interno per la memoria. Finalmente questa soluzione è stata quella con cui sono uscito e ha funzionato per me. Stavo usando wordpress, quindi questa soluzione potrebbe funzionare solo per il problema del limite della dimensione della memoria di wordpress. La mia soluzione, apri il file default-constants.php nella cartella / public_html / wp-Includes . Apri quel file con l'editor di codice e trova le impostazioni di memoria nell'ambito wp_initial_constants
, o semplicemente Ctrl + F per trovare la parola "memoria". Lì verrai WP_MEMORY_LIMIT
e WP_MAX_MEMORY_LIMIT
. Basta aumentarlo, nel mio caso era di 64 MB, l'ho aumentato a 128 MB e poi a 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' );
}
}
A proposito, per favore non fare il seguente codice, perché è una cattiva pratica:
ini_set('memory_limit', '-1');
wp-config.php
, dove non verranno sovrascritti da futuri aggiornamenti di WordPress. Inoltre, alcuni plugin di sicurezza (come WordFence, ad esempio) si lamenteranno se i file 'core' di WordPress vengono modificati ...
wp-config.php
. E aggiungere le due linee di là (i .e define( 'WP_MEMORY_LIMIT', '200M' );
e define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. A differenza dei file sul 'core' WP (vale a dire, tutto sotto wp-includes
), che saranno sovrascritti dagli aggiornamenti WP, wp-config.php
non lo farà - è lì proprio per lo scopo esatto di ignorare le costanti WP!
-1
va bene per i processi di breve durata. Ad esempio un contenitore builder php utilizzato per eseguire unit test o installazioni del compositore / ecc. Basta non gestire il tuo sito di produzione con esso impostato in questo modo.
Puoi aumentare la memoria consentita allo script php eseguendo la seguente riga sopra tutti i codici nello script:
ini_set('memory_limit','-1'); // enabled the full memory available.
E anche allocare le variabili indesiderate nello script.
Controlla questa libreria php: liberare memoria con PHP
Noto che molte risposte provano solo ad aumentare la quantità di memoria data a una sceneggiatura che ha il suo posto, ma il più delle volte significa che qualcosa è troppo liberale con la memoria a causa di una quantità imprevista di volume o dimensioni. Ovviamente se non sei l'autore di una sceneggiatura sei in balia dell'autore a meno che non ti senta ambizioso :) I documenti di PHP affermano anche che i problemi di memoria sono dovuti a " script scritti male "
Va detto che ini_set('memory_limit', '-1');
(nessun limite) può causare instabilità del server come 0 bytes free = bad things
. Trova invece un equilibrio ragionevole tra ciò che lo script sta cercando di fare e la quantità di memoria disponibile su una macchina.
Un approccio migliore: se sei l'autore dello script (o ambizioso) puoi eseguire il debug di tali problemi di memoria con xdebug . L'ultima versione (2.6.0 - rilasciata il 29-01-2018) ha riportato alla memoria il profilo che mostra quali chiamate di funzione consumano grandi quantità di memoria. Espone problemi nello script che altrimenti sarebbero difficili da trovare. Di solito, le inefficienze sono in un ciclo che non si aspetta il volume che sta ricevendo, ma ogni caso verrà lasciato come esercizio al lettore :)
La documentazione di xdebug è utile, ma si riduce a 3 passaggi:
apt-get
eyum
eccxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Se stai provando a leggere un file, questo occuperà memoria in PHP. Ad esempio, se stai tentando di aprire e leggere un file MP3 (come, ad esempio, $ data = file (" http://mydomain.com/path/sample.mp3 "), verrà tutto nella memoria .
Come suggerisce Nelson, puoi lavorare per aumentare il limite massimo di memoria se devi effettivamente utilizzare tanta memoria.
Abbiamo avuto una situazione simile e abbiamo provato dato in cima alle risposte ini_set ('memory_limit', '-1'); e tutto ha funzionato bene, file di immagini compressi superiori a 1 MB a KB.
Se stai utilizzando un hosting condiviso, non sarai in grado di applicare l'incremento nel limite di dimensioni php.
Vai sul tuo pannello e aggiorna la tua versione php alla versione 7.1 e successive, allora sei a posto.
gli utenti di wordpress aggiungono una riga:
@ini_set('memory_limit', '-1');
in wp-settings.php che puoi trovare nella cartella principale installata di wordpress
Ho avuto lo stesso problema con PHP in esecuzione nella riga di comando. Di recente, ho modificato il file php.ini e ho commesso un errore durante la modifica di php.ini
Questo è per php7.0
percorso a php.ini in cui ho commesso un errore:
/etc/php/7.0/cli/php.ini
Avevo impostato memory_limit = 256
(che significa 256 bytes
)
invece di memory_limit = 256M
(che significa 256 Mega bytes
).
; Quantità massima di memoria che uno script può consumare (128 MB)
; http://php.net/memory-limit
memory_limit = 128M
Una volta corretto, il mio processo ha iniziato a funzionare correttamente.
Esegui questo comando nella directory principale di Magento php -d memory_limit=4G bin/magento
se stai usando laravel, usa questi modi
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
invece di
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}