Конфигурация для memory_limit
PHP, работающего как модуль Apache для веб-страниц сервера, должна учитывать, сколько процессов Apache вы можете одновременно иметь на компьютере - см. Параметр конфигурации MaxClients
для Apache. .
Если MaxClients
равно 100, а у вас 2000 МБ или ОЗУ, очень быстрое вычисление покажет, что вам не следует использовать более 20 МБ * (потому что 20 МБ * 100 клиентов = 2 ГБ или ОЗУ, т.е. общий объем памяти вашего сервера) * для значения memory_limit.
И это без учета того, что, вероятно, на том же сервере выполняются другие вещи, такие как MySQL, сама система ... И, возможно, Apache уже использует некоторую память для себя.
Или, конечно, это также «наихудший сценарий», который учитывает, что каждая страница PHP использует максимально возможный объем памяти.
В вашем случае, если вам нужен такой большой объем памяти только для одной работы, я бы не стал увеличивать memory_limit
для PḦP, работающего как модуль Apache.
Вместо этого я запускаю это задание из командной строки (или через задание cron) и указываю более высокое значение memory_limit
в этом единственном случае.
Это можно сделать с помощью опции -d
в php, например:
$ php -d memory_limit=1GB temp.php
string(3) "1GB"
Учитывая, что в этом случае этот файл temp.php содержит только:
var_dump(ini_get('memory_limit'));
На мой взгляд, это намного безопаснее, чем увеличение memory_limit для модуля PHP для Apache - и это то, что я обычно делаю, когда у меня большой набор данных, или некоторые действительно тяжелые вещи, которые я не могу оптимизировать или разбить на страницы.
Если вам нужно определить несколько значений для выполнения PHP CLI, вы также можете указать ему использовать другой файл конфигурации, вместо php.ini по умолчанию, с опцией -c
:
php -c /etc/phpcli.ini temp.php
Таким образом, у вас есть:
/etc/php.ini
для Apache, с низким memory_limit
, низким max_execution_time
, ...
- и
/etc/phpcli.ini
для пакетов, запускаемых из командной строки, практически без ограничений
Это гарантирует, что ваши пакеты будут в состоянии работать - и вы по-прежнему будете иметь безопасность для вашего сайта (memory_limit
и max_execution_time
- меры безопасности)
Тем не менее, если у вас есть время, чтобы оптимизировать ваш скрипт, вы должны; например, в такой ситуации, когда вам приходится иметь дело с большим количеством данных, нумерация страниц обязательна; -)