2011-01-14 40 views
5

Tôi có một tập lệnh PHP mở thư mục cục bộ để sao chép và xử lý một số tệp. Nhưng những tệp này có thể không đầy đủ, vì chúng đang được tải lên bằng một quá trình FTP chậm và tôi không muốn sao chép hoặc xử lý bất kỳ tệp nào chưa được tải lên hoàn toàn.Phát hiện bằng php nếu tệp đang được tải lên hoặc đang mở

Có thể trong PHP để tìm hiểu xem tệp vẫn đang được sao chép (nghĩa là, đọc từ) hoặc được ghi vào?

Tôi cần tập lệnh của mình để xử lý chỉ những tệp đã được tải lên hoàn toàn.

Quá trình ftp bây giờ, upload file song song, và nó kéo dài hơn 1 giây cho mỗi filesize để thay đổi, vì vậy thủ thuật này không làm việc cho tôi ngay bây giờ, bất kỳ phương pháp nào khác cho thấy

Trả lời

4

Bạn có quyền kiểm soát kịch bản qua quá trình FTP? Nếu vậy, có tập lệnh tải lên tải lên tệp [FILENAME] .complete (tệp văn bản trống) sau khi quá trình tải lên chính hoàn tất, do đó tập lệnh xử lý biết rằng tệp hoàn tất nếu có tệp * .complete trùng khớp ở đó.

+0

đây là vấn đề, tôi không có quyền kiểm soát tập lệnh tải lên, tôi chỉ có một thư mục mà tôi có thể tìm thấy tệp của mình để xử lý bất kỳ lúc nào, vì vậy tôi phải phát hiện xem tệp có hoàn thành hoặc không – albanx

3

+1 đến @MidnightLightning cho đề xuất tuyệt vời của mình. Nếu bạn không có quyền kiểm soát quá trình, bạn có một vài tùy chọn:

Nếu bạn biết kích thước cuối cùng của tệp thì nên sử dụng filesize() để so sánh kích thước hiện tại với kích thước đã biết. Tiếp tục kiểm tra cho đến khi chúng khớp nhau.

Nếu bạn không biết kích thước cuối cùng sẽ trở nên phức tạp hơn một chút. Bạn có thể sử dụng filesize() để kiểm tra kích thước của tệp, chờ một hoặc hai giây và kiểm tra lại. Nếu kích thước không thay đổi thì quá trình tải lên sẽ hoàn tất. Vấn đề với phương pháp thứ hai là nếu tập tin của bạn tải lên quầy hàng vì lý do gì nó có thể cung cấp cho bạn một dương tính giả. Vì vậy, thời gian để chờ đợi là chìa khóa.

+0

+1; Tôi cũng sẽ đề xuất điều này, nếu bạn không có quyền kiểm soát các tập tin. – MidnightLightning

+0

Tôi cũng đã thử các giải pháp đó, và đôi khi chúng hoạt động đôi khi, nhưng quy trình ftp bây giờ, tải lên các tệp song song và mất hơn 1 giây để các tệp thay đổi, vì vậy mẹo này hiện không hoạt động cho tôi, bất kỳ phương pháp nào khác gợi ý? – albanx

+0

@albanx - Tôi nghĩ lựa chọn duy nhất của bạn trong trường hợp đó là tăng thời gian chờ đợi. Hoặc kiểm tra nhiều lần trước khi bạn quyết định tải lên đã dừng lại – Cfreak

2

Bạn không chỉ định loại hệ điều hành bạn đang sử dụng, nhưng nếu đó là hộp kiểu Unix, bạn phải có fuser và/hoặc lsof khả dụng. fuser sẽ báo cáo về ai đang sử dụng một tệp cụ thể và lsof sẽ liệt kê tất cả các tệp đang mở (bao gồm cả ổ cắm, fifos, .so's, v.v ...). Một trong số đó có thể được sử dụng để giám sát thư mục của bạn.

Trên cửa sổ kết thúc, có một vài công cụ miễn phí từ Sysinternals thực hiện tương tự. handle có thể thực hiện thủ thuật

+0

xin lỗi, rất tiếc là tôi có máy chủ windows 2008 – albanx

Các vấn đề liên quan