Ok - allows you to break it into several sub-answers;
Question:
- Is this a good logic in your opinion - Can this lead problems in the future - What would you offer for this functionality
Answer:
The logic seems sonic - but I'm curious where you will store the images? Inside public_html - or outside the web root? If you have images inside public_html - and allow the browser to access them directly, this will allow users to βguessβ other user folders and access them. You need to store data safely.
To make images outside the website and make sure that only authorized users are available to them - you should use readfile () . Something like this will do the trick
function user_file($file_name = "") { if ($file_name) { // Ensure no funny business names to prevent directory transversal etc. $file_name = str_replace ('..', '', $file_name); $file_name = str_replace ('/', '', $file_name); // now do the logic to check user is logged in if (Auth::check()) { // Serve file via readfile() - we hard code the user_ID - so they // can only get to their own images readfile('../your_app/samples/'.Auth::user()->id.'/'.$file); } } }
Question:
I think this will lead to a huge database, secondly to id, after x time when there will be more users, the identifier will increase, and I know that it will sound strange, but since many users upload images, they lead to huge id, I mean that it may reach millions.
Answer:
According to the mySQL function pages :
We use MySQL Server with databases that contain 50 million records. We also know users who use a MySQL Server with 200,000 tables and about 5,000,000,000 rows.
So these are 5 billion lines. You might get to a few million. Thus, you are safe here (depending on your equipment).
Question:
... but as many users upload images, this will result in a huge id, which I mean, it will probably reach millions, is there any way to solve this problem?
Answer:
If you don't want to store millions of records and worry about performance, one option is to keep the folder table, but discard the image table. Instead, you can use scandir () in the folder and get PHP to get the file names from the directory itself. Then you do not have much overhead.
<?php $list_of_user_files = scandir("$user_id/$folder_id"); foreach ($list_of_user_files as $file) { echo "File: $file <br>"; } ?>