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

10

Estoy construyendo un sitio para un fotógrafo que carga imágenes que normalmente son grandes para las cámaras digitales de hoy. Las imágenes requieren bastante memoria, especialmente las operaciones de imagen como la creación de miniaturas.

Así que quería aumentar el límite de memoria en el administrador por encima de 256 MB, ¿cómo se puede hacer esto? Permití que CGI y PHP usaran hasta 1 Gigabyte, pero WordPress siempre disminuye la memoria a 256 MB. ¿Alguna idea de cómo arreglar eso en el lado del cliente que necesita poder actualizarse automáticamente?

ACTUALIZACIÓN: Desde Wordpress 3.2 en curso, el límite máximo de memoria en Wordpress se podrá volver a configurar .

hakre
fuente
hey, no te he visto en mucho tiempo. Supongo que has estado ocupado con los clientes; ¡bien por usted! ¿Ha considerado descargar el procesamiento de imágenes, quizás usando Amazon S3 y EC2? aws.amazon.com/articles/1602 ¿ O Google App Engine? code.google.com/appengine/docs/python/images/usingimages.html ¿ O usando urlimg.com ?
MikeSchinkel
@MikeSchnikel - ¡Hej! Estoy buscando resolver esto con WordPress. Si necesito configurar un servidor de miniaturas, no usaría WordPress de todos modos. Pero gracias por los enlaces, al menos muy interesantes :).
Hakre

Respuestas:

13

Teóricamente, edite su config.php y agregue esta línea antes de la inclusión de wp-settings.php.

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

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

Hackear o no hackear

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

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

Nunca me doy cuenta de que WP configurará su uso de memoria predeterminado tan bajo, hasta que encuentre esto en WP codex:

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 64 MB, no es necesario establecer este valor en 64 M, ya que WordPress usará automáticamente todos los 64 MB si es necesario. ( Fuente )

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

Si bien esta configuración funciona bien en la mayoría de los casos, hará que esas funciones sean inútiles en el servidor con una configuración de memoria máxima más baja o, en su caso, un mayor uso de memoria.

Hasta que los chicos de WP arreglen esto, creo que su única solución es modificar el núcleo. Puede encontrar esta publicación escrita por hakre interesante para leer. También presentó una recomendación de parche en Trac. El enlace anterior al archivo de parche puede ayudarlo a encontrar la lista de funciones que utilizan esta configuración.

editar:

Esta es la respuesta más estúpida que he dado porque le doy un enlace a su propia publicación (solo tenga en cuenta que el nombre de OP fue hakre después de 2 días): D

editar 2:

como se menciona en el comentario, esto se ha solucionado con la versión 3.2

Bangbambang
fuente
tu respuesta está lejos de ser estúpida. Para ser precisos, fue un poco estúpido de mi parte publicar esta pregunta mientras ya conocía la respuesta, y tu comentario muestra totalmente que de hecho lo has pasado por alto. Realmente, mis más sinceras disculpas, publicar el enlace aquí fue tan correcto como yo sabía mientras publicaba la pregunta, ¿qué decir? ¡Gracias por ser tan abierto para admitir eso! Me gusta su estilo y vinculé mi blog a su respuesta (no solo se vinculó nuevamente al blog).
Hakre
En 3.2 esto debería ser configurable: Changeset 17749
hakre
1

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

imagecreatefromstring()(línea 253, wp-includes / media.php) se usa wp_load_image()mediante image_resize(la función en la que se realiza el procesamiento de imágenes para la creación de miniaturas). El límite de memoria está en la línea 252, por lo que, hasta donde puedo ver, no hay forma de modificarlo sin matar a un gatito *> :).

También hay funciones GD en load_image_to_edit()(línea 200, wp-admin / includes / image-edit.php). Este es usado por el editor de imágenes (nunca lo usé, ya que conozco WordPress, ni siquiera sabía si debía encontrarlo :)). Si su cliente lo usa, es posible que también desee establecer el límite de memoria allí. Ahí está el filtro load_image_to_edit_path.

Espero que mi respuesta sea útil.

* núcleo de piratería

sorich87
fuente
Sí, estos están codificados en algunas funciones administrativas relacionadas con las imágenes. Hay WP_MEMORY_LIMITun admin_memory_limitfiltro constante e incluso un filtro, pero ninguno de estos casos se consulta.
Annika Backstrom
1

Swill: tuve los mismos problemas. Maldito wordpress con algunas de las "características" Un enfoque bastante más sofisticado es cambiar todos los @ini_set 's 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é se implementa :(

neosk
fuente
0

Por su descripción, creo que este código admin.phpes el problema:

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

Es un tanto extraño que trate el uso de memoria de administrador por separado, pero al menos es filtrable.

Rarst
fuente
Esto no funciona para las operaciones de imagen en el administrador. Se vuelven a reducir a 256 MB nuevamente, independientemente de si uso ese filtro o no. : /
hakre
0

Solo quería agradecer a Bangbambang. Esta es la primera publicación que encontré que fue capaz de darme una idea de por qué la entrada en wp-config.php define('WP_MEMORY_LIMIT', '512M');no se estaba utilizando realmente. Pasé horas tratando de resolver esto ...

Mi importación estaba fallando con el problema agotado de 256M independientemente de cómo configuré el límite de memoria.

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

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

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

wp-includes/media.php (line 252)

fuente
El ticket # 13847 tiene un parche adjunto que hace que esos lugares sean configurables con una constante adicional llamada WP_MAX_MEMORY_LIMIT.
Hakre
-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
Anton
fuente