Sahen
@Sahen
ох уж это программирование.....

Как изменить часть строки?

Извиняюсь за ламерский вопрос, только учусь.
После загрузки изображения на сервер через форму нужно сменить его имя на уникальное для директории в которую оно было загружено.
Написал "перебиралку" имен файлов папки которая будет генерировать рандом до тех пор пока этот рандом не станет уникальным для этой, конкретной папки. Вот только не могу разобраться как из oldName.jpg сделать newRandomName.jpg.
Делал через rename() но у картинок могут быть разные расширения. Еще дописывал к старому имени новое типа - newNameOldName.jpg. Но суть в том что нужно полностью новое имя.
Может как-то через preg_replace() но не знаю на что должно быть похоже regExp в таком случае.
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
abler98
@abler98
Software Engineer
Самый простой вариант:
$filename = 'uploaded-file.png';
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$filename = sprintf('%s.%s', uniqid('image-'), $ext); // image-583dd92c4d5b4.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
DmitryIvaneychik
@DmitryIvaneychik
Developer in VoxImplant
Ну я полагаю, правильнее сразу менять, смысл дважды его пересохранять.
Вы же явно используете что-то вроде php.net/manual/ru/function.move-uploaded-file.php

Вот Вам про расширения: https://habrahabr.ru/post/37753/

Ну а сгенерировать уникальное имя можно и стандартными средствами: php.net/manual/ru/function.tempnam.php
Ответ написан
Комментировать
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
1. Не мучайте файловую систему, всякими переборами... которые там не нужны.
2. Если Вам нужно уникальное имя файла - его можно сгенерировать множеством способов, например, функция microtime вернёт время в милисекундах. И так как, чисто гипотетически, вероятность загрузки > 1000 файлов в секунду равна примерно нулю (в Вашем случае точно) - цифры всегда будут уникальными, не зависимо от папок... Если планируется >1000 файлов в минуту, можно ещё подставлять рандомное число.
3. Для замены строк, есть str_replace
4. Расширение файла получить не сложно, есть масса способов того
5. Есть масса способов, получить имя файла без расширения, что бы аменить его через [п.3]

Надеюсь, Вы понимаете, к чему я это всё... Вам нужно просто хорошенько обдумать задачу, в будущем этот навык будет крайне полезен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы