Advanced search  

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Pages: [1]   Go Down

Author Topic: ID как имя файла  (Read 9632 times)

0 Members and 1 Guest are viewing this topic.

Shaman

  • Coppermine novice
  • *
  • Offline Offline
  • Posts: 37
ID как имя файла
« on: October 29, 2008, 08:05:40 pm »

Имеется задача при загрузке называть имена файлов по их ID.
Так понял, что последний генерируется автоматически, при запросе picmgmt.inc.php
Code: [Select]
INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize...
Если выбрать с базы максимальное число pid и добавить к нему 1, это не решает задачу, поскольку изображения иногда удаляются пользователем, а генерация новых ID в mySQL продолжается в изначальном порядке.

Указывать по описаному выше методу pid вручную, в коде не надежно, поскольку пользователи одновременно добавляя файл, могут вызвать ошибку системы.

Как лучше реализовать поставленную задачу?
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page
Re: ID как имя файла
« Reply #1 on: November 02, 2008, 05:31:59 pm »

Имеется задача при загрузке называть имена файлов по их ID.
Так понял, что последний генерируется автоматически, при запросе picmgmt.inc.php
Code: [Select]
INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize...
Если выбрать с базы максимальное число pid и добавить к нему 1, это не решает задачу, поскольку изображения иногда удаляются пользователем, а генерация новых ID в mySQL продолжается в изначальном порядке.

Указывать по описаному выше методу pid вручную, в коде не надежно, поскольку пользователи одновременно добавляя файл, могут вызвать ошибку системы.

Как лучше реализовать поставленную задачу?

Используйте простой код:
Code: [Select]
$fileid =  mysql_insert_id();http://ru2.php.net/manual/ru/function.mysql-insert-id.php

Только не забывайте, что Вам нужно будет файл переименовать на лету, чтобы они с нужными именем уже сохранился на диск физически.
И уже в случае успешного сохранения оного на диске, обновить его имя в базе данных.
А сразу номер файла вставлять в базу - это действительно опасно.
Logged

Shaman

  • Coppermine novice
  • *
  • Offline Offline
  • Posts: 37
Re: ID как имя файла
« Reply #2 on: November 03, 2008, 11:23:25 am »

Спасибо! Не знал о такой функции.

Сделал следующим образом:
в файле picmgmt.inc.php (function add_picture) в запросе
Code: [Select]
$query = "INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename ...очистил VALUE 'filename'

Прямо ниже дал определение новго имени файла
Code: [Select]
$newname = mysql_insert_id();
После определил формат
Code: [Select]
$extension = ltrim(substr($filename, strrpos($filename,'.')),'.');
Выполнил запрос
Code: [Select]
mysql_query("UPDATE {$CONFIG['TABLE_PICTURES']} SET filename = '".$newname.'.'.$extension."' WHERE pid = '".$newname."' ");
Реализовал присвоение id-имен файлам
Code: [Select]
rename($image, $CONFIG['fullpath'] . $filepath . $newname . '.' . $extension);
rename($thumb, $CONFIG['fullpath'] . $filepath . $CONFIG['thumb_pfx'] . $newname . '.' . $extension);
rename($normal, $CONFIG['fullpath'] . $filepath . $CONFIG['normal_pfx'] . $newname . '.' . $extension);

У меня все работает, надеюсь ничего не упустил?
Logged

Makc666

  • Moderator
  • Coppermine addict
  • ****
  • Offline Offline
  • Gender: Male
  • Posts: 1614
  • Русский (ISO-8859-1) - Russian - Русский (Windows)
    • Makc's home page
Re: ID как имя файла
« Reply #3 on: November 10, 2008, 01:41:26 pm »

Реализовал присвоение id-имен файлам
Code: [Select]
rename($image, $CONFIG['fullpath'] . $filepath . $newname . '.' . $extension);
rename($thumb, $CONFIG['fullpath'] . $filepath . $CONFIG['thumb_pfx'] . $newname . '.' . $extension);
rename($normal, $CONFIG['fullpath'] . $filepath . $CONFIG['normal_pfx'] . $newname . '.' . $extension);

У меня все работает, надеюсь ничего не упустил?
Единственное что, как я понимаю, Вы не учли то, что для некоторых объектов может не существовать промежуточного изображения, т.е. normal_, а для других объектом может не существовать thumb_, хотя с последним нужно смотреть более детально!
Logged
Pages: [1]   Go Up
 

Page created in 0.03 seconds with 19 queries.