forum.coppermine-gallery.net

Support => Русский (Russian) => Language Specific Support => cpg1.4.x FAQ (Russian) => Topic started by: Shaman on October 29, 2008, 08:05:40 pm

Title: ID как имя файла
Post by: Shaman 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 вручную, в коде не надежно, поскольку пользователи одновременно добавляя файл, могут вызвать ошибку системы.

Как лучше реализовать поставленную задачу?
Title: Re: ID как имя файла
Post by: Makc666 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 (http://ru2.php.net/manual/ru/function.mysql-insert-id.php)

Только не забывайте, что Вам нужно будет файл переименовать на лету, чтобы они с нужными именем уже сохранился на диск физически.
И уже в случае успешного сохранения оного на диске, обновить его имя в базе данных.
А сразу номер файла вставлять в базу - это действительно опасно.
Title: Re: ID как имя файла
Post by: Shaman 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);

У меня все работает, надеюсь ничего не упустил?
Title: Re: ID как имя файла
Post by: Makc666 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_, хотя с последним нужно смотреть более детально!