Non avete considerato il limite di 20 caratteri. Versione con il limite, e che ignora eventuali "finte estensioni":
Mi piacciono le regexpCodice PHP:
$orig = "tizio_caio_sempronio_etuttiglialtri.jpg";
preg_match("/^(.{0,20}).*(\.[^.]+)$/", $orig, $result);
$new = $result[1] . "xxxyyyzzz";
$ext = $result[2];
$final = $new . $ext;
echo $final;
![]()