Wie verwende ich mehr als 256 MB Speicher im Administrator?

10

Ich baue eine Website für einen Fotografen, der Bilder hochlädt, die für heutige Digitalkameras normalerweise groß sind. Bilder sind sehr speicherintensiv, insbesondere die Bildoperationen wie das Erstellen von Miniaturansichten.

Also wollte ich das Speicherlimit im Admin auf über 256 MB erhöhen - wie geht das? Ich habe CGI und PHP erlaubt, bis zu 1 Gigabyte zu verwenden, aber WordPress reduziert den Speicher immer auf 256 MB. Haben Sie eine Idee, wie Sie dies auf einer Clientseite beheben können, die automatisch aktualisiert werden muss?

UPDATE: Ab Wordpress 3.2 kann das maximale Speicherlimit in Wordpress wieder konfiguriert werden .

hakre
quelle
Hey, ich habe dich eine Weile nicht gesehen. Vermutlich waren Sie mit Kunden beschäftigt. Schön für dich! Haben Sie darüber nachgedacht, die Bildverarbeitung möglicherweise zu entladen, möglicherweise mit Amazon S3 und EC2? aws.amazon.com/articles/1602 Oder Google App Engine? code.google.com/appengine/docs/python/images/usingimages.html Oder verwenden Sie urlimg.com ?
MikeSchinkel
@ MikeSchnikel - Hej! Ich versuche dies mit WordPress zu lösen. Wenn ich einen Thumbnail-Server einrichten muss, würde ich WordPress sowieso nicht verwenden. Aber danke für die Links, zumindest sehr interessant :).
hakre

Antworten:

13

Theoretisch bearbeiten Sie Ihre config.php und fügen diese Zeile hinzu, bevor Sie wp-settings.php einfügen .

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

sollte Ihr Speicherlimit für WordPress auf 256 MB oder einen von Ihnen festgelegten Wert erhöhen. Und das wird überall funktionieren. Wie sorich87 hervorhob , gibt es jedoch nur wenige Funktionen, die diese Einstellung mit einem fest codierten 256-MB-Limit ändern.

Hacken oder nicht hacken

Ein wenig Besorgnis darüber WP_MEMORY_LIMITist eine der seltsamsten WP-Einstellungen, die mir begegnet sind. Wenn Sie überprüfen /wp-includes/default-constants.php, finden Sie diese Einstellung:

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

Ich weiß nie, dass WP die Standardspeicherauslastung so niedrig einstellen wird, bis ich dies im WP-Codex finde:

WordPress prüft automatisch, ob PHP weniger Speicher als der eingegebene Wert zugewiesen wurde, bevor diese Funktion verwendet wird. Wenn PHP beispielsweise 64 MB zugewiesen wurde, muss dieser Wert nicht auf 64 MB festgelegt werden, da WordPress bei Bedarf automatisch alle 64 MB verwendet. ( Quelle )

Diese Erklärung war erleichtert. Die Verwendung von fest codierten @ini_set('memory_limit', '256M');WP-Ausführungsfunktionen, die mehr Speicher benötigen, wird jedoch nie erwähnt . Tatsächlich finde ich im WP-Codex keine Erklärung für dieses vage Verhalten. Da die meisten nicht benutzerbezogenen Funktionen entweder nicht dokumentiert oder im Codex nicht klar erklärt sind.

Während diese Einstellung in den meisten Fällen gut funktioniert, werden diese Funktionen auf Servern mit niedrigerer maximaler Speichereinstellung oder in Ihrem Fall mit höherer Speichernutzung unbrauchbar.

Bis WP-Leute das beheben, denke ich, besteht Ihre einzige Lösung darin, den Kern zu modifizieren. Vielleicht finden Sie diesen Beitrag von hakre interessant zu lesen. Er gibt auch eine Patch-Empfehlung in Trac ab. Der vorherige Link zur Patch-Datei kann Ihnen helfen, eine Liste der Funktionen zu finden, die diese Einstellung verwenden.

bearbeiten:

Dies ist die dümmste Antwort, die ich je gegeben habe, weil ich einen Link zu Ihrem eigenen Beitrag gebe (stellen Sie nur fest, dass der OP-Name nach 2 Tagen hakre war): D.

bearbeiten 2:

Wie im Kommentar erwähnt, wurde dies durch die Version 3.2 behoben

Bangbambang
quelle
Ihre Antwort ist weit davon entfernt, dumm zu sein. Um genau zu sein, war es ein bisschen dumm von mir, diese Frage zu stellen, während ich die Antwort bereits kannte, und Ihr Kommentar zeigt völlig, dass Sie das tatsächlich überfahren haben. Wirklich, meine größte Entschuldigung, das Posten des Links hier war so richtig, soweit ich mich selbst kannte, als ich die Frage postete. Was soll ich also sagen? Danke, dass du so offen bist, das zuzugeben! Ich mag deinen Stil und habe mein Blog mit deiner Antwort verknüpft (nicht nur mit dem Blog).
hakre
In 3.2 sollte dies konfigurierbar sein: Changeset 17749
hakre
1

Es gibt, @ini_set('memory_limit', '256M');bevor Bilder von GD-Funktionen in den Speicher geladen werden.

imagecreatefromstring()(Zeile 253, wp-includes / media.php) wird verwendet, von wp_load_image()der verwendet wird image_resize(die Funktion, bei der die Bildverarbeitung für die Erstellung von Miniaturansichten erfolgt). Das Speicherlimit befindet sich in Zeile 252, daher gibt es, soweit ich sehen kann, keine Möglichkeit, es zu ändern, ohne ein Kätzchen zu töten *> :).

Es gibt auch GD-Funktionen in load_image_to_edit()(Zeile 200, wp-admin / includes / image-edit.php). Dieser wird vom Bildeditor verwendet (ich habe ihn nie benutzt, da ich WordPress kenne, wusste nicht einmal, wo ich ihn finden sollte :)). Wenn Ihr Client es verwendet, möchten Sie möglicherweise auch dort das Speicherlimit festlegen. Da ist der Filter load_image_to_edit_path.

Hoffe meine Antwort ist hilfreich.

* Hacking Core

sorich87
quelle
Ja, diese sind in einige admin-seitige Funktionen in Bezug auf Bilder fest codiert. Es gibt eine WP_MEMORY_LIMITKonstante und sogar einen admin_memory_limitFilter, aber in diesen wenigen Fällen wird keiner konsultiert.
Annika Backstrom
1

Swill - ich hatte genau die gleichen Probleme. Verdammtes WordPress mit einigen der "Features" Ein etwas ausgefeilterer Ansatz besteht darin, alle @ini_set zu ändern, um es von WP_MEMORY_LIMIT zu setzen - Problem gelöst

Auch das Ändern von PHP-Werten zur Laufzeit ist nicht so klug, nicht sicher, warum es implementiert wird :(

neosk
quelle
0

Nach Ihrer Beschreibung denke ich, dass dieser Code admin.phpdas Problem ist:

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

Etwas seltsam, dass die Speicherauslastung des Administrators separat behandelt wird, aber zumindest filterbar ist.

Selten
quelle
Dies funktioniert nicht für die Image-Vorgänge im Administrator. Sie werden wieder auf 256 MB reduziert, unabhängig davon, ob ich diesen Filter verwende oder nicht. : /
hakre
0

Ich wollte mich nur bei Bangbambang bedanken. Dies ist der erste Beitrag, den ich gefunden habe und der mir einen Einblick geben konnte, warum der Eintrag in wp-config.php von define('WP_MEMORY_LIMIT', '512M');nicht tatsächlich verwendet wurde. Ich habe Stunden damit verbracht, das herauszufinden ...

Mein Import schlug mit dem erschöpften 256M-Problem fehl, unabhängig davon, wie ich das Speicherlimit festgelegt habe.

Hier sind die Stellen, an denen das Speicherlimit auf 256 MB fest codiert ist (in Version 3.0.5 sowieso).

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

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

wp-includes/media.php (line 252)

quelle
Ticket Nr. 13847 enthält einen Patch , mit dem diese Orte mit einer zusätzlichen Konstante namens konfiguriert werden können WP_MAX_MEMORY_LIMIT.
hakre
-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
Anton
quelle