Имеется задача при загрузке называть имена файлов по их ID.
Так понял, что последний генерируется автоматически, при запросе picmgmt.inc.php
INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize...
Если выбрать с базы максимальное число pid и добавить к нему 1, это не решает задачу, поскольку изображения иногда удаляются пользователем, а генерация новых ID в mySQL продолжается в изначальном порядке.
Указывать по описаному выше методу pid вручную, в коде не надежно, поскольку пользователи одновременно добавляя файл, могут вызвать ошибку системы.
Как лучше реализовать поставленную задачу?
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 (http://ru2.php.net/manual/ru/function.mysql-insert-id.php)
Только не забывайте, что Вам нужно будет файл переименовать на лету, чтобы они с нужными именем уже сохранился на диск физически.
И уже в случае успешного сохранения оного на диске, обновить его имя в базе данных.
А сразу номер файла вставлять в базу - это действительно опасно.
Спасибо! Не знал о такой функции.
Сделал следующим образом:
в файле 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);
У меня все работает, надеюсь ничего не упустил?
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_, хотя с последним нужно смотреть более детально!