Фон
Я понимаю, как настройка PHP memory_limit
может использоваться для контроля того, сколько памяти доступно для использования PHP.
Как и при использовании этогосвойство для увеличения / уменьшения предела памяти для вашего скрипта, вы также можете установить его на -1
, чтобы полностью отключить ограничение памяти.
Однако, как мы все знаем, компьютер не имеет бесконечностьпамять , поэтому все, о чем мы на самом деле говорим, - это снятие каких-либо добровольных ограничений, реализованных самим PHP.
Иллюстрация
Мы можем продемонстрировать, что это действительно так, используя следующеескрипт:
<?php
print(ini_get('memory_limit') . "\n");
ini_set('memory_limit', -1);
print(ini_get('memory_limit') . "\n");
$x = "123456789ABCDEF";
while (true)
$x .= $x;
?>
При запуске из командной строки я получаю следующий вывод:
Оригинал: 128M, Новый: -1
PHP Fatalошибка: недостаточно памяти (выделено 503840768) (попытка выделить 1006632961 байт) в файле test.php в строке 14
Неустранимая ошибка: недостаточно памяти (выделено 503840768) (попытка выделить 1006632961 байт) в файле test.phpпо линии 14
зеnd_mm_heap поврежден
А из Интернета (через Apache) я получаю нечто подобное:
Оригинал: 128M, Новый: -1
Неустранимая ошибка:Недостаточно памяти (выделено 503840768) (попытался выделить 1006632961 байт) в файле test.php в строке 14
В моих примерах значения совпадают (~ 480 МБ), поэтому не похоже, чтовеб-сервер устанавливает ограничение. Кроме того, это далеко не столько объема ОЗУ, установленного в системе (даже без учета виртуальной памяти), так что это не является аппаратным ограничением.
Обратите внимание, что эти тесты выполнялись на PHP 5.6 на машине с Windows с 4 ГББАРАН. Однако вывод аналогичен в других версиях PHP .
Наконец, мы подходим к вопросу!
Учитывая вышеизложенное:
- Чтона самом деле диктует предел памяти, когда мы устанавливаем его
-1
? - Есть ли способ узнать, что это за предел в PHP?