У меня есть такая строка
folder1/folder2/folder3/13007805372971.jpg
Что мне нужно сделать, чтобы добавить строку перед именем файла? Я хотел бы выглядеть так
folder1/folder2/folder3/sometext_13007805372971.jpg
Вы можете использовать функцию pathinfo , которая предназначена для разбора путей.
$s='folder1/folder2/folder3/13007805372971.jpg'; $x='sometext_'; $fos=pathinfo($s); $s2=$fos['dirname'].DIRECTORY_SEPARATOR.$x.$fos['basename'];
Вы можете использовать класс SplFileInfo
$file = new SplFileInfo('folder1/folder2/folder3/13007805372971.jpg'); printf('%s/sometext_%s', $file->getPath(), $file->getBasename());
Можно также использовать константу DIRECTORY_SEPARATOR вместо жесткого кодирования косой черты в вызове.
DIRECTORY_SEPARATOR
Демонстрационная версия
$filePath = 'folder1/folder2/folder3/13007805372971.jpg'; $str = 'sometext_'; $newPath = dirname($filePath) . DIRECTORY_SEPARATOR . $str . basename($filePath);
Этого можно добиться, используя следующий код.
$string = 'folder1/folder2/folder3/13007805372971.jpg'; $last_slash_pos = strrpos($string, '/'); $path = substr($string, 0, $last_slash_pos + 1); $filename = substr($string, $last_slash_pos + 1); $filename_prefix = 'sometext_'; $new_filename = $path . $filename_prefix . $filename; echo $new_filename; // Output: folder1/folder2/folder3/sometext_13007805372971.jpg
Просмотр прямой версии
Получите компоненты имени файла, используя pathinfo, а затем подключите ваше дополнение, как требуется.
$path_parts =pathinfo($string); $string = $path_parts['dirname'].'/sometext_'.$path_parts['basename'];
preg_replace("/\/([^\/]+)$/", "/sometext_\\1", "folder1/folder2/folder3/13007805372971.jpg");
Принимает часть после последней косой черты и добавляет sometext_ сразу после нее.