Как использовать более 256 МБ памяти в админке?

10

Я создаю сайт для фотографа, который загружает фотографии, обычно большие для современных цифровых камер. Изображения занимают достаточно много памяти, особенно такие операции с изображениями, как создание миниатюр.

Поэтому я хотел поднять ограничение памяти в админке выше 256 МБ - как это можно сделать? Я позволил CGI и PHP использовать до 1 гигабайта, но WordPress всегда уменьшает объем памяти до 256 МБ. Любая идея, как это исправить на стороне клиента, который должен иметь возможность автоматического обновления?

ОБНОВЛЕНИЕ: Начиная с Wordpress 3.2, максимальный предел памяти в Wordpress снова будет настраиваться .

hakre
источник
эй, давно тебя не видел Думаю, вы были заняты с клиентами; повезло тебе! Рассматривали ли вы, возможно, разгрузку обработки изображений, возможно, с помощью Amazon S3 и EC2? aws.amazon.com/articles/1602 Или Google App Engine? code.google.com/appengine/docs/python/images/usingimages.html Или используете urlimg.com ?
MikeSchinkel
@MikeSchnikel - Привет! Я хочу решить эту проблему с WordPress. Если мне нужно настроить сервер миниатюр, я бы так или иначе не использовал WordPress. Но спасибо за ссылки, очень интересно хотя бы :).
Хакре

Ответы:

13

Теоретически, отредактируйте ваш config.php и добавьте эту строку перед включением wp-settings.php.

define('WP_MEMORY_LIMIT', '256M');

следует увеличить предел памяти для WordPress до 256 МБ или любого другого значения, которое вы установили. И это будет работать по всему миру. Однако, как указал sorich87 , есть несколько функций, которые изменят этот параметр с жестко заданным ограничением в 256 МБ.

Взломать или не взломать

Немного беспокойства по этому поводу, WP_MEMORY_LIMITэто одна из самых странных настроек WP, с которыми я сталкивался. если вы проверите, /wp-includes/default-constants.phpвы найдете этот параметр:

// set memory limits
if ( !defined('WP_MEMORY_LIMIT') ) {
    if( is_multisite() ) {
        define('WP_MEMORY_LIMIT', '64M');
    } else {
        define('WP_MEMORY_LIMIT', '32M');
    }
}

Я никогда не понимаю, что WP установит так низкое использование памяти по умолчанию, пока не найду это в кодексе WP:

WordPress автоматически проверит, было ли PHP выделено меньше памяти, чем введенное значение, прежде чем использовать эту функцию. Например, если PHP выделено 64 МБ, нет необходимости устанавливать это значение на 64 МБ, поскольку WordPress автоматически использует все 64 МБ, если это необходимо. ( Источник )

Это объяснение облегчало. Тем не менее, использование жестко запрограммированной @ini_set('memory_limit', '256M');функции WP каждый раз, когда требуется больше памяти, никогда не упоминается . На самом деле, я не нахожу объяснения этому смутному поведению из кодекса WP. Поскольку большинство функций, не связанных с пользователем, либо не документированы, либо четко не объяснены в Кодексе.

Хотя этот параметр хорошо работает в большинстве случаев, он сделает эти функции бесполезными на сервере с более низким значением максимальной памяти или в вашем случае с более высоким использованием памяти.

Пока WP ребята не исправят это, я думаю, что ваше единственное решение - модифицировать ядро. Вы можете найти этот пост, написанный Хакре, интересным для чтения. Он также представляет рекомендации по исправлению в Trac. Предыдущая ссылка на файл исправления может помочь вам найти список функций, которые используют этот параметр.

редактировать:

это самый глупый ответ, который я когда-либо давал, потому что я даю ссылку на ваш собственный пост (просто поймите, что ОП имя было хакре через 2 дня): D

редактировать 2:

как уже упоминалось в комментарии, это было исправлено выпуском 3.2

bangbambang
источник
Ваш ответ далек от того, чтобы быть глупым. Если быть точным, то было несколько глупо, когда я публиковал этот вопрос, пока я уже знал ответ, и ваш комментарий полностью показывает, что вы действительно столкнулись с этим. На самом деле, мои самые большие извинения, размещение ссылки здесь было настолько правильным, насколько я знал сам при публикации вопроса, так что же сказать? Спасибо за то, что открыты, чтобы признать это! Мне нравится твой стиль, и я связал свой блог с твоим ответом (а не только со ссылкой на блог).
Хакре
В 3.2 это должно быть настраиваемо: Changeset 17749
хакре
1

Есть @ini_set('memory_limit', '256M');до загрузки изображения в памяти функций GD.

imagecreatefromstring()(строка 253, wp-includes / media.php), с помощью wp_load_image()которой используется image_resize(функция, в которой выполняется обработка изображений для создания миниатюр). Ограничение памяти находится в строке 252, поэтому, насколько я понимаю, нет способа изменить его без убийства котенка *> :).

Также есть функции GD load_image_to_edit()(строка 200, wp-admin / includes / image-edit.php). Этот используется графическим редактором (я никогда не использовал его, так как я знаю WordPress, даже не знал, где его найти :)). Если ваш клиент использует его, вы можете также установить ограничение памяти. Есть фильтр load_image_to_edit_path.

Надеюсь, мой ответ полезен.

* взлом ядра

sorich87
источник
Да, они жестко закодированы в несколько функций на стороне администратора, связанных с изображениями. Существует WP_MEMORY_LIMITконстанта и даже admin_memory_limitфильтр, но ни в одном из этих случаев не учитываются.
Анника Бэкстрем
1

Swill - у меня были такие же проблемы. Черт возьми WordPress с некоторыми «функциями». Более сложный подход состоит в том, чтобы изменить все @ini_set, чтобы установить его из WP_MEMORY_LIMIT - проблема решена

Кроме того, изменение значений php во время выполнения не так уж умно, не уверен, почему это реализовано :(

neosk
источник
0

По вашему описанию, я думаю, что этот код admin.phpявляется проблемой:

if ( current_user_can( 'manage_options' ) )
    @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) );

Несколько странно, что он рассматривает использование памяти администратора отдельно, но, по крайней мере, фильтруется.

Rarst
источник
Это не работает для операций с изображениями в админке. Они снова уменьшаются до 256 МБ независимо от того, использую ли я этот фильтр или нет. : /
Хакре
0

Я просто хотел сказать спасибо bangbambang. Это первый пост, который я обнаружил, который смог дать мне некоторое представление о том, почему вход в wp-config.php define('WP_MEMORY_LIMIT', '512M');фактически не использовался. Я часами пытался понять это ...

Мой импорт не удался с исчерпанной проблемой 256M независимо от того, как я установил лимит памяти.

Вот места, где предел памяти жестко закодирован до 256M (в любом случае в версии 3.0.5).

wp-admin/includes/file.php (line 532)

wp-admin/includes/image-edit.php (line 393 & 498)

wp-includes/media.php (line 252)

источник
Ticket # 13847 имеет патч прилагается , что делает эти места Configure-состояние с дополнительным постоянная называется WP_MAX_MEMORY_LIMIT.
Хакре
-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
Антон
источник