56

I was going crazy with this.

I got the next message:

Allowed memory size of 262144 bytes exhausted (tried to allocate 24576 bytes)

TODO LIST

Check phpinfo(), got the right php.ini route and edit it. Change memory_limit to

memory_limit = 128M

Make sure the value memory_limit changes con phpinfo() with the result:

memory_limit    128MB   128MB

Check .htaccess and added (not needed)

php_value memory_limit 128M

And also to change it via php like so (before error line):

ini_set('memory_limit','128M');

It says everywhere that memory is set to 128M, but still get that error?

The error is in Swift library (library for sending emails), in abstractSmtpTransport.php, so it's not my code int's suposed to work.

Any ideas???

Edit: Yes, the previous was done restarting apache.

EDIT 2: @patrick, added that but nothing was echoed

Tryed with lower value, 28M int every file, restarted apache, same error (phpinfo showed new value)

tried with -1, restarting, and same error.

EDIT 3: isn't it weird that allowed memory is bigger than allocated memory? (despite the fact that allowed memory size is way below real allowed memory asigned)

monxas
  • 2,475
  • 2
  • 20
  • 36
  • 6
    just to double check - you restarted apache after the changes, right? – raidenace Apr 23 '13 at 17:07
  • what if you try a lower value, say 1M? – eis Apr 23 '13 at 17:08
  • 2
    Some killing recursion? – Bogdan Burym Apr 23 '13 at 17:08
  • Also, you updated the right config files, right? You will find similar ini files in apache, php etc – Kai Qing Apr 23 '13 at 17:08
  • @KaiQing I would imagine he did if it is showing up on phpinfo – eis Apr 23 '13 at 17:09
  • Can you insert the following line of code right before this is going wrong? `echo ini_get('display_errors');` – Patrick Kostjens Apr 23 '13 at 17:10
  • 2
    Try to give memory limit to `-1` (maximum) if you still get the same error that means something definitely goes wrong in code. May be a infinite loop. – Rikesh Apr 23 '13 at 17:11
  • If the amount is too big for PHP to handle, it won't affect anything. That is why I proposed testing with a lower value. – eis Apr 23 '13 at 17:14
  • I just ran into something similar lately: I had a JSON array I was iterating through, but my for loop was iterating through the array itself instead of `count($array)`. Could it be in a loop that calls the Swift library? – fearmint Apr 23 '13 at 17:16

10 Answers10

149

I see my problem is a little bit different from yours, but I'll post this answer in case it helps someone else. I was using MB as shorthand instead of M when defining my memory_limit, and php was silently ignoring it. I changed it to an integer (in bytes) and the problem was solved.

My php.ini changed as follows: memory_limit = 512MB to memory_limit = 536870912. This fixed my problem. Hope it helps with someone else's! You can read up on php's shorthand here.

Edit

As Yaodong points out, you can just as easily use the correct shorthand, "M", instead of using byte values. I changed mine to byte values for debugging purposes and then didn't bother to change it back.

starball
  • 20,030
  • 7
  • 43
  • 238
kael
  • 6,585
  • 5
  • 21
  • 27
  • 9
    +1. I couldn't do +10. How many people must this have caught out over the years? PHP needs to be a little more user friendly – Wandering Zombie Jun 14 '13 at 16:26
  • +1 for using M instead of MB or bytes. Much more readable and you don't have to use any converter just to change the limit. – Victor Bjelkholm Sep 23 '14 at 08:03
  • Haha, yes, I'll +1 that, too. I was just in debug mode and hadn't come back into normal production thinking yet. – kael Nov 30 '14 at 06:06
  • 4
    @WanderingZombie PHP must die already, who the hell uses M for MB? Sorry, it has been more than a year since you posted, but I cannot keep it in. + Their comment is gives an example `(128MB)`, very thankful indeed. – mehmetminanc Dec 05 '14 at 00:37
  • Thank you very much for this...Was driving me crazy for hours trying to figure out why phpmyadmin wouldn't load. – Carl Weis Aug 22 '15 at 03:43
  • 2
    Yeah, the real problem is that their example itself is invalid! – wizonesolutions Dec 07 '15 at 09:05
13

The value of 262,144 bytes is the key to the diagnosis. You'll see this magic number pop up in PHP questions all over the place. Why? Because that is the value PHP will end up with as its memory limit if you attempt to update the limit with a value it can't use. An empty string will produce this memory limit, as will an incorrect unit notation like '128MB' instead of the correct '128M'.

262,144 bytes is exactly 256 Kibibytes. Why PHP runs home to that value when it gets confused is beyond me.

isn't it weird that allowed memory is bigger than allocated memory?

The allocated amount shown is just the most recent allocation attempt, the one that ran afoul of the memory limit. See Allowed memory size in PHP when allocating less.

Community
  • 1
  • 1
Ethan
  • 642
  • 7
  • 15
2

See if this answer can help you. Particularly the fact that CLI ini could be different than when the script is running through a browser.

Allowed memory size of X bytes exhausted

Community
  • 1
  • 1
Tuan
  • 1,476
  • 13
  • 23
  • Nope, not any ini set in my code, only the one i'm using to try to raise it up, without success – monxas Apr 23 '13 at 17:28
2

In my case neither M or G helped, so I have converted allocated memory to bytes using: https://www.gbmb.org/mb-to-bytes

4096M = 4294967296

php.ini:

memory_limit = 4294967296

Pratik Patel
  • 2,209
  • 3
  • 23
  • 30
1

I was trying to up the limit Wordpress sets on media uploads. I followed advice from some blog I’m not going to mention to raise the limit from 64MB to 2GB.

I did the following:

Created a (php.ini) file in WP ADMIN with the following integers:

upload_max_filesize = 2000MB
post_max_size = 2100MV
memory_limit = 2300MB

I immediately received this error when trying to log into my Wordpress dashboard to check if it worked:

“Allowed memory size of 262144 bytes exhausted (tried to allocate 24576 bytes)"

The above information in this chain helped me tremendously. (Stack usually does BTW)

I modified the PHP.ini file to the following:

upload_max_filesize = 2000M
post_max_size = 2100M
memory_limit = 536870912M

The major difference was only use M, not MB, and set that memory limit high.

As soon as I saved the changed the PHP.ini file, I saved it, went to login again and the login screen reappeared.

I went in and checked media uploads, ands bang:

Image showing twordpress media folder “Add New” box, with limits stated as “MAXIMUM UPLOAD FILE SIZE: 2 GB”

I haven't restarted Apache yet… but all looks good.

Thanks everyone.

  • I often see people setting the Memory limit very high, without knowing which knock on effect this has on your server. If you have 16 gigs of ram, with a 2 Gig Memory limit you are allowing 8 processes(in theory) to max out your memory usage if you should run into a memory leak, for example. Your error indicates that your limit of 256 KB was exhausted with ~24KB, so setting your memory_limit to 2 Gig is WAY too high. A limit of 384K would work here, or even a HIGH value of 4 Meg would work in your case. That leaves you 4000 Apache processes to fit into your 16 Gigs of RAM, rather than 8. – TBlaar Oct 23 '17 at 08:58
1

I got the same issue. To solve the issue you need to update your PHP version.

Bhargav Rao
  • 50,140
  • 28
  • 121
  • 140
1

Had a similar issue and modifying my wp-config.php file did not help. Mine was a multisite and the steps I took to solve it are below. So check to see if your site is a multisite and this might help.

Log into your cPanel and check the software section. Click on the "MultiplePHP INI Editor" icon. On the "configure PHP INI asic settings" page, select the Home Directory or specific domain from the dropdown and edit.

These are the changes I made to mine:

memory_limit = 256M
upload_max_filesize = 12M
post_max_size = 13M
file_uploads = On
max_execution_time = 180

Save your changes, clear your browser's cache before checking to see is the error is gone.

Obsidian
  • 3,719
  • 8
  • 17
  • 30
JoeSal
  • 11
  • 1
0

In my case it was because I had another folder that contained xampp and all it's files (htdocs, php e.t.c). Like I installed Xampp twice in different directories and for some reason the configurations of the other one was affecting my current xampp directory and so I had to change the memory size in the php.ini file of the other directory too.

daniel
  • 163
  • 2
  • 8
0

In my case this error occurred because of infinite loop in my code. Because of which the code could not end but kept running infinite times. Check your code for infinite loops too.

Your Common Sense
  • 156,878
  • 40
  • 214
  • 345
  • 1
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community May 07 '23 at 19:29
-1

If it happens when you try to install some package via composer just use this command COMPOSER_MEMORY_LIMIT=-1 composer require nameofpackage

borisoft82
  • 79
  • 1
  • 4