У меня было это раньше:
echo ini_get("memory_limit")."\n"; ini_set("memory_limit","256M"); echo ini_get("memory_limit")."\n";
Это будет способствовать:
32M 256M
на скрипт php, выполняемый командной строкой. Я обновлялся с 5.2 до 5.3, и теперь эта директива вообще не работает: это дает мне:
32M 32M
а затем сделать мой скрипт неудачным с фатальной ошибкой …
Я проверил документацию по php и отправил ее в Google, и я не нашел нигде, что «memory_limit» устарел.
у кого-нибудь есть решение?
Скорее всего, ваш sushosin обновлен, который изменил значение по умолчанию suhosin.memory_limit с отключенного на 0 (что не позволит никаких обновлений memory_limit).
В Debian измените /etc/php5/conf.d/suhosin.ini
; suhosin.memory_limit = 0
в
suhosin.memory_limit = 2G
Или независимо от того, что вам удобно. Вы можете найти журнал изменений Сушозина по адресу http://www.hardened-php.net/hphp/changelog.html , в котором говорится:
Изменен способ защиты memory_limit
Если у вас включено расширение suhosin, оно может запретить сценариям устанавливать ограничение памяти за пределы того, с чего оно начиналось, или с определенной крышкой.
http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit
Вот список вещей, которые стоит проверить:
Установлен ли Сухосин?
ini_set
ini_set('memory_limit', '512'); // DIDN'T WORK ini_set('memory_limit', '512MB'); // DIDN'T WORK ini_set('memory_limit', '512M'); // OK - 512MB ini_set('memory_limit', 512000000); // OK - 512MB
ini_set('memory_limit', '512'); // DIDN'T WORK ini_set('memory_limit', '512MB'); // DIDN'T WORK ini_set('memory_limit', '512M'); // OK - 512MB ini_set('memory_limit', 512000000); // OK - 512MB
Когда используется целое число, значение измеряется в байтах. Также могут использоваться сокращенные обозначения, как описано в этом FAQ .
http://php.net/manual/en/ini.core.php#ini.memory-limit
Устанавливает значение указанной директивы. Это невозможно использовать в файлах .htaccess. Любой тип набора директив с php_admin_value не может быть переопределен .htaccess или ini_set (). Чтобы очистить ранее установленное значение, используйте значение не как значение.
Работает для меня, не имеет ничего общего с PHP 5.3. Подобно многим таким параметрам, он не может быть переопределен через ini_set()
когда safe_mode включен. Проверьте обновленный php.ini
(и еще лучше: также измените memory_limit).
Ubuntu 10.04 поставляется только с пакетом Suhosin, который не дает вам вариантов конфигурации. Но вы можете установить php5-suhosin, чтобы решить эту проблему:
apt-get update apt-get install php5-suhosin
Теперь вы можете отредактировать /etc/php5/conf.d/suhosin.ini и установить:
suhosin.memory_limit = 1G
Тогда использование ini_set будет работать в скрипте:
ini_set('memory_limit', '256M');
Давайте проведем тест с двумя примерами:
<?php $memory = (int)ini_get("memory_limit"); // Display your current value in php.ini (for example: 64M) echo "original memory: ".$memory."<br>"; ini_set('memory_limit','128M'); // Try to override the memory limit for this script echo "new memory:".$memory; } // Will display: // original memory: 64 // new memory: 64 ?>
Вышеприведенный пример не работает для переопределения значения memory_limit. Но это будет работать:
<?php $memory = (int)ini_get("memory_limit"); // get the current value ini_set('memory_limit','128'); // override the value echo "original memory: ".$memory."<br>"; // echo the original value $new_memory = (int)ini_get("memory_limit"); // get the new value echo "new memory: ".$new_memory; // echo the new value // Will display: // original memory: 64 // new memory: 128 ?>
Вы должны поместить ini_set('memory_limit','128M');
в верхней части файла или, по крайней мере, перед любым эхом .
Что касается меня, сухозин не был решением, потому что он даже не появился в моей phpinfo (), но это сработало:
<?php ini_set('memory_limit','2048M'); // set at the top of the file (...) ?>