str_replace trop gourmand en RAM
Description du bug / Comment le reproduire
Chaque passage de cron provoque un plantage PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 28672 bytes) in …/ecrire/inc/charsets.php on line 728
Comportement attendu
pas de plantage
Piste de résolution
faire un remplacement par morceaux, par ex remplacer
return str_replace(array_keys($vu), array_values($vu), $texte);
par
$chunk_size = 4096; // on utilise des paquets de 4ko (arbitraire)
$result = '';
$search = array_keys($vu);
$replace = array_values($vu)
for ($i = 0; $i < strlen($texte); $i += $chunk_size) {
$chunk = substr($texte, $i, $chunk_size);
$result .= str_replace($search, $replace, $chunk);
}
return $result;
Informations techniques
- Version de SPIP : 4.4.7
- Version de PHP : 8.4.15
Modification effectuée par Daniel Caillibaud