Ini_set ( "memory_limit" ) в PHP 5.3.3 вообще не работает
У меня было это раньше:
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
а затем сделать мой script сбойной ошибкой...
Я проверил документацию php и перешел в Google, и я не нашел нигде, что "memory_limit" устарел.
У кого-нибудь есть решение?
Ответы
Ответ 1
Скорее всего, ваш sushosin обновлен, который изменил значение по умолчанию suhosin.memory_limit с отключенного на 0 (что не позволит никаких обновлений memory_limit).
В Debian измените /etc/php 5/conf.d/suhosin.ini
; suhosin.memory_limit = 0
to
suhosin.memory_limit = 2G
Или какое удобное для вас значение. Вы можете найти журнал изменений Сушозина в http://www.hardened-php.net/hphp/changelog.html, в котором говорится:
Изменен способ защиты memory_limit
Ответ 2
Если у вас включено расширение suhosin, оно может запретить скриптам устанавливать ограничение на память выше того, с чего оно начиналось, или с определенной крышкой.
http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit
Ответ 3
Вот список вещей, которые стоит проверить:
Установлен ли Сухосин?
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
Когда используется целое число, значение измеряется в байтах. стенография нотация, как описано в этом FAQ, также может быть использована.
http://php.net/manual/en/ini.core.php#ini.memory-limit
- Используется ли php_admin_value в файлах .htaccess или virtualhost?
Устанавливает значение указанной директивы. Это не может быть использовано в .htaccess файлы. Любой тип директивы, установленный с php_admin_value, не может переопределяться .htaccess или ini_set(). Чтобы очистить ранее установленный значение не используется как значение.
http://php.net/manual/en/configuration.changes.php
Ответ 4
Работает для меня, не имеет ничего общего с PHP 5.3. Так же, как и многие такие опции, он не может быть переопределен через ini_set()
, когда safe_mode включен. Проверьте обновленный php.ini
(и еще лучше: также измените memory_limit).
Ответ 5
Ubuntu 10.04 поставляется только с патчем Suhosin, который не дает вам параметров конфигурации. Но вы можете установить php5-suhosin, чтобы решить эту проблему:
apt-get update
apt-get install php5-suhosin
Теперь вы можете отредактировать /etc/php 5/conf.d/suhosin.ini и установить:
suhosin.memory_limit = 1G
Затем использование ini_set будет работать в script:
ini_set('memory_limit', '256M');
Ответ 6
Проведите тест с двумя примерами:
<?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');
в верхнюю часть файла или по крайней мере до любого эха.
Что касается меня, suhosin не было решением, потому что оно даже не появляется в моей phpinfo(), но это сработало:
<?php
ini_set('memory_limit','2048M'); // set at the top of the file
(...)
?>