ID как имя файла ID как имя файла
 

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]

Main Menu

ID как имя файла

Started by Shaman, October 29, 2008, 08:05:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Shaman

Имеется задача при загрузке называть имена файлов по их ID.
Так понял, что последний генерируется автоматически, при запросе picmgmt.inc.php
INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize...

Если выбрать с базы максимальное число pid и добавить к нему 1, это не решает задачу, поскольку изображения иногда удаляются пользователем, а генерация новых ID в mySQL продолжается в изначальном порядке.

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

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

Makc666

Quote from: Shaman on October 29, 2008, 08:05:40 PM
Имеется задача при загрузке называть имена файлов по их ID.
Так понял, что последний генерируется автоматически, при запросе picmgmt.inc.php
INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize...

Если выбрать с базы максимальное число pid и добавить к нему 1, это не решает задачу, поскольку изображения иногда удаляются пользователем, а генерация новых ID в mySQL продолжается в изначальном порядке.

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

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

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

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

Shaman

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

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

Прямо ниже дал определение новго имени файла
$newname = mysql_insert_id();

После определил формат
$extension = ltrim(substr($filename, strrpos($filename,'.')),'.');

Выполнил запрос
mysql_query("UPDATE {$CONFIG['TABLE_PICTURES']} SET filename = '".$newname.'.'.$extension."' WHERE pid = '".$newname."' ");

Реализовал присвоение id-имен файлам
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);


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

Makc666

Quote from: Shaman on November 03, 2008, 11:23:25 AM
Реализовал присвоение id-имен файлам
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_, хотя с последним нужно смотреть более детально!