web-dev-qa-db-fra.com

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

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

Donc, je voulais 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?

UPDATE: À partir de Wordpress 3.2, la limite de mémoire maximale dans Wordpress sera à nouveau configurable .

10
hakre

Théoriquement, éditez votre config.php et ajoutez cette ligne before wp-settings.php inclusion.

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 le fait remarquer sorich87 , il existe peu de fonctions qui modifieront ce paramètre avec une limite de 256 Mo codée en dur.

Pirater ou ne pas pirater

Un petit souci à ce sujet, WP_MEMORY_LIMIT est l’un des paramètres les plus étranges de WP 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é attribué à 64 Mo, il n'est pas nécessaire de définir cette valeur sur 64 Mo. WordPress utilisera automatiquement tous les 64 Mo si nécessaire. ( source )

Cette explication était soulageant. Cependant, l'utilisation de la fonction @ini_set('memory_limit', '256M'); à tout moment WP codée en dur qui nécessite plus de mémoire est jamais mentionné . En fait, je ne trouve aucune explication à propos de ce comportement vague du codex WP. Étant donné que la plupart des fonctions non liées à l'utilisateur ne sont pas documentées ou ne sont pas clairement expliquées dans le codex.

Bien que ce paramètre fonctionne correctement dans la plupart des cas, il rendra ces fonctions inutiles sur le serveur avec un paramètre de mémoire maximum inférieur ou sur votre cas, avec une utilisation de mémoire supérieure.

Jusqu'à ce que WP gars résolve ce problème, je pense que votre seule solution est de modifier le noyau. Vous pouvez trouver ce post écrit par hakre intéressant à lire. Il soumet également 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 simplement que le nom de l’opérateur était hakre après 2 jours): D

éditer 2:

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

13
bangbambang

Swill - J'ai eu juste les mêmes problèmes. Un putain de wordpress avec certaines des "fonctionnalités" Une approche un peu plus sophistiquée consiste à changer 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é :(

1
neosk

Il y a @ini_set('memory_limit', '256M'); avant que les images 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 le 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 est utile.

* noyau de piratage

1
sorich87

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 256M indépendamment de la manière 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)
0
user3048

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

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

Il est un peu étrange qu’il traite l’utilisation de la mémoire administrative séparément, mais au moins elle est filtrable.

0
Rarst