如何使用PHP更改文件的扩展名?
Ex:photo.jpg到photo.exe
答案 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)
已提出许多好的答案。我认为评估和比较他们的表现会有所帮助。结果如下:
%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
)的pathinfo
)的回答花费了0.000010013580322266秒。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);
}
}
这符合我的目的。