Это удалит все между последним подчеркиванием и .
. Если имя файла не имеет .
или не имеет _
, оно не изменит имя файла:
$filename = 'whatever_test_123234545.gif';
$new_filename = preg_replace('/_[^_.]*\./', '.', $filename);
А чтобы фактически переименовать файл:
rename($filename, $new_filename);