如何使用PHP更改文件的扩展名?

PHL*_*LAK 26 php file

如何使用PHP更改文件的扩展名?

例如:photo.jpg到photo.exe

Ton*_*aro 43

在现代操作系统中,文件名很可能包含文件扩展名之前的句号,例如:

my.file.name.jpg
Run Code Online (Sandbox Code Playgroud)

PHP提供了一种方法来查找没有考虑到这一点的扩展名的文件名,然后只需添加新的扩展名:

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return $info['filename'] . '.' . $new_extension;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该保留路径信息:return $ info ['dirname']."/".$ info ['filename'].'' .$ new_extension; (12认同)
  • 警告:这会丢失路径信息! (10认同)
  • 对我来说,这是最好的答案,因为它在PHP中使用了一个函数来实现它的设计目的.它还可以在一个命令中进行计算,这意味着PHP内容中的C代码更少. (4认同)

Mat*_*tt 21

substr_replace($file , 'png', strrpos($file , '.') +1)
Run Code Online (Sandbox Code Playgroud)

会将任何扩展名更改为您想要的内容.将png替换为您想要的扩展名.

  • 警告:如果找不到任何扩展名,它将破坏您的文件名。 (2认同)

Ale*_*lex 10

替换扩展名,保留路径信息

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


Jer*_*ten 7

在字符串中包含文件名后,首先使用正则表达式将扩展名替换为您选择的扩展名.这是一个小功能,它会做到这一点:

function replace_extension($filename, $new_extension) {
    return preg_replace('/\..+$/', '.' . $new_extension, $filename);
}
Run Code Online (Sandbox Code Playgroud)

然后使用rename()函数使用新文件名重命名该文件.

  • 实际上这是一个坏主意.在现代操作系统中,文件名可能包含名称中的句点,例如,当将扩展名转换为".tif"时,"this.is.a.test.pdf"在此处使用时会将其剥离为"this.tif"而不是,使用:$ info = pathinfo($ filename); return $ info ['filename']."" .$ new_extension; (2认同)
  • `preg_replace('/\.[^.]+$/','.'.$ extension,$ file)`匹配最后找到的`.`但如果文件没有扩展名则不能正常工作 (2认同)