¿Cómo usar más de 256MB de memoria en el admin?

26 oct 2010, 12:21:17
Vistas: 23.2K
Votos: 11

Estoy construyendo un sitio para un fotógrafo que sube imágenes que normalmente son grandes para las cámaras digitales actuales. Las imágenes consumen mucha memoria, especialmente las operaciones con imágenes como la creación de miniaturas.

Así que quería aumentar el límite de memoria en el admin por encima de 256MB - ¿cómo se puede hacer esto? He permitido que CGI y PHP usen hasta 1 Gigabyte pero WordPress siempre reduce la memoria a 256MB. ¿Alguna idea de cómo arreglar esto en el lado del cliente que necesita poder auto-actualizarse?

ACTUALIZACIÓN: A partir de WordPress 3.2 en adelante el límite máximo de memoria en WordPress será configurable nuevamente.

2
Comentarios

oye, hace tiempo que no te veo. Supongo que has estado ocupado con clientes; ¡bien por ti! ¿Has considerado externalizar el procesamiento de imágenes, tal vez usando Amazon S3 y EC2? http://aws.amazon.com/articles/1602 ¿O Google App Engine? https://code.google.com/appengine/docs/python/images/usingimages.html ¿O usando http://urlimg.com/?

MikeSchinkel MikeSchinkel
26 oct 2010 13:02:34

@MikeSchnikel - ¡Hola! Estoy buscando resolver esto con WordPress. Si necesitara configurar un servidor de miniaturas, no usaría WordPress de todos modos. Pero gracias por los enlaces, muy interesantes al menos :).

hakre hakre
26 oct 2010 13:20:56
Todas las respuestas a la pregunta 6
2
13

Teóricamente, editando tu archivo config.php y añadiendo esta línea antes de la inclusión de wp-settings.php.

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

debería aumentar tu límite de memoria para WordPress a 256MB o cualquier valor que establezcas. Y esto funcionará en todo el sitio. Sin embargo, como señaló sorich87, hay algunas funciones que alterarán esta configuración con un límite fijo de 256 MB.

Hackear o No Hackear

Una pequeña preocupación sobre esto, WP_MEMORY_LIMIT es una de las configuraciones más extrañas de WP que he encontrado. Si revisas /wp-includes/default-constants.php encontrarás esta configuración:

// establecer límites de memoria
if ( !defined('WP_MEMORY_LIMIT') ) {
    if( is_multisite() ) {
        define('WP_MEMORY_LIMIT', '64M');
    } else {
        define('WP_MEMORY_LIMIT', '32M');
    }
}

Nunca me di cuenta de que WP establecería su uso de memoria predeterminado tan bajo, hasta que encontré esto en el codex de WP:

WordPress verificará automáticamente si a PHP se le ha asignado menos memoria que el valor ingresado antes de utilizar esta función. Por ejemplo, si a PHP se le han asignado 64MB, no es necesario establecer este valor en 64M ya que WordPress usará automáticamente los 64MB si es necesario. (fuente)

Esa explicación fue aliviadora. Sin embargo, el uso de @ini_set('memory_limit', '256M'); codificado de forma rígida cada vez que WP ejecuta una función que necesita más memoria nunca se menciona. De hecho, no encuentro ninguna explicación sobre este comportamiento vago en el codex de WP. Dado que la mayoría de las funciones no relacionadas con el usuario no están documentadas o no se explican claramente en el codex.

Si bien esta configuración funciona bien en la mayoría de los casos, hará que esas funciones sean inútiles en servidores con un límite de memoria máximo más bajo o, en tu caso, con un uso de memoria más alto.

Hasta que los chicos de WP solucionen esto, creo que tu única solución es modificar el núcleo. Puede que encuentres esta publicación escrita por hakre interesante de leer. También envió una recomendación de parche en Trac. El enlace anterior al archivo de parche puede ayudarte a encontrar la lista de funciones que usan esta configuración.

edición:

esta es la respuesta más estúpida que he dado porque doy un enlace a tu propia publicación (me di cuenta de que el nombre del OP era hakre después de 2 días) :D

edición 2:

como se menciona en los comentarios, esto ha sido solucionado en la versión 3.2

26 oct 2010 18:27:00
Comentarios

tu respuesta está lejos de ser estúpida. Para ser preciso, fue un poco tonto de mi parte publicar esta pregunta cuando ya sabía la respuesta, y tu comentario demuestra claramente que te diste cuenta de eso. En serio, mis más sinceras disculpas, publicar el enlace aquí era lo correcto hasta donde yo sabía al hacer la pregunta, así que ¿qué decir? ¡Gracias por ser tan abierto para admitirlo! Me gusta tu estilo y he vinculado mi blog a tu respuesta (no solo enlacé de vuelta al blog).

hakre hakre
13 feb 2011 03:32:49

En la versión 3.2 esto debería ser configurable: Changeset 17749

hakre hakre
5 may 2011 02:29:28
0

Swill - Yo tuve exactamente los mismos problemas. Maldito WordPress con algunas de sus "características".

Un enfoque más sofisticado es cambiar todos los @ini_set para configurarlo desde WP_MEMORY_LIMIT - problema resuelto.

Además, cambiar los valores de PHP en tiempo de ejecución no es tan inteligente, no estoy seguro de por qué está implementado :(

10 may 2011 02:30:33
1

Por tu descripción, creo que este código en admin.php es el problema:

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

Algo extraño que trate el uso de memoria del administrador por separado, pero al menos es modificable mediante filtros.

26 oct 2010 12:41:15
Comentarios

Esto no funciona para las operaciones de imágenes en el administrador. Se reducen a 256MB nuevamente independientemente de si uso ese filtro o no. :/

hakre hakre
26 oct 2010 13:17:46
1

Existen @ini_set('memory_limit', '256M'); antes de que las imágenes sean cargadas en memoria por las funciones de GD.

imagecreatefromstring() (línea 253, wp-includes/media.php) es utilizado por wp_load_image() que a su vez es usado por image_resize (la función donde se procesan las imágenes para la creación de miniaturas). El límite de memoria está en la línea 252, así que, por lo que puedo ver, no hay forma de modificarlo sin matar un gatito* >:).

También hay funciones de GD en load_image_to_edit() (línea 200, wp-admin/includes/image-edit.php). Esta es utilizada por el editor de imágenes (nunca lo he usado, desde que conozco WordPress, ni siquiera sabía dónde encontrarlo :)). Si tu cliente lo utiliza, quizás quieras establecer el límite de memoria allí también. Existe el filtro load_image_to_edit_path.

Espero que mi respuesta sea útil.

*hackear el núcleo

26 oct 2010 15:41:40
Comentarios

Sí, estos están codificados en algunas funciones del lado del administrador relacionadas con imágenes. Existe una constante WP_MEMORY_LIMIT e incluso un filtro admin_memory_limit, pero ninguno es consultado en estos pocos casos.

User User
26 oct 2010 15:56:01
1

Solo quería agradecer a bangbambang. Este es el primer post que encontré que me dio una idea de por qué la entrada en wp-config.php de define('WP_MEMORY_LIMIT', '512M'); en realidad no estaba siendo utilizada. Pasé horas intentando resolver esto...

Mi importación fallaba con el problema de agotamiento de los 256M sin importar cómo configurara el límite de memoria.

Estos son los lugares donde el límite de memoria está codificado a 256M (al menos en la versión 3.0.5).

wp-admin/includes/file.php (línea 532)

wp-admin/includes/image-edit.php (línea 393 & 498)

wp-includes/media.php (línea 252)
10 feb 2011 00:18:04
Comentarios

El ticket #13847 tiene un parche adjunto que hace que esos lugares sean configurables con una constante adicional llamada WP_MAX_MEMORY_LIMIT.

hakre hakre
10 feb 2011 00:29:29
0
-4
/* Límite de memoria */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G' );
22 mar 2016 08:48:44