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

时间:2008-10-11 07:11:55

标签: php file

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

Ex:photo.jpg到photo.exe

11 个答案:

答案 0 :(得分:40)

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

my.file.name.jpg

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

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

答案 1 :(得分:21)

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

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

答案 2 :(得分:10)

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

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

答案 3 :(得分:8)

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

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

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

答案 4 :(得分:7)

答案 5 :(得分:3)

只需用regexp替换它:

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

您还可以扩展此代码以删除其他图片扩展程序,而不仅仅是bmp:

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

答案 6 :(得分:3)

更好的方式:

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

仅对扩展部分进行了更改。保持其他信息不变。

安全。

答案 7 :(得分:1)

对于正则表达的粉丝, Thanh Trung的'preg_replace'解决方案的修改版本将始终包含新扩展(因此,如果您编写文件转换程序,您将不会意外地用结果覆盖源文件)将是:

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

答案 8 :(得分:1)

您可以使用basename()

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

或者对于所有扩展程序:

rename($oldname, $newname);

最后使用rename()

createExampleDir

答案 9 :(得分:0)

已提出许多好的答案。我认为评估和比较他们的表现会有所帮助。结果如下:

    Tony Maro(%matplotlib inline from ipywidgets import interactive import matplotlib.pyplot as plt import numpy as np def f(m, b): plt.figure(2) x = np.linspace(-10, 10, num=1000) plt.plot(x, m * x + b) plt.ylim(-5, 5) plt.show() interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5)) output = interactive_plot.children[-1] output.layout.height = '350px' m = interactive_plot.children[0] b = interactive_plot.children[1] b.default_value = 0 def set_b_default(button): b.value = b.default_value m.observe(set_default) interactive_plot )的
  • answer用了0.000031040740966797秒。注意:它的缺点是不包括完整路径。
  • 马特(pathinfo)的回答花费了0.000010013580322266秒。
  • Jeremy Ruten(substr_replace)的回答花费了0.00070095062255859秒。

因此,我建议使用preg_replace,因为它比其他方法更简单,更快捷。

请注意,以下解决方案也花费了0.000014066696166992秒。仍然无法击败substr_replace

substr_replace

答案 10 :(得分:-2)

我需要将图库中的所有图片扩展名更改为小写。我最终做了以下事情:

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

这符合我的目的。