Подтвердить что ты не робот

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

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

Ex: photo.jpg to photo.exe

4b9b3361

Ответ 1

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

// 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);
  }
}

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

Ответ 2

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

my.file.name.jpg

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

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return $info['filename'] . '.' . $new_extension;
}

Ответ 3

substr_replace($file , 'png', strrpos($file , '.') +1)

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

Ответ 4

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Ответ 8

Лучший способ:

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

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

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

Ответ 9

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

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

Ответ 10

Вы можете использовать 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);