Простым и безопасным решением будет использование следующей схемы. Это позволит вам ограничить доступ к загруженным файлам и избежать проблемы загрузки файлов .php. Размер файла ограничен размером longblob, который составляет 16 МБ.
CREATE TABLE `files` (
id INT NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
file_name text NOT NULL,
file LONGBLOB NOT NULL,
PRIMARY KEY('id')
);
Вот php-код для загрузки файла:
$user_file=file_get_contents($_FILES['user_file']['tmp_name']);
//Make the file binary safe
$user_file=mysql_real_escape_string($user_file);
$file_name=mysql_real_escape_string($_FILES['user_file']['name']);
$user_file=mysql_real_escape_string($user_file);
mysql_query("insert into files (user_id,file_name,file)values ("$_SESSION[user_id]","$file_name","$user_file");
Контроль доступа может быть осуществлен путем проверки user_id файла. content-type
файла пользователя легко подделать, поэтому не доверяйте $_FILE[name][type]
, однако это должен быть правильный тип, когда вы разрешаете пользователю загрузить файл. Например, pdf должен иметь этот тип содержимого.
header('Content-type: application/pdf');