Upload và xóa file tmp trên server

trang nhập thông tin người dùng và upload file zip lên
-> click confirm (lưu file zip vào thư mục tự tạo tmp)
-> trang review (lable thể hiện thông tin và file), gồm (cancel và save) click save (save database và move file từ thư mục tmp qua thư mục id AUTO_INCREMENT database vừa mới insert).

  • nhưng nếu user click cancel hoặc close browers thì sao? làm sao xóa file rác zip đó trên server?
  • có cách nào không dùng cronjob không?
  • có cách nào qua trang review mà không cần lưu file zip trên server trước không?

php stores all temporary files , that includes uploaded files , in the temporary files directory as specified in the php . ini. Note that for uploads , those files might be removed as soon as the script the file was uploaded to was terminated (so unless you delay that script , you probably won’t see the uploaded file )

Tạm dịch là: webserver nó tự xử, mình không cần làm gì cả

Còn nếu ý bạn là cái dir “tmp” do bạn tự tạo, không phải của webserver, thì nó cũng là dir bình thường, bạn có thể xoá file bằng unlink()

https://www.google.com/search?client=firefox-b-d&q=php+file+upload+temp

2 Likes

umh cái tmp tên là “trash” là mình tự tạo riêng để lưu fileupload cho trang review,
khi upload cái gì lên php sẽ tự động lưu vào tmp, mình sẽ move file tmp đó vào folder “trash” của mình
ý mình là ở trang review người dùng close browers thì file ở thư mục “trash” đó sẽ không bị xóa.
còn nếu không lưu file trước trên server thì sẽ không có file để xem ở trang vreview.
còn thư mục tmp php, thì sau mỗi request hoàn thành nó tự động xóa nên mình không dùng nó để lưu tạm file cho trang review, mình move nó qua filder “trash”.
nhưng khi close browes thì dữ liệu chưa lưu db và file đó thành rác trên server? nặng ổ cứng

Bạn có thể tạo một service cho nó tự động xóa những file rác không sử dụng trong khoàng thời gian nào đó.

trong php có cronjob giống service mà để làm cronjob phải đụng tới config server, có cách nào tối giản hơn không không đụng nhiều tới server.

Ý là bạn submit form, thì file được upload lên dir “trash”; (1)
sau đó, user cần confirm lần nữa thì sẽ tiếp tục move file đến 1 dir khác (ví dụ là my_files); (2)
song song lưu info vào database luôn, đúng không?

Và trong trường hợp user xong bước (1) và close browser, thì file vẫn còn nằm trong dir trash, và bạn không muốn vậy?

Nếu mình hiểu đúng thì dễ thôi mà. Khi thực hiện bước 1, bạn làm thêm động tác là read cái dir “trash” để check xem có file nào trong đó không, nếu có thì xoá nó đi.

Nếu bạn sợ xoá nhầm files do nhiều users sử dụng cùng lúc, thì bạn chỉ cần xoá những file được upload cách hiện tại trong 1 khoảng thời gian là ok (ví dụ như xoá hết những file duoc upload trước đó 24h giờ nếu user ít, hay 5 phút nếu users nhiều)

Cách này thì đơn giản, chả cần đụng tới cron job hay config web server gì cả, mỗi khi user submit form thì sẽ đồng thời thực hiện dọn dẹp luôn cái dir, users nhiều vẫn sử dụng được.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?