Имя: Пароль:
IT
Веб-мастеринг
Кто знает 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
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) Спасибо. Разобрался