如何区分同一目录中同名文件的区别?

时间:2014-05-02 08:21:39

标签: php mysql sql

我正在用PHP构建音乐上传系统。我希望用户能够将歌曲上传到服务器,当然以后可以访问它。我被告知将mp3文件存储在服务器目录中比将其存储在数据库中更有效。我已经为用户帐户,mp3文件以及像这样的专辑设置了表格

 create table users (
 user_id int(11) NOT NULL AUTO_INCREMENT,
 user_name varchar(64) NOT NULL,
 user_firstname varchar(64) NOT NULL,
 user_lastname varchar(64) NOT NULL,
 user_email varchar(64) NOT NULL,
 user_registration_date datetime NOT NULL,
 PRIMARY KEY (user_id),
 UNIQUE KEY (user_name),
 UNIQUE KEY (user_email)
 ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 CREATE TABLE tracks (
 user_id INT(11) NOT NULL,
 track_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 album_id INT UNSIGNED NOT NULL,
 track_name varchar(64) NOT NULL,
 track_file_name varchar(64) NOT NULL,
 track_artist varchar(20) NOT NULL,
 tag1 varchar(20) DEFAULT NULL,
 tag2 varchar(20) DEFAULT NULL,
 tag3 varchar(20) DEFAULT NULL,
 genre varchar(20) DEFAULT NULL,
 sub_genre varchar(20) DEFAULT NULL,
 full_length ENUM('Yes', 'No') NOT NULL,
 description TEXT,
 PRIMARY KEY (track_id),
 INDEX (track_id),
 INDEX (track_name)
 ) ENGINE = INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 CREATE TABLE albums (
 user_id INT(11) NOT NULL,
 album_name varchar(64) NOT NULL,
 album_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 album_artist varchar(20) NOT NULL,
 album_art_file_name varchar(64),
 INDEX (album_id),
 INDEX (album_name)
 ) ENGINE = INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

这就是我被困住的地方,我可以将文件存储在一个目录中,并在数据库中存储一个文件路径(注意:我只会在我的表中存储该文件的名称,以便将来具有多功能性,例如if我需要更改存储文件的路径)但是如果有人上传了一个同名文件呢?我应该重命名文件以包含其ID吗?这样做是否安全,因为它会根据请求显示在URL中?有没有更好的方法,我是否会发生这种可怕的错误?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

You can try by appending the Unix time stamp at the end of the file name.

like this you can use:

<?php
$date = new DateTime();
$val= $date->getTimestamp();// it will give the unix time stamp
?>

将$ val附加到文件的末尾。