Posted on 26 mars 2011 in Wordpress | 10 comments

Memory Limit

La limite de mémoire dans WordPress dépend de votre hébergeur.

Comment gérer vos uploads, ces fichiers que vous insérez dans vos articles et la taille permise ?  Comment gérer ou permettre des téléchargements? Comment gérer le message d’erreur sur la taille de la mémoire ?

Tous les fichiers téléversés (uploadés) via un article ou une page WordPress se retrouvent dans la bibliothèque des Médias. Pour une image simple, pas de souci. Mais pour d’autres types de fichiers ou de gros fichiers à rendre disponibles en téléchargements, ça se corse. La première information à connaître pour savoir ce que votre site permet actuellement, c’est la taille permise pour ces fichiers.

Rendez-vous dans votre tableau de bord à l’onglet Médias. Cliquez sur Ajouter un fichier. Une ligne vous renseigne la taille permise : Taille maximale des fichiers : 8MB. Cette taille dépend de plusieurs facteurs. Elle dépend de l’hébergeur et elle dépend de WordPress. Si votre hébergeur limite, il va falloir installer un fichier ini.php ou utiliser un plugin. Mais c’est un pari et un match serré. Parfois on peut gérer ça directement dans son panneau d’administration. Chez les hébergeurs français, je n’ai jamais vu cette possibilité. Mon hébergeur Westhost me permet, sans toucher à une ligne de code, une taille de 64MB en upload. Ce qui est une excellente limite, et je peux la modifier. Chez l’hébergeur français o2switch dont je parlerai bientôt, vous ne serez pas limité, ils ont récemment augmenté leur mémoire à 500MB. De quoi voir venir…

Voyez aussi la documentation du Codex.

Pour connaître les informations utiles et contraintes dues à votre hébergeur

Installez l’un de ces plugins :

WordPress Multisites

Dans un multisites c’est facile. La taille des uploads permise se gère dans les réglages de la partie Admin du réseau. Précisez la taille des uploads en allant dans Admin du Réseau puis Réglages à la ligne Envois des fichiers. Indiquez la taille désirée dans Taille maximale des fichiers.

Reglage

Reglage taille des fichiers dans un réseau WordPress Multisites

Je recommande l’extrême prudence si vous permettez l’upload de gros fichiers, et de se discipliner soi-même lors de la publication des images. De les réduire avant.  En principe les plugins de téléchargement gèrent bien la taille des uploads et il est préférable que l’upload permis ne soit pas supérieur à la taille par défaut sauf pour les téléchargements. Si votre multisites est un réseau, il vaut mieux permettre via un plugin de charger ses gros uploads via FTP (avec Fillezilla donc) au lieu de permettre aux utilisateurs des sites sur votre réseau de balancer de grosses tailles.

WordPress simple, gestion des Uploads

Dans un WP normal vous ne pouvez pas modifier cette taille par défaut de 8MB, à moins de bidouiller dans le Core. Pas conseillé puisqu’il faudra le faire à chaque mise à jour. Quelles solutions ?

– On peut écrire à son hébergeur pour leur demander d’augmenter la taille des fichiers uploadés permise.

– On peut installer un plugin (voir plus bas).

– On peut uploader son gros fichier directement dans son répertoire uploads qui est par défaut dans wp-content/uploads. Simple et rapide.

– Plus complexe, on peut modifier ces valeurs contraintes par l’hébergeur

En modifiant le fichier php.ini, le .htaccess ou le wp-config.php de WP. Le problème de cette dernière solution et que son succès dépend de votre hébergeur. Pas seulement le succès, vous pouvez aussi tout faire planter si vous ne savez pas ce que vous faites. Donc avant de modifier quoi que ce soit, faites une sauvegarde de votre base de données et des fichiers que vous modifiez.

Si vous avez accès à votre dossier Apache c’est parfait. Mais c’est rare. Trouvez le fichier suivant /etc/php5/apache/php.ini et repérez upload_max_filesize. Juste modifier la valeur.

Pour les hébergeurs qui interprètent le code en vrai Apache, on peut directement augmenter la taille en insérant ceci dans .htaccess :

1
2
3
php_value upload_max_filesize 32M
php_value post_max_size 32M
php_value memory_limit 64M
php_value upload_max_filesize 32M
php_value post_max_size 32M
php_value memory_limit 64M

Et/ou essayer d’ajouter dans wp-config.php:

1
define('WP_MEMORY_LIMIT', '64M');
define('WP_MEMORY_LIMIT', '64M');

N’essayez pas cette méthode si vous êtes hébergés chez 1&1 ou si les infos vous disent que le Rewriting est interprété en CGI.

Ajout dans un fichier php.ini

1
2
3
4
memory_limit = 64M
upload_max_filesize = 32M
post_max_size = 32M
file_uploads = On
memory_limit = 64M
upload_max_filesize = 32M
post_max_size = 32M
file_uploads = On

Encore faut-il, chez certains hébergeurs, que ce fichier php.ini soit installé dans tous les répertoires pour que ça fonctionne…. Voir un tuto chez 1&1 pour réaliser la chose automatiquement.

Augmenter la taille de mémoire scripts

Les opérations précédentes peuvent corriger le problème d’erreur telle que Fatal error: Allowed memory size of 33554432 bytes exhausted.
Mais. Si votre hébergeur vous limite c’est que votre plan d’hébergement n’est pas bien gros. Jouer avec ces réglages peut entraîner une sévère mise en garde voire un blocage de la part de votre hébergeur qui considèrera votre blog devenu trop gourmand. Pesez bien à quelle fin vous réalisez cette modification. Si vous l’installer juste pour pouvoir uploader quelques gros fichiers, pas de problème. Mais si vous comptez générer plus de mémoire et de bande passante, attention aux mesures punitives. Par ailleurs, il faut savoir que c’est une méthode généralement vaine. Ce que l’hébergeur permet ne peut pas réellement être modifié, malgré tous les fichiers ini placés. D’où l’importance, avant toute opération complexe, d’analyser son hébergement au moyen des plugins proposés en haut de cet article.

Et si votre hébergeur ne vous convient pas, changez-en. Ce n’est pas la mer à boire. Pour migrer votre site ailleurs, utilisez l’excellent plugin WP Migrate DB pour générer la copie vraiment utile de migration de votre base de données, téléchargez tout votre dossier wp-content et c’est tout. Il n’y a plus qu’à installer un WP, créer une base de données vide, importer la vôtre et charger votre wp-content avec Filezilla. C’est tout.

Taille et poids des images

La question de la taille de vos images en pixels se gère via l’onglet Réglages puis Médias. Elle est aussi définie par le thème WP que vous utilisez. Si vous créez votre propre thème ou que vous en changez, la taille de vos vignettes peut être différente. Même remarque si vous utilisez un plugin pour vos galeries d’images. En cas de changement de plugin ou de changement de vos réglages, il faut modifier en masse la taille des images générées précédement. Utilisez le plugin AJAX Thumbnail Rebuild à cette fin. Très simple et véritablement pratique.

Le poids de vos images dépend de leur définition. Il n’est franchement pas utile de laisser un énorme poids pour afficher sur Internet. Compressez vos images à maximum 72. Si vous ne savez pas comment faire, installez le plugin Smushit qui le fera automatiquement pour vous à chaque (nouvel) upload. Pour les anciennes déjà uploadées, deux solutions : soit aller dans votre bibliothèque et cliquez sur resmush à côté de chaque image, soit  télécharger sur votre bureau votre dossier uploads et envoyer vos images dans l’outil smush.it de Yahoo. Ensuite vous pouvez télécharger vos images compressées et les renvoyer en ligne. Attention, si vous envoyez trop d’images à la fois cela génèrera une erreur. Recommencez avec moins (une 20aine). Le nec plus ultra de cet outil est que vous téléchargez vos images compressées au format zip en conservant les adresses de dossiers.

Quelques plugins utiles pour la gestion des Uploads et téléchargements

Faites votre choix… (via votre tableau de bord du site concerné en faisant ‘ajouter un plugin’). Ils sont tous compatibles minimum WP 3.0.5 et 3.1

Download Manager ou WP-files base sont des gestionnaire de téléchargements pour vos visiteurs, avec classement par catégories : ces 2 plugins sont sensiblement les mêmes, le choix est pour moi subjectif.

Flexupload multithread uploader : permet d’uploader sans limite de taille.

Inline Uploads : permet d’uploader dans un répertoire de son choix (mais dans wp-content).

Faster Image Insert : permet d’ajouter et modifier ses uploads en masse dans l’édition de posts

Allow Word/Powerpoint/Excel file uploads : tout est dans le titre .

Email Before Download : tout est dans le titre.

Easy FTP Upload ou bSuite Drop Folder Media Uploader permettent de charger de gros fichiers par FTP.

Overwrite Uploads : vous évite d’uploader plusieurs fois le même fichier en écrasant l’ancien du même nom. A voir la quantité de doublons inutiles chez mes clients, je recommande…

Enable Media Replace : dans le même genre, indispensable outil pour modifier une image existante sans devoir éditer le post où elle est. Allez dans la bibliothèques des Médias, cliquez sur l’image à modifier puis sur Upload a new media. Choisissez évidemment la 2e option qui permet de mettre à jour également les url et titres.

AJAX Thumbnail Rebuild : Outil indispensable pour régénérer de nouveaux formats d’images déjà insérées. A utiliser après avoir définis les nouveaux réglages dans la partie Médias.

WP-Smush.it : Indispensable pour diminuer le poids de vos images.

Embedd PDF : permet d’inclure via un shortcode un PDF au format google doc.

Google Doc Viewer : évite d’uploader vos fichiers s’ils se trouvent dans votre doc google ou permet de lier un lien vers un document google, ou d’user d’un shortcode pour les PDF.

Ne pas oublier de configurer ces plugins et de lire la FAQ d’installation de ceux-ci.

Créer un sous-dossier uploads pour les plugins

Un article sans snippet est comme des pâtes sans sel :). Pour les codeurs et bidouilleurs, une solution pour permettre un sous-dossier réservés aux médias insérés par les plugins dans le dossier Uploads. C’est Yoast qui nous l’offre :

1
2
3
4
5
6
7
8
add_filter('upload_dir', 'my_upload_dir');
$upload = wp_upload_dir();
remove_filter('upload_dir', 'my_upload_dir');   funcion my_upload_dir($upload) {
    $upload['subdir']   = '/sub-dir-to-use' . $upload['subdir'];
    $upload['path']     = $upload['basedir'] . $upload['subdir'];
    $upload['url']      = $upload['baseurl'] . $upload['subdir'];
    return $upload;
}
add_filter('upload_dir', 'my_upload_dir');
$upload = wp_upload_dir();
remove_filter('upload_dir', 'my_upload_dir');   funcion my_upload_dir($upload) {
	$upload['subdir']	= '/sub-dir-to-use' . $upload['subdir'];
	$upload['path']		= $upload['basedir'] . $upload['subdir'];
	$upload['url']		= $upload['baseurl'] . $upload['subdir'];
	return $upload;
}

That’s All Folks !