0

we have a web application written in PHP and we want all our users to be able to upload images for e.g. 50MB.

We will create a directory structure so that every user has its own folder like app/user1/images app/user2/images ...

Now everytime a user uploads an image, we need to check if this is still allowed or not but we don't want 1000 users to continously scan our hard drive counting file sizes in their directory. So writing a script that counts all file sizes in a user directory is not an option I guess?

Is there an easier way to calculate used up space per user and limit our app accordingly?

solsol
  • 1,121
  • 8
  • 21
  • 31

2 Answers2

4

Save the size of the uploads in a database table, do a sum (pictures sizes) for the specific user and compare it to their limit when they upload.

Even better to avoid that sum operation you can add the size value of the upload to a column (TotalUploadsSize) in the user table and compare that to the maximum allowed on each upload.

  • Storing this data in a database will better enable scaling out without significant application architecture changes as well. – Warner Mar 26 '10 at 15:13
  • the only problem with this is that we also need to implement subtracting the file size when removing images in several places. – solsol Jun 29 '10 at 14:12
1

You could possibly do something with disk quotas on the filesystem.

See the related question about quotas per directory. If you have or can use XFS then you can setup project quotas.

Zoredache
  • 128,755
  • 40
  • 271
  • 413