Come utilizzare più di 256 MB di memoria nell'amministratore?


10

Sto costruendo un sito per un fotografo che carica immagini normalmente grandi per le fotocamere digitali di oggi. Le immagini richiedono molta memoria, in particolare le operazioni sulle immagini come la creazione di miniature.

Quindi volevo aumentare il limite di memoria nell'amministratore oltre 256 MB - come è possibile farlo? Ho permesso a CGI e PHP di utilizzare fino a 1 Gigabyte, ma WordPress riduce sempre la memoria a 256 MB. Qualche idea su come risolverlo sul lato client che deve essere in grado di aggiornarsi automaticamente?

AGGIORNAMENTO: Da Wordpress 3.2 in corso il limite massimo di memoria in Wordpress sarà nuovamente configurabile .


ehi, non ti vedo da un po '. Immagino che sei stato impegnato con i clienti; buon per te! Hai forse considerato di scaricare l'elaborazione delle immagini, magari utilizzando Amazon S3 ed 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! Sto cercando di risolverlo con wordpress. Se avessi bisogno di configurare un server di miniature non userei comunque wordpress. Ma grazie per i collegamenti, molto interessanti almeno :).
Hakre,

Risposte:


13

Teoricamente, modifica il tuo config.php e aggiungi questa riga prima dell'inclusione di wp-settings.php.

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

dovrebbe aumentare il limite di memoria per WordPress a 256 MB o qualsiasi valore impostato. E questo funzionerà in tutto il sito. Tuttavia, come sottolineato da sorich87 , ci sono poche funzioni che modificheranno questa impostazione con un limite di 256 MB codificato.

Per hackerare o non hackerare

Una piccola preoccupazione al riguardo, WP_MEMORY_LIMITè una delle impostazioni WP più strane che abbia mai incontrato. se controlli /wp-includes/default-constants.phptroverai questa impostazione:

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

Non mi rendo mai conto che WP imposterà il suo utilizzo predefinito della memoria su un valore così basso, finché non lo trovo nel codice WP:

WordPress verificherà automaticamente se a PHP è stata allocata meno memoria del valore inserito prima di utilizzare questa funzione. Ad esempio, se PHP è stato assegnato 64 MB, non è necessario impostare questo valore a 64M WordPress userà automaticamente tutti 64MB se necessario. ( Sorgente )

Questa spiegazione è stata alleviata. Tuttavia, l'uso di hard coded @ini_set('memory_limit', '256M');ogni volta che WP esegue una funzione che necessita di più memoria non viene mai menzionato . In realtà, non trovo alcuna spiegazione su questo vago comportamento dal codice WP. Poiché la maggior parte delle funzioni non correlate all'utente non è documentata o non è chiaramente spiegata nel codice.

Mentre questa impostazione funziona bene nella maggior parte dei casi, renderà inutili quelle funzioni sul server con un'impostazione di memoria massima inferiore o sul tuo caso, un maggiore utilizzo della memoria.

Fino a quando i ragazzi di WP non lo risolveranno, penso che la tua unica soluzione sia quella di modificare il core. Puoi trovare interessante questo post scritto da Hacre. Ha anche inviato una raccomandazione di patch in Trac. Il link precedente al file patch può aiutarti a trovare un elenco di funzioni che utilizzano questa impostazione.

modificare:

questa è la risposta più stupida che io abbia mai dato perché do un link al tuo post (renditi conto che il nome OP era hakre dopo 2 giorni): D

modifica 2:

come menzionato nel commento, questo è stato risolto dalla versione 3.2


la tua risposta è ben lontana dall'essere stupida. Per essere precisi è stato un po 'stupido da parte mia pubblicare questa domanda mentre conoscevo già la risposta, e il tuo commento mostra totalmente che l'hai effettivamente investito. Davvero, le mie più grandi scuse, pubblicare il link qui era così giusto per quanto mi conoscessi mentre pubblicavo la domanda, quindi cosa dire? Grazie per essere così aperto ad ammetterlo! Mi piace il tuo stile e ho collegato il mio blog alla tua risposta (non solo collegato al blog).
Hakre,

In 3.2 questo dovrebbe essere configurabile: Changeset 17749
hakre

1

Ci sono @ini_set('memory_limit', '256M');prima che le immagini vengano caricate in memoria dalle funzioni GD.

imagecreatefromstring()(riga 253, wp-Includes / media.php) viene utilizzato da wp_load_image()quale viene utilizzato da image_resize(la funzione in cui l'elaborazione delle immagini viene eseguita per la creazione di miniature). Il limite di memoria è alla riga 252, quindi, per quanto posso vedere, non c'è modo di modificarlo senza uccidere un gattino *> :).

Ci sono anche funzioni GD in load_image_to_edit()(linea 200, wp-admin / Includes / image-edit.php). Questo è usato dall'editor di immagini (non l'ho mai usato, dato che conosco WordPress, non sapevo nemmeno dove trovarlo :)). Se il tuo client lo utilizza, potresti voler impostare anche qui il limite di memoria. C'è il filtro load_image_to_edit_path.

Spero che la mia risposta sia utile.

* core di hacking


Sì, questi sono codificati in alcune funzioni lato amministratore relative alle immagini. C'è WP_MEMORY_LIMITun admin_memory_limitfiltro costante e persino un filtro, ma nessuno dei due viene consultato in questi pochi casi.
Annika Backstrom,

1

Swill - Ho avuto gli stessi problemi. Dannato wordpress con alcune delle "caratteristiche" Un approccio piuttosto più sofisticato è quello di cambiare tutti i @ini_set per impostarlo da WP_MEMORY_LIMIT - problema risolto

Inoltre, cambiare i valori di php in fase di runtime non è così intelligente, non so perché sia ​​implementato :(


0

Secondo la tua descrizione, penso che questo codice admin.phpsia il problema:

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

Un po 'strano che tratti l'utilizzo della memoria dell'amministratore separatamente, ma almeno è filtrabile.


Questo non funziona per le operazioni di immagine nell'amministratore. Si riducono di nuovo a 256 MB, indipendentemente dal fatto che io usi quel filtro o meno. : /
hakre,

0

Volevo solo dire grazie a Bangbambang. Questo è il primo post che ho scoperto che è stato in grado di darmi un'idea del perché la voce in wp-config.php di define('WP_MEMORY_LIMIT', '512M');non è stata effettivamente utilizzata. Ho passato ore a cercare di capirlo ...

L'importazione non è riuscita con il problema esaurito 256M indipendentemente da come ho impostato il limite di memoria.

Ecco i luoghi in cui il limite di memoria è hardcoded a 256M (comunque nella versione 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 ha una patch allegata che rende quei posti configurabili con una costante aggiuntiva chiamata WP_MAX_MEMORY_LIMIT.
Hacre,

-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.