WordPress & PHP & 1&1 : Augmenter la mémoire allouée
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/36/d301492722/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 j’ai fait pour augmenter la Mémoire au 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 :
1 |
<?php |
2 |
// set this value to Y if you only want to overwrite old php.ini files |
3 |
// set this value to N if you want to put a php.ini file in every directory |
4 |
$overwriteOnly = "N" ; |
5 |
6 |
if ( $overwriteOnly == "Y" ) echo "Operating in Overwrite Only Mode<br><br>" ; |
7 |
$path = "<span style=" color: #ff0000; ">/homepages/xx/dxxxxxxxxx/htdocs</span>" ; |
8 |
$source = $path . "/php.ini" ; |
9 |
if (! file_exists ( $source )) die ( 'Error - no source php.ini file' ); |
10 |
function search( $dir ) { |
11 |
global $source ; |
12 |
global $overwriteOnly ; |
13 |
$dh = opendir( $dir ); |
14 |
while (( $filename = readdir( $dh )) !== false) { |
15 |
if ( $filename !== '.' AND $filename !== '..' AND $filename !== 'cgi-bin' AND is_dir ( "$dir/$filename" ) ) { |
16 |
$path = $dir . "/" . $filename ; |
17 |
$target = $path . "/php.ini" ; |
18 |
if (! file_exists ( $target ) AND $overwriteOnly == "Y" ) { |
19 |
echo "$path <b>skipped - no php.ini file</b><br>" ; |
20 |
} else { |
21 |
echo "$target <br>" ; |
22 |
if (! copy ( $source , $target )) echo "<b>Write failed for $target </b><br>" ; |
23 |
if ( file_exists ( $target )) chmod ( $target ,0600); |
24 |
} |
25 |
search( $path ); |
26 |
} |
27 |
} |
28 |
closedir ( $dh ); |
29 |
} |
30 |
search( $path ); |
31 |
echo "<br>Done." ; |
32 |
?> |
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
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%
-4 Commentaires-
L’idéal et d’allouer une mémoire juste au dessus de ses besoins pour éviter de donner trop de possibilités en cas de hack. Personnellement j’augmente manuellement la mémoire quand j’en ai besoin, pour faire tourner des scripts ou autres et je la rebaisse ensuite.
Info très utile, mais je doute qu’il soit possible de faire ce genre de manip sur du mutualisé 😉 Il faudrait le préciser dans ton article sinon pas mal de newbies vont se plaindre que cela ne fonctionne pas.
Je ne savais pas que c’était possible. Merci pour le tuyau, il me servira un jour ou l’autre.
Juste un petit commentaire pour vous remercier grandement de ce tutoriel qui m’a été d’une grande aide.
Koko TW