Як використовувати більше 256 Мб пам'яті в адміністраторі?


10

Я будую сайт для фотографа, який завантажує фотографії, які зазвичай є великими для сучасних цифрових камер. Зображення досить інтенсивні в пам'яті, особливо такі операції із зображенням, як створення мініатюр.

Тому я хотів підняти ліміт пам’яті в адміністраторі вище 256 Мб - як це зробити? Я дозволив CGI та PHP використовувати до 1 гігабайт, але wordpress завжди зменшує пам'ять до 256 Мб. Будь-яка ідея, як це виправити на стороні клієнта, який повинен мати можливість автоматичного оновлення?

ОНОВЛЕННЯ: З Wordpress 3.2, що триває, максимальний ліміт пам’яті в Wordpress знову буде налаштований .


ей, не бачили тебе вже давно. Здогадайтесь, ви зайняті клієнтами; добре тобі! Чи вважали ви, можливо, завантаженням обробки зображень, можливо, використовуючи 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 не виправлять це, я думаю, що ваше єдине рішення - це змінити ядро. Ви можете знайти цю публікацію, написану hakre цікавою для читання. Він також подає рекомендацію щодо виправлення патчів у Trac. Попереднє посилання на файл виправлення може допомогти вам знайти список функцій, які використовують це налаштування.

редагувати:

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

редагувати 2:

як згадувалося в коментарі, це було виправлено 3.2 випуском


ваша відповідь далеко не дурна. Якщо бути точним, мені було якось дурно, коли я розміщував це питання, поки я вже знав відповідь, і ваш коментар повністю показує, що ви насправді перебороли це. Дійсно, мої найвидатніші вибачення, розміщення посилання тут було настільки правильно, наскільки я знав себе, коли розміщував питання, і що сказати? Дякуємо за те, що можете відкрити це! Мені подобається ваш стиль і я пов’язав мій блог з вашою відповіддю (не тільки зв'язаний назад до блогу).
хакре

В 3.2 це повинно бути налаштованим: набір змін 17749
hakre

1

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

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

Також є функції GD у load_image_to_edit()(рядок 200, wp-admin / include / image-edit.php). Цей використовується редактор зображень (я неведю користувався ним, оскільки я знаю WordPress, навіть не знав, чи потрібно його знайти :)). Якщо ваш клієнт ним користується, можливо, вам також потрібно встановити ліміт пам’яті. Є фільтр load_image_to_edit_path.

Сподіваюся, моя відповідь корисна.

* злому ядра


Так, вони жорстко закодовані в кілька функцій на стороні адміністратора, що стосуються зображень. Є WP_MEMORY_LIMITпостійний і навіть admin_memory_limitфільтр, але ні в одній з цих справ не консультуються.
Annika Backstrom

1

Сплив - у мене були саме такі проблеми. Проклятий wordpress з деякими "особливостями" Досить складнішим підходом є зміна всіх елементів @ini_set, щоб встановити їх на WP_MEMORY_LIMIT - вирішена проблема

Крім того, зміна значень php під час виконання не настільки розумна, не впевнений, чому вона реалізована :(


0

За вашим описом, я думаю, що цей код admin.php- це проблема:

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

Дещо дивно, що він розглядає використання пам'яті адміністратора окремо, але, принаймні, є фільтрувальним.


Це не працює для операцій із зображенням у адміністраторі. Вони знову зменшуються до 256 Мб незалежно від того, використовую я цей фільтр чи ні. : /
hakre

0

Я просто хотів сказати спасибі бангбамбангу. Це перший пост, який я виявив, що міг дати деяке уявлення про те, чому запис у wp-config.php define('WP_MEMORY_LIMIT', '512M');фактично не використовується. Я витратив години, намагаючись зрозуміти це ...

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

Ось місця, де ліміт пам’яті жорстко закодовано до 256 М (у будь-якій версії 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)

Білет № 13847 має виправлений патч, який робить ці місця налаштованими на додаткову константу, що викликається WP_MAX_MEMORY_LIMIT.
хакре

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.