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

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

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

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

Previous topic - Next topic

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