Ces derniers temps, lorsque j’essayai d’utiliser une image un peu lourde sur WordPress, le message suivant apparaissait :

Fatal error: Out of memory (allocated 32243712) (tried to allocate 600 bytes) in /homepages/xx/dxxxxxxxxxx/htdocs/wp-includes/media.php on line 253

Après quelques recherches sur le Net, j’ai rapidement compris que PHP limitait ma capacité mémoire par le memory_limit.

J’ai installé le plugin wp-memory-usage qui me signalait que 61% de ma mémoire était utilisée.

Résultat wp-memory-usage visible dans le tableau de bord.

  • PHP Version : 5.2.14 / 32Bit OS
  • Memory limit : 40 MByte
  • Memory usage : 25.44 MByte
  • 64%

Alors voici comment augmenter la Mémoire maxi.

Créer un fichier que vous nommez php.ini dans lequel vous écrivez les 2 lignes suivantes :

upload_max_filesize = 32M
post_max_size = 32M

Attention la taille maximum de mémoire dépend de votre hébergeur. Renseignez vous avant de définir cette valeur. Pour ma part je suis chez 1&1 et 32M est le maximum.

Jusque là c’est assez simple. Maintenant ça devient un peu plus compliqué car il faut copier ce fichier dans tous les répertoires de votre Blog ou site.

Mais comme toujours il y a une astuce.

Créez un fichier php que vous nommerez phpini.php par exemple dans lequel vous écrivez les lignes suivantes :

<pre><?php
// set this value to Y if you only want to overwrite old php.ini files
// set this value to N if you want to put a php.ini file in every directory
$overwriteOnly = "N";

if ($overwriteOnly == "Y") echo "Operating in Overwrite Only Mode<br><br>";
$path = "/homepages/xx/dxxxxxxxxx/htdocs";
$source = $path . "/php.ini";
if (!file_exists($source)) die('Error - no source php.ini file');
function search($dir) {
  global $source;
  global $overwriteOnly;
  $dh = opendir($dir);
  while (($filename = readdir($dh)) !== false) {
    if ( $filename !== '.' AND $filename !== '..' AND $filename !== 'cgi-bin' AND is_dir("$dir/$filename") ) {
      $path = $dir."/".$filename;
      $target = $path . "/php.ini";
      if (!file_exists($target) AND $overwriteOnly == "Y") {
        echo "$path <b>skipped - no php.ini file</b><br>";
      } else {
        echo "$target <br>";
        if (!copy($source,$target)) echo "<b>Write failed for $target </b><br>";
        if (file_exists($target)) chmod($target,0600);
    }
      search($path);
    }
  }
  closedir($dh);
}
search($path);
echo "<br>Done.";
?></pre>

Il s’agit simplement d’un script qui va copier pour vous le fichier php.ini dans tous les répertoires.

Attention : la ligne $path devra être ajusté selon votre propre emplacement. En vous connectant sur votre compte 1&1 vous trouverez les répertoires de votre site de la forme /homepages/xx/dxxxxxxxxx.

Les fichiers phpini.php et php.ini devront être placés à la racine de votre blog via FTP ou autre moyen.

Ensuite il suffit d’ouvrir ton navigateur internet et d’écrire l’adresse url de ton fichier phpini.php et de lancer la copie.

Vous pouvez ensuite supprimer votre fichier phpini.php.

Voici le résultat wp-memory-usage après modification :

  • PHP Version : 5.2.14 / 32Bit OS
  • Memory limit : 128 MByte
  • Memory usage : 25.44 MByte
  • 20%

Articles similaires :


  • Bonjour !

    Je viens de faire cette manip et ça a fonctionné à merveille ! Merci ! Mais j’ai un peu galéré, le code donné dans cette page pour phpini.php était buggé, j’ai du copié le code dispo sur la page 1&1 et là c’est passé !

    Merci encore pour la manip :)

  • Ced

    Bonjour,

    Je viens d’effectuer la manip et cela à fonctionner à merveille avec le script phpini.php fourni par 1&1 tout comme Nassim.

    Merci pour cette astuce!

  • Sur 1&1 le memory_limit est verrouillé au niveau serveur. Même si on le change par un php.ini, le phpinfo indique bien la quantité de mémoire qu’on souhaite (64, 128, etc) mais en fait le serveur continue de n’en allouer que 32Mo. C’est noté dans la FAQ de 1&1.

  • Jeft

    En effet, c’est limité à 32Mo mais par défaut 1&1 n’en alloue que 24Mo. Le gain est tout de même significatif.

  • Laurent

    Hey !!! J’ai essayé la manip sur un site test, et effet ça marche niquel !! ça faisait un moment que cherchais une solution!!!

    Seulement je voulais savoir avant de l’appliquer sur le site officiel, est-ce que c’est vraiment autorisé ???
    Genre si 1&1 s’en rend compte, est-ce qu’ils peuvent fermer le site ou autres choses ??
    Merci en tout cas.

  • Jeft

    C’est parfaitement autorisé. Et par ailleurs 1&1 autoriserait maintenant à monter jusqu’à 40Mo.

  • Caro

    Merci !
    Pour ceux qui ne savent pas où trouver le chemin vers le fichier htdocs :
    Via L’Espace Client 1&1
    Dans votre Espace Client, cliquez sur Configuration des Domaines Sélectionnez la case la gauche du domaine Cliquez sur Infos
    Vous trouvez alors Répertoire d’accueil avec une valeur semblable à /homepages/xx/dxxxxxxxxx/htdocs/.

  • thomasgdm

    Bonjour,
    j’ai fait la manip indiqué et quand je rentre l’url pour effectuer la copie j’ai le message suivant:

    Error – no source php.ini file

    Mes deux fichier sont pourtant bien à la racine de mon blog.
    Merci d’avance!

  • Raphael

    super merci !!!!

  • Darknote

    vous avez quel offre chez 1&1? Moi j’offre classique et j’ai 90MBytes de mémoire allouée.

  • Darknote
  • Eric Toulon

    j’ai une erreur qui a complètement fait planté wordpress…
    « upload_max_filesize = 32M post_max_size = 32Mupload_max_filesize = 32M post_max_size = 32M
    Warning: Cannot modify header information – headers already sent by »

  • CharlesLouis

    Merci Jeft !
    J’ai réglé mon problème en moins de 3 minutes grâce à ce post.

    https://gist.github.com/charleslouis/c9e7bdbdb4a27b2cff1f

  • Maxime R

    Même problème pour moi…