¿Cómo usar más de 256MB de memoria en el admin?
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.

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

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).

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

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 :(

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.

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

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)

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