Vraag Toegestane geheugengrootte van 33554432 bytes uitgeput (geprobeerd om 43148176 bytes toe te wijzen) in php


Deze foutmelding wordt gepresenteerd, eventuele suggesties?

Toegestane geheugengrootte van 33554432 bytes uitgeput (geprobeerd toe te wijzen   43148176 bytes) in php


225
2018-01-06 08:18


oorsprong


antwoorden:


Eindelijk vond ik het antwoord:

Voeg gewoon deze onderstaande regel toe aan de regel voordat u een foutmelding krijgt in uw bestand

ini_set('memory_limit', '-1');

Het kost onbeperkt geheugengebruik van de server, het werkt prima.

Bedankt voor het geven van suggesties aan vrienden.


272
2018-01-10 03:38



Hier zijn twee eenvoudige methoden om de limiet op shared hosting te verhogen:

  1. Als u toegang heeft tot uw PHP.ini-bestand, wijzigt u de regel in PHP.ini Als je regel 32M toont, probeer dan 64M: memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)

  2. Als je geen toegang hebt tot PHP.ini probeer dan dit toe te voegen aan een .htaccess-bestand: php_value memory_limit 64M


47
2018-03-10 01:52



Je script gebruikt te veel geheugen. Dit kan vaak in PHP gebeuren als je een loop hebt die niet meer onder controle is en je objecten aan het maken bent of aan arrays toevoegt tijdens elke passage van de lus.

Controleer op oneindige lussen.

Als dat niet het probleem is, probeer dan PHP te helpen door objecten waar je klaar mee bent te vernietigen door ze op nul te zetten. bv. $OldVar = null;

Controleer de code waar de fout ook daadwerkelijk plaatsvindt. Zou je verwachten dat die lijn een enorme hoeveelheid geheugen toewijst? Zo niet, probeer uit te zoeken wat er mis is gegaan ...


38
2018-01-06 08:27



Aan het doen :

ini_set('memory_limit', '-1');

is nooit goed. Als je een heel groot bestand wilt lezen, is het een goede gewoonte om het stukje bij beetje te kopiëren. Probeer de volgende code voor de beste werkwijze.

$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;

28
2018-03-07 12:55



Het is helaas eenvoudig om in PHP te programmeren op een manier die sneller geheugen gebruikt dan je denkt. Het kopiëren van tekenreeksen, arrays en objecten in plaats van het gebruiken van referenties zal het doen, hoewel PHP 5 dit meer zou moeten doen dan in PHP 4. Maar het omgaan met je dataset in zijn geheel in meerdere stappen is ook verspilling vergeleken met het verwerken van de kleinste logische eenheid tegelijkertijd. Het klassieke voorbeeld is het werken met grote resultaten uit een database: de meeste programmeurs halen de volledige resultaatset in een array en lopen er een of meerdere keren overheen met foreach(). Het is veel efficiënter om een ​​a. Geheugen te gebruiken while() om één rij tegelijk op te halen en te verwerken. Hetzelfde geldt voor het verwerken van een bestand.


15
2018-01-06 22:22



Als u grote bestanden wilt lezen, moet u ze stukje bij beetje lezen in plaats van ze in één keer te lezen.
Het is eenvoudige wiskunde: als je een groot bestand van 1 MB in één keer leest, is er tegelijkertijd ten minste 1 MB geheugen nodig om de gegevens te bewaren.

Dus je zou ze beetje bij beetje moeten lezen met fopen & fread.


13
2018-01-22 10:00



U kunt het toegestane geheugen voor php-script verhogen door de volgende regel boven alle codes in het script uit te voeren:

ini_set('memory_limit','-1'); // enabled the full memory available.

En ook de ongewenste variabelen toewijzen in het script.

Controleer deze php-bibliotheek: Geheugen vrijmaken met PHP


6
2017-11-19 07:26



Ik had ook hetzelfde probleem, ik zocht naar phpinfo.ini, php.ini of .htaccess-bestanden. Eindelijk heb ik een aantal php-bestanden bekeken, deze geopend en de codes voor geheugen gecontroleerd. Eindelijk was deze oplossing waar ik mee uit kwam en het werkte voor mij. Ik gebruikte WordPress, dus deze oplossing werkt mogelijk alleen voor WordPress-limiet geheugen. Mijn oplossing, open default-constants.php bestand in / Public_html / wp-includes map. Open dat bestand met de code-editor en zoek geheugeninstellingen onder wp_initial_constants bereik, of gewoon Ctrl + F om het woord "geheugen" te vinden. Daar kom je dan WP_MEMORY_LIMIT en WP_MAX_MEMORY_LIMIT. Gewoon verhogen, het was 64 MB in mijn geval, ik verhoogde het naar 128 MB en vervolgens naar 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' );
    }
}

Btw, doe alsjeblieft niet de volgende code, want dat is een slechte gewoonte:

ini_set('memory_limit', '-1');

4
2018-01-04 21:17



Als u een bestand probeert te lezen, neemt het geheugen in PHP in beslag. Als u bijvoorbeeld een MP3-bestand probeert te openen en te lezen (zoals, laten we zeggen, $ data = bestand ("http://mydomain.com/path/sample.mp3") het zal het allemaal in het geheugen trekken.

Zoals Nelson suggereert, kun je eraan werken om je maximale geheugenlimiet te verhogen als je echt zoveel geheugen moet gebruiken.


2
2018-01-06 08:32



We hadden een vergelijkbare situatie en we probeerden de antwoorden bovenaan de antwoorden ini_set ('memory_limit', '-1'); en alles werkte goed, gecomprimeerde afbeeldingen groter dan 1 MB naar KB's.


2
2017-12-23 06:43