我正在用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中?有没有更好的方法,我是否会发生这种可怕的错误?谢谢你的帮助。
答案 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附加到文件的末尾。