Всъщност тук ще обсъдя случаите в които се пише php скрипт при изпълнението на които се извежда съобщение като:" Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 500520576 bytes) in /var/www/a.php on line 4" или с няколко думи скрипта използва повече памет от колкото му е заделена предварително. Идеята тук е защо излиза това съобщение и как да го поправим(действието :) ).
1. Предварително заделенета памет се определя от конфигурационния файл /etc/php5/php.ini) php.ini :
memory_limit = 32M ; Maximum amount of memory a script may consume (32MB)
В този конфигурационен файл паметта която може да използва php скрипт е максимум 32 MB. Тази стойност може да се променя разбира се.
След промяна в php.ini трябва да се рестартира apache2. След това може да се изпълни phpinfo(); и ще видите новата заделена памет за php/скрипт.
2. Друг вариант за промяна на memory_limit е за при php5-cli (command-line interpreter for the php5 scripting language) или пример:
php -d memory_limit=512M a.php
По този начин при изпълненито на a.php се заделя 512 MB памет като се пренебрегва тази стойност от php.ini
3. Интересна функция в php е memory_get_usage() която връща текущата използва памет от php скрипта:
<?php
echo memory_get_usage() . "\n"; // 48504
$a = str_repeat("mpetrov.net",100104 );
echo memory_get_usage() . "\n"; // 1150084
unset($a);
echo memory_get_usage() . "\n"; // 48504
?>
По този начин може да се направи извод колко памет ползва php от самото php. Последния пример показва всъщност, че трябва да се unset всички променливи които няма да се ползват повторно за да не заемат памет :)
Извод: Бяха разгледани няколко причини и решения за грешката в php: Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 500520576 bytes)