Набор PHP функций для работы с путями и именами файлов.
echo mb_strtolower(mb_substr(mb_strrchr('path/file.png', '.'), 1)); // png
/* или */
echo pathinfo('path/file.png', PATHINFO_EXTENSION); // png
Заменить расширение .jpeg на .jpg:
$file_name = 'file.jpeg';
$file_new = preg_replace('/\.jpeg$/', '.jpg', $file_name);
echo $file_new; // file.jpg
Заменить несколько расширений на одно (.jpg, .jpeg, .png на .webp):
Чтобы не затереть существующий файл на сервере можно применить данную функцию.
В функцию передаётся путь и имя файла, если на сервере уже существует такой файл, функция к концу файла приписывает префикс. Также если директория не существует, пытается её создать.
function safe_file($filename)
{
$dir = dirname($filename);
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
$info = pathinfo($filename);
$name = $dir . '/' . $info['filename'];
$prefix = '';
$ext = (empty($info['extension'])) ? '' : '.' . $info['extension'];
if (is_file($name . $ext)) {
$i = 1;
$prefix = '_' . $i;
while (is_file($name . $prefix . $ext)) {
$prefix = '_' . ++$i;
}
}
return $name . $prefix . $ext;
}
// Если в директории есть файл log.txt, файл будет сохранен с названием log_1.txt
file_put_contents(safe_file(__DIR__ . '/log.txt'), $text);