|
Кто знает PHP? Подскажите | ☑ | ||
---|---|---|---|---|
0
D_Pavel
01.08.12
✎
06:30
|
Я в ПХП вообще не разбираюсь, но возникла разовая необхоимость изменить существующий скрипт сохранения файла:
// Validate that we won't over-write an existing file if (file_exists($save_path . $file_name)) { HandleError("File ".$file_name." already exists "); exit(0); } как тут сделать чтобы если файл существует, добавить вконце имени файла цифру в скобках? если цифра уже есть, увеличить ее |
|||
1
Андрюха
01.08.12
✎
06:33
|
$newfilename = $file_name.'(1)';
|
|||
2
D_Pavel
01.08.12
✎
06:34
|
(1) Цифра должна быть перед расширением, типа "file_name(2).jpg"
И ставиться должна не во всех файлах, а только в тех которые уже существуют |
|||
3
Jump
01.08.12
✎
07:16
|
(0)Ну для начала нужно выкинуть нафиг конструкцию if file_exists
У тебя с таким подходом существующих имен файлов просто не должно быть. Перед сохранением нужно вытаскивать регуляркой имя файла до точки. Потом нужно вытаскивать из имени файла цифру в скобках если она есть. Сравнивать текущее имя с именем файла, и в случае совпадения прибавлять к цифре единицу и записывать обратно. |
|||
4
Rie
01.08.12
✎
07:23
|
(3) Зачем выкидывать file_exists? "Не должно быть" и "на самом деле нет" - это две больших разницы, так что, IMHO, if (file_exists(...)) там весьма уместно.
(0) Не совсем понятна задача. $file_name, насколько я понял, где-то порождается. И порождается заведомо без цифры в скобках. Тогда в случае, если такой файл уже существует - надо найти "аналогичный" файл с максимальной цифрой в скобках - и эту цифру увеличить? |
|||
5
D_Pavel
01.08.12
✎
07:52
|
(3) Да, именно это и нужно сделать. Только я ПХП не знаю.
(4) Возможно что $file_name уже будет с цифрой в скобках. Это имя файла который загружается на сервер, может быть любое. |
|||
8
D_Pavel
01.08.12
✎
07:53
|
Пока сделал так, скопипастил куски из того же скрипта:
$path_info = pathinfo($_FILES[$upload_name]['name']); $file_extension = $path_info["extension"]; $name = $path_info["filename"]; $num = 1; while(file_exists($save_path . $file_name)){ $file_name = $name."(".$num++.")".$file_extension; } Не хватает только вытащить цифру в скобках из имени если она есть. |
|||
9
Андрюха
01.08.12
✎
07:54
|
$newfilename = explode(".", $filename);
$ext = $newfilename[count($newfilename)-1]; $newfilename .= '(1)'.$ext; |
|||
10
D_Pavel
01.08.12
✎
07:56
|
(9) это не работает если имя файла было например "file_name(2).jpg" , уже писал в (2)
|
|||
11
D_Pavel
01.08.12
✎
07:56
|
А, я там про другое писал. Ну все равно не то немного
|
|||
12
Андрюха
01.08.12
✎
07:57
|
ну ищи тогда скобку в имени файла и извлекай число, делов-то
|
|||
13
D_Pavel
01.08.12
✎
07:58
|
(12) Так же через explode ?
|
|||
14
Андрюха
01.08.12
✎
08:00
|
(13) Можно ей http://ru2.php.net/manual/ru/function.explode.php
|
|||
15
D_Pavel
01.08.12
✎
08:00
|
(12) Как найти число в скобках в именни при условии:
Перед числом должна быть открывающаяся скобка, после числа должна быть закрывающаяся скобка, после которой конец строки. (имя файла уже получил без расширения) |
|||
16
D_Pavel
01.08.12
✎
08:01
|
(14) Не очень она подходит для этих целей. Есть что попроще?
|
|||
17
Андрюха
01.08.12
✎
08:02
|
(16) Нормально она подходит, куда еще проще? Ну в цикле строку перебирай если есть желание.
|
|||
18
Jump
01.08.12
✎
08:02
|
(15)Что то вроде
preg match('/(\(\d+\))/', "$filename", $numberfile); Если есть цифра в скобках она будет в $numberfile |
|||
19
D_Pavel
01.08.12
✎
08:03
|
(18) Спасибо, это то что нужно!
|
|||
20
Андрюха
01.08.12
✎
08:05
|
Если с регулярными дружишь, то preg_split
|
|||
21
D_Pavel
01.08.12
✎
08:07
|
(17) Это представь какой алгоритм:
Разбить строку через открывающиеся скобки, получить последнюю подстроку, разбить ее через закрывающиеся скобки, проверить что получилось всего две подстроки, проверить что последняя подстрока пустая, проверить что первая это число. Как-то хреново. (20) preg_split посмотрю тоже, спасибо всем. |
|||
22
y88
01.08.12
✎
08:20
|
сначала preg_match - получем цифру в скобках, инкремент
preg_replace - замещаем на новую |
|||
23
D_Pavel
01.08.12
✎
08:37
|
(22) Спасибо. Разобрался
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |