Php заменить расширение файла

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

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

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

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

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

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

function replace_extension($filename, $new_extension)
substr_replace($file , 'png', strrpos($file , '.') +1) 

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

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

function replace_extension($filename, $new_extension)

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

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 

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

$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'; 

мне нравится strrpos() подход, потому что он очень быстрый и простой — однако вы должны сначала убедиться, что имя файла вообще имеет какое-либо расширение. Вот функция, которая чрезвычайно эффективна и заменит существующее расширение или добавит новое, если его не существует :

function replace_extension($filename, $extension) < if (($pos = strrpos($filename , '.')) !== false) < $filename = substr($filename, 0, $pos); >return $filename . '.' . $extension; > 

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

  • ответ Тони Маро ( pathinfo ) заняло 0,000031040740966797 секунд. Примечание. Недостатком является отсутствие полного пути.
  • ответ Мэтта ( substr_replace ) заняло 0,000010013580322266 секунд.
  • ответ Джереми Рутена ( preg_replace ) заняло 0.00070095062255859 секунд.
Читайте также:  Php номер строки в запросе

Поэтому я бы предложил substr_replace , так как это проще и быстрее, чем другие.

Как примечание, есть следующее решение, которое заняло 0,000014066696166992 секунды. Все еще не мог победить substr_replace :

$parts = explode('.', $inpath); $parts[count( $parts ) - 1] = 'exe'; $outpath = implode('.', $parts); 

Источник

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

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

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

function replace_extension($filename, $new_extension)
substr_replace($file , 'png', strrpos($file , '.') +1) 

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

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

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

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

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

function replace_extension($filename, $new_extension) о function replace_extension($filename, $new_extension)

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

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

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

$filename = preg_replace('"\.(bmp|gif)$"', '.jpg', $filename); 
substr($filename, 0, -strlen(pathinfo($filename, PATHINFO_EXTENSION))).$new_extension 

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

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

preg_replace('/\.[^.]+$/', '.', $file) . $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 () :

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

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

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

Читайте также:  Pandas python создание csv

Источник

Работа с именами файлов в PHP

Набор PHP функций для работы с путями и именами файлов.

Получить имя файла

echo basename('path/file.png'); // file.png

Имя файла без расширения

$info = pathinfo('path/file.png'); echo $info['filename']; // file /* или */ echo pathinfo('path/donut.png', PATHINFO_FILENAME); // file

Получить расширение файла

echo mb_strtolower(mb_substr(mb_strrchr('path/file.png', '.'), 1)); // png /* или */ echo pathinfo('path/file.png', PATHINFO_EXTENSION); // png

Заменить расширение файла

Заменить расширение .jpeg на .jpg:

$file_name = 'file.jpeg'; $file_new = preg_replace('/\.jpeg$/', '.jpg', $file_name); echo $file_new; // file.jpg

Заменить несколько расширений на одно (.jpg, .jpeg, .png на .webp):

$file_name = 'file.jpeg'; $file_new = preg_replace('/\.(jpg|jpeg|png)$/', '.webp', $file_name); echo $file_new; // file.webp

Дописать текст в конец названия файла

$info = pathinfo('path/file.png'); $name = $info['dirname'] . '/' . $info['filename'] . '-' . time() . '.' . $info['extension']; echo $name; // path/file-1610877618.png

Безопасное сохранение файла

Чтобы не затереть существующий файл на сервере можно применить данную функцию.

В функцию передаётся путь и имя файла, если на сервере уже существует такой файл, функция к концу файла приписывает префикс. Также если директория не существует, пытается её создать.

function safe_file($filename) < $dir = dirname($filename); if (!is_dir($dir)) < mkdir($dir, 0777, true); >$info = pathinfo($filename); $name = $dir . '/' . $info['filename']; $prefix = ''; $ext = (empty($info['extension'])) ? '' : '.' . $info['extension']; if (is_file($name . $ext)) < $i = 1; $prefix = '_' . $i; while (is_file($name . $prefix . $ext)) < $prefix = '_' . ++$i; >> return $name . $prefix . $ext; > // Если в директории есть файл log.txt, файл будет сохранен с названием log_1.txt file_put_contents(safe_file(__DIR__ . '/log.txt'), $text);

Источник

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

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

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

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

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

function replace_extension($filename, $new_extension)

Для меня это лучший ответ, потому что он использует функцию в PHP для того, для чего он был разработан. Он также выполняет вычисления в одной команде, что означает меньше кода на языке C в кишечнике PHP.

Читайте также:  Стек дек очередь python

Я думаю, что это должно сохранить информацию о пути: return $ info [‘dirname’]. «/». $ Info [‘filename’]. » , $ New_extension;

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

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

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

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

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

На самом деле это плохая идея. В современных операционных системах имена файлов могут содержать точки внутри имени, например, при изменении расширения на «.tif», «this.is.a.test.pdf» при использовании в этом случае оно будет заменено на «this.tif». Вместо этого , используйте: $ info = pathinfo ($ filename); вернуть $ info [‘filename’]. «» , $ New_extension;

preg_replace(‘/\.[^.]+$/’, ‘.’ . $extension, $file) чтобы соответствовать последнему найденному . но не будет работать, если файл не имеет расширения

Функция принимает строки, не имеет значения, являются ли эти строки строковыми литералами или строковыми переменными.

@me_ me_ — Почему ты жалуешься на то, что это не ответ мне ? Я только что прокомментировал это почти десять лет назад.

@me_ — То, что ОП не понимает фундаментальных основ языка программирования, прежде чем задавать вопрос о конкретной задаче, не дает ответа, который предполагает, что знание плохое. Если это так, то каждый ответ должен включать вводное руководство по программированию.

@me_ — Что не имеет ничего общего с ОП, не знающим основ, таких как «Строка — это строка, независимо от того, является ли она строковым литералом или переменной»

@me_ — Это просто возвращает нас к моему предыдущему комментарию. Если вы думаете, что это некачественный ответ, потому что это ответ только по ссылке, почему вы направили свой комментарий на меня, чтобы объяснить то, что этот ответ не потрудился бы объяснить, если бы это был не только ответ по ссылке? Направьте свой комментарий на человека, который написал ответ! Или просто отметьте это как низкое качество и двигайтесь дальше!

Источник

Оцените статью