Comment utiliser plus de 256 Mo de mémoire dans l'admin?

10

Je construis un site pour un photographe qui télécharge des images normalement volumineuses pour les appareils photo numériques actuels. Les images utilisent beaucoup de mémoire, en particulier les opérations telles que la création de vignettes.

Je voulais donc augmenter la limite de mémoire dans l’administrateur au-dessus de 256 Mo - comment cela peut-il être fait? J'ai autorisé CGI et PHP à utiliser jusqu'à 1 gigaoctet mais wordpress diminue toujours la mémoire à 256 Mo. Avez-vous une idée de comment résoudre ce problème côté client qui doit pouvoir se mettre à jour automatiquement?

MISE À JOUR: à partir de Wordpress 3.2 en cours d'exécution, la limite de mémoire maximale dans Wordpress sera à nouveau configurable .

    
posée hakre 26.10.2010 - 11:21

6 réponses

13

Théoriquement, modifiez votre fichier config.php et ajoutez cette ligne avant l'inclusion de wp-settings.php.

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

devrait augmenter votre limite de mémoire pour WordPress à 256 Mo ou à la valeur que vous définissez. Et cela fonctionnera dans tout le site. Cependant, comme sorich87 Comme souligné , peu de fonctions modifieront ce paramètre avec une limite de 256 Mo codée en dur.

Pirater ou ne pas pirater

Un peu de souci à ce sujet, WP_MEMORY_LIMIT est l’un des paramètres WP les plus étranges que j’ai rencontrés. Si vous cochez /wp-includes/default-constants.php , vous trouverez ce paramètre:

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

Je ne me suis jamais rendu compte que WP définirait sa consommation de mémoire par défaut si basse, jusqu'à ce que je trouve cela dans WP codex:

  

WordPress vérifie automatiquement si PHP a été alloué moins de mémoire que la valeur entrée avant d’utiliser cette fonction. Par exemple, si PHP a été alloué à 64 Mo, il n'est pas nécessaire de définir cette valeur sur 64 Mo. WordPress utilisera automatiquement tous les 64 Mo, si besoin est. ( source )

Cette explication soulageait. Toutefois, jamais mentionné est utilisé pour jamais mentionné , dans l'exécution de la fonction d'exécution WP nécessitant davantage de mémoire. En fait, je ne trouve aucune explication à propos de ce comportement vague du codex WP. Comme la plupart des fonctions non liées à l'utilisateur ne sont ni documentées ni expliquées clairement dans le codex.

Bien que ce paramètre fonctionne correctement dans la plupart des cas, il rendra ces fonctions inutiles sur le serveur dont le paramètre de mémoire maximale est plus faible ou sur votre cas, si vous utilisez une quantité de mémoire supérieure.

Jusqu'à ce que les gars de WP corrigent cela, je pense que votre seule solution est de modifier le noyau. Vous pouvez trouver ce message écrit par hakre intéressant à lire . Il a également soumis une recommandation de correctif dans Trac. Le lien précédent vers le fichier de correctif peut vous aider à trouver la liste des fonctions utilisant ce paramètre.

modifier:

C’est la réponse la plus stupide que j’aie jamais donnée, car Je donne un lien vers votre propre message (sachez que le nom de l'OP était hakre après 2 jours): D

modifier 2:

comme mentionné dans le commentaire, cela a été corrigé par la version 3.2

.     
réponse donnée bangbambang 26.10.2010 - 17:27
1

Il y a @ini_set('memory_limit', '256M'); avant que les images ne soient chargées en mémoire par les fonctions GD.

imagecreatefromstring() (ligne 253, wp-includes / media.php) est utilisé par wp_load_image() qui est utilisé par image_resize (la fonction où le traitement des images est effectué pour la création de vignettes). La limite de mémoire est à la ligne 252, donc, autant que je sache, il n’ya aucun moyen de la modifier sans tuer un chaton * >:).

Il existe également des fonctions GD dans load_image_to_edit() (ligne 200, wp-admin / includes / image-edit.php). Celui-ci est utilisé par l'éditeur d'images (je ne l'ai jamais utilisé, car je connais WordPress, je ne savais même pas où le trouver :)). Si votre client l’utilise, vous pouvez également définir la limite de mémoire. Il y a le filtre load_image_to_edit_path .

J'espère que ma réponse sera utile.

* coeur de piratage

    
réponse donnée sorich87 26.10.2010 - 14:41
1

Swill - J'ai juste eu les mêmes problèmes. Zut wordpress avec certaines des "fonctionnalités" Une approche un peu plus sophistiquée consiste à modifier tous les @ini_set pour les définir à partir de WP_MEMORY_LIMIT - problème résolu

De plus, changer les valeurs php au moment de l'exécution n'est pas si intelligent, je ne sais pas pourquoi il est implémenté: (

    
réponse donnée neosk 10.05.2011 - 01:30
0

D'après votre description, je pense que le code dans admin.php est le problème suivant:

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

Il est plutôt étrange qu'il traite l'utilisation de la mémoire administrateur séparément, mais au moins, il est filtrable.

    
réponse donnée Rarst 26.10.2010 - 11:41
0

Je voulais juste dire merci à bangbambang. C’est le premier message que j’ai trouvé qui m’ait permis de mieux comprendre pourquoi l’entrée dans wp-config.php de define('WP_MEMORY_LIMIT', '512M'); n’était pas réellement utilisée. J'ai passé des heures à essayer de comprendre cela ...

Mon import échouait avec le problème épuisé de 256 M, quelle que soit la façon dont je définissais la limite de mémoire.

Voici les endroits où la limite de mémoire est codée en dur à 256M (de toute façon dans la version 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)
    
réponse donnée user3048 09.02.2011 - 23:18
-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
    
réponse donnée Anton 22.03.2016 - 07:48

Lire d'autres questions sur les étiquettes