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 déc. 10, 2025 par Daniel Caillibaud
Personne assignée Chargement en cours
Suivi du temps Chargement en cours

Forge communautaire SPIP | Charte d'utilisation | Signaler un problème sur ce site