[英]How can I change a file's extension using PHP?
如何使用 PHP 更改文件的擴展名?
例如:photo.jpg 到 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) {
$info = pathinfo($filename);
return ($info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '')
. $info['filename']
. '.'
. $new_extension;
}
在字符串中包含文件名后,首先使用正則表達式將擴展名替換為您選擇的擴展名。 這是一個可以做到這一點的小函數:
function replace_extension($filename, $new_extension) {
return preg_replace('/\..+$/', '.' . $new_extension, $filename);
}
然后使用rename()函數用新文件名重命名文件。
只需用正則表達式替換它:
$filename = preg_replace('"\.bmp$"', '.jpg', $filename);
您還可以擴展此代碼以刪除其他圖像擴展名,而不僅僅是 bmp:
$filename = preg_replace('"\.(bmp|gif)$"', '.jpg', $filename);
對於正則表達式愛好者,Thanh Trung 的“preg_replace”解決方案的修改版本將始終包含新擴展名(這樣如果您編寫文件轉換程序,您不會意外地用結果覆蓋源文件)將是:
preg_replace('/\.[^.]+$/', '.', $file) . $extension
更好的方法:
substr($filename, 0, -strlen(pathinfo($filename, PATHINFO_EXTENSION))).$new_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);
已經提出了許多好的答案。 我認為評估和比較他們的表現會很有幫助。 結果如下:
pathinfo
) 的回答耗時 0.000031040740966797 秒。 注意:它的缺點是不包括完整路徑。substr_replace
) 的回答耗時 0.000010013580322266 秒。preg_replace
) 的回答耗時 0.00070095062255859 秒。 因此,我建議substr_replace
,因為它比其他的更簡單、更快。
請注意,以下解決方案也需要 0.000014066696166992 秒。 仍然無法擊敗substr_replace
:
$parts = explode('.', $inpath);
$parts[count( $parts ) - 1] = 'exe';
$outpath = implode('.', $parts);
我喜歡strrpos()
方法,因為它非常快速和直接 - 但是,您必須首先檢查以確保文件名有任何擴展名。 這是一個 function,它的性能非常好,將替換現有的擴展或添加一個新的擴展(如果不存在):
function replace_extension($filename, $extension) {
if (($pos = strrpos($filename , '.')) !== false) {
$filename = substr($filename, 0, $pos);
}
return $filename . '.' . $extension;
}
我需要它來將所有帶有圖庫的圖像擴展名更改為小寫。 我最終做了以下事情:
// 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);
}
}
這對我的目的有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.