Как изменить расширение файла с помощью PHP?

Как изменить расширение файла с помощью PHP?

Пример: photo.jpg to photo.exe

В современных операционных системах имена файлов очень хорошо могут содержать периоды задолго до расширения файла, например:

my.file.name.jpg 

PHP предоставляет способ найти имя файла без расширения, которое учитывает это, а затем просто добавить новое расширение:

 function replace_extension($filename, $new_extension) { $info = pathinfo($filename); return $info['filename'] . '.' . $new_extension; } 
 substr_replace($file , 'png', strrpos($file , '.') +1) 

Измените любое расширение на то, что вы хотите. Замените png тем, что было бы вашим желаемым расширением.

Когда у вас есть имя файла в строке, сначала используйте регулярное выражение, чтобы заменить расширение на расширение по вашему выбору. Вот небольшая функция, которая сделает это:

 function replace_extension($filename, $new_extension) { return preg_replace('/\..+$/', '.' . $new_extension, $filename); } 

Затем используйте функцию rename (), чтобы переименовать файл с новым именем файла.

Заменить расширение, сохранить информацию о пути

 function replace_extension($filename, $new_extension) { $info = pathinfo($filename); return ($info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '') . $info['filename'] . '.' . $new_extension; } о function replace_extension($filename, $new_extension) { $info = pathinfo($filename); return ($info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '') . $info['filename'] . '.' . $new_extension; } 

Просто замените его регулярным выражением:

 $filename = preg_replace('"\.bmp$"', '.jpg', $filename); 

Вы также можете расширить этот код, чтобы удалить другие расширения изображений, а не только bmp:

 $filename = preg_replace('"\.(bmp|gif)$"', '.jpg', $filename); 

Лучший путь:

 substr($filename, 0, -strlen(pathinfo($filename, PATHINFO_EXTENSION))).$new_extension 

Изменения внесены только в часть расширения. Остается другая информация без изменений.

Это безопасно.

Для поклонников регулярных выражений, модифицированная версия решения Preg_replace от Thanh Trung, которая всегда будет содержать новое расширение (так что, если вы напишете программу преобразования файлов, вы не будете случайно перезаписывать исходный файл с результатом):

 preg_replace('/\.[^.]+$/', '.', $file) . $extension 

Вы можете использовать basename () :

 $oldname = 'path/photo.jpg'; $newname = (dirname($oldname) ? dirname($oldname) . DIRECTORY_SEPARATOR : '') . basename($oldname, 'jpg') . 'exe'; 

Или для всех расширений:

 $newname = (dirname($oldname) ? dirname($oldname) . DIRECTORY_SEPARATOR : '') . basename($oldname, pathinfo($path, PATHINFO_EXTENSION)) . 'exe'; 

Наконец, используйте rename () :

 rename($oldname, $newname); 

Мне нужно было это, чтобы изменить все расширения изображений с галереей на нижний регистр. Я закончил делать следующее:

 // Converts image file extensions to all lowercase $currentdir = opendir($gallerydir); while(false !== ($file = readdir($currentdir))) { if(strpos($file,'.JPG',1) || strpos($file,'.GIF',1) || strpos($file,'.PNG',1)) { $srcfile = "$gallerydir/$file"; $filearray = explode(".",$file); $count = count($filearray); $pos = $count - 1; $filearray[$pos] = strtolower($filearray[$pos]); $file = implode(".",$filearray); $dstfile = "$gallerydir/$file"; rename($srcfile,$dstfile); } } 

Это сработало для моих целей.