各位好:
小弟有一個網站需要控管user是否能夠存取檔案(都是影像檔)
網站後端是PHP7.4
目前是將image base64encode
後存進資料庫(MySQL)並記錄檔案是由哪一個user產生的,限制只能由那一個user存取
存base64的表如下:
CREATE TABLE `user_file` (
`file_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) UNSIGNED NOT NULL,
`file_name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`file_data` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`file_id`) USING BTREE,
INDEX `user_id` (`user_id`) USING BTREE,
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
但發現這個做法效能低落,想請問各位是否有更好的方法做到檔案權限控制
不要將檔案資料存入資料庫,很可怕的。你的又是影像檔。這更可怕了。
基本最好還是將實際檔案放到一個路徑上。如果怕被人家讀取到。
可以放到web目錄外。再交由readfile這個函數來幫你處理。
資料庫就存對應的user、權限跟路徑就好。
你可以參考一下檔案管理的程式碼來做。
將檔案資料存到資料庫內是一件很可怕的事。就算真的要存。也請改成bin欄位格式來處理。