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

News:

CPG Release 1.6.27
change DB IP storage fields to accommodate IPv6 addresses
remove use of E_STRICT (PHP 8.4 deprecated)
update README to reflect new website
align code with new .com CPG website
correct deprecation in captcha

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_, хотя с последним нужно смотреть более детально!