Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как добавить порядковый номер к имени файла?
Kuzma92  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 1 месяц, 21 день
Карма:




Здравствуйте, уважаемые специалисты.

При добавлении новой статьи создается новый файл (без расширения) с именем, которое я беру из названия - $_POST['name']. Так:

$url__title = preg_replace("/[^a-z0-9]+/i","_",$_POST['name']);

$f=fopen("db/rec/$url__title","w+");
fwrite($f,"1\r\n$_POST[recommendation]\r\n$decoded_cat\r\n$_POST[name]\r\n");
fclose($f);


Но если создается статья с названием, которое уже существует, следовательно и файл такой уже существует, то по понятным причинам файл просто перезаписывается. Поэтому я хотел бы, чтобы к файлу (если такой уже существует) добавлялся порядковый номер через тире, то есть так:

db/rec/good_news
db/rec/good_news-1
db/rec/good_news-2
db/rec/good_news-3
и т.д.


Я пытаюсь сделать это следующим образом:

$url__title = preg_replace("/[^a-z0-9]+/i","_",$_POST['name']);

$filename=$url__title;
$fn=$filename.'';
$i=1;
while(file_exists($fn)){
$fn=$filename.'-'.$i.'';
$i++;
}
$f=fopen('db/rec/'.$fn.'','w+');
fwrite($f,"1\r\n$_POST[recommendation]\r\n$decoded_cat\r\n$_POST[name]\r\n");
fclose($f);


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

За недостаточностью знаний в PHP прошу помощи у специалистов.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 1 месяц, 21 день
Карма:




Прошу прощения за мою невнимательность. Дело было вот в чем:
while(file_exists('db/rec/'. $fn)){

вот так теперь всё работает как нужно.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 6464
Пользователь №: 35718
На форуме: 12 лет, 5 месяцев, 8 дней
Карма: 208




Kuzma92, это крайне ненадёжный способ. В web нельзя мыслить одним пользователем. Думайте, что в одну секунду к скрипту могут обратиться 100 пользователей. В противном случае у вас будут "пропадать маляры".

https://xakep.ru/2001/06/19/12860/


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
miketomlin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 267
Пользователь №: 43211
На форуме: 8 лет, 8 месяцев, 28 дней
Карма: 3




Kuzma92, используйте обычную БД и автоинкрементальные числовые id. Если нужны слаги, в многопользовательских системах они обычно объединяются с числовыми id в адресе, например /good_news-1, и роутинг выполняется только по числовой компоненте, а уже потом для исключения анлима дублей страниц сравнивается слаговая компонента.

Если делаете для себя или ограниченного кол-ва пользователей, то просто дубли слагов исключаете за счет объявления этого поля юником. Отлавливаете ошибку дублирующегося ключа и добавляете какое-то число.

Последнее можно и без автомата делать, полагаясь на юзеров. Только смотрите, чтобы они не теряли введенный контент при возникновении такой ошибки. Например, в наших системах сначала создается запись с адресным id (допустим слагом), а потом уже добавляется контент. А если надо отредактировать слаг, то для этого в API есть ф-ция переименования.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса