2010-05-30 34 views
20

Tại sao tệp chỉ được tải lên một phần?Tại sao tệp chỉ được tải lên một phần?

Tôi đang cải thiện xử lý lỗi trong tập lệnh tải lên tệp PHP của mình và tôi đang cố gắng tìm ra cách xử lý UPLOAD_ERR_PARTIAL đúng cách.

Tôi có nên nhắc người dùng thử tải lên lại tệp hay tôi nên thông báo cho họ rằng có vấn đề nghiêm trọng hơn đang ngăn họ tải lên tệp có thể hợp pháp?

Trả lời

5

Tại sao tệp chỉ được một phần được tải lên?

Điều này thường do người dùng hủy tải lên.

Tôi có nên nhắc nhở người dùng thử tải lên các tập tin một lần nữa, hoặc nên tôi thông báo với họ rằng có một hơn vấn đề nghiêm trọng mà đang ngăn họ tải lên một tập tin hợp pháp có thể ?

Bạn nên nhắc họ thử lại và nếu sự cố tiếp tục liên hệ với chủ sở hữu trang web, bao gồm càng nhiều chi tiết càng tốt.

+0

Làm cách nào chúng tôi xử lý trường hợp này ở phía máy khách với JS và phía máy chủ với PHP? Ý tôi là, nếu người dùng bắt đầu tải lên tệp và sau đó nhấp vào nút hủy trên trang trong khi tệp vẫn đang được tải lên, tôi có thể gọi '.abort()' cách PHP sẽ nhận được thông tin mà người dùng đã hủy tải lên? – tonix

24

UPLOAD_ERR_PARTIAL được cung cấp khi không tìm thấy ranh giới mime sau dữ liệu tệp. Nguyên nhân có thể xảy ra là việc tải lên đã bị người dùng hủy (nhấn ESC, v.v.).

Tôi nghĩ rằng đủ để thông báo cho người dùng rằng tệp chỉ được tải lên một phần và thử lại sẽ khắc phục sự cố.

+8

+1 để làm rõ "khi ranh giới mime không được tìm thấy sau khi dữ liệu tệp" – Seb

+0

@Seb Hoàn toàn +1 điều đó. Đã được chạy vào một vấn đề tương tự và ít lưu ý bên đã đưa tôi đến nguồn. :) –

+0

Trong trường hợp của tôi, tôi đã quên '--' hàng đầu trên ranh giới cuối cùng (trong trường hợp này sau). Bài học kinh nghiệm :-) – ninetwozero

2

Vâng, tải lên tập tin có thể bị gián đoạn bởi:

Out of gian ở nơi

gián đoạn kết nối

tập tin Thiệt hại

Sai tên

mở rộng Wrong

vv ...

Điều tốt nhất bạn có thể làm là để xác minh và bảo vệ quá trình tải lên với không xác minh trước khi thực sự gửi các tập tin đến máy chủ ...

Lần đầu tiên tôi đã thực hiện một kịch bản tập tin tải lên, tôi đã sử dụng 1 dòng mã, bây giờ, cùng một kịch bản có vẻ như một trang web;)

chỉnh sửa (ví dụ cho việc kiểm soát phần mở rộng và kích thước tập tin):

if ((

($file_up["type"] == "image/gif") || 

($file_up["type"] == "image/jpeg") || 

($file_up["type"] == "image/jpg") || 

($file_up["type"] == "image/pjpeg") || 

($file_up["type"] == "image/bmp") || 

($file_up["type"] == "image/tiff") || 

($file_up["type"] == "image/png")) && 

($file_up["size"] < 1050000)) 

{ 

    code if all ok... 


} 
+2

mở rộng sai? có một ví dụ? –

+0

humm ... vâng, hãy tưởng tượng rằng đầu vào của bạn chỉ nên làm việc với ảnh và người dùng cố gắng tải lên một tài liệu, nếu đó chỉ là hình ảnh, bạn nên từ chối bất kỳ phần mở rộng tệp nào khác (xem câu trả lời của tôi trong phần chỉnh sửa bình luận ... – Zuul

+3

Câu hỏi đặt ra là tên/tiện ích mở rộng tệp gây ra UPLOAD_ERR_PARTIAL như thế nào? – webbiedave

8

Đây là một bài cũ, nhưng tôi đã có một vấn đề ngẫu nhiên của UPLOAD_ERR_PARTIAL, và gửi giải pháp của tôi.

Vấn đề là sau khi tải lên 2/3 tôi nhận được lỗi UPLOAD_ERR_PARTIAL, mà không bị gián đoạn bởi ứng dụng khách.

Sự cố của tôi liên quan đến máy chủ Keep-Alive.

Tôi giải quyết nó bằng cách chèn vào cuối của kịch bản PHP để tải lên

header ("Connection: close"); 

buộc việc đóng cửa của kết nối. Điều này đã giải quyết được vấn đề của tôi.

Tôi hy vọng ai đó có thể trợ giúp.

Thank này LINK

+1

Làm việc cho tôi! Tôi đã dành hàng giờ nghĩ rằng kịch bản của tôi đã thất bại/flakey có vẻ như đó là máy chủ. – Treemonkey

+0

@Treemonkey vui vẻ hữu ích ;-) –

+0

Được sao chép tại đây: http://stackoverflow.com/questions/12425394/post-data-is-missing-when-posting-the-same-data-in-rapid-sequence –

1

này có thể giúp một số người, nhưng tôi đã có cùng một vấn đề. Giải pháp của tôi là gỡ cài đặt libapache2-mod-php5filter và thay thế bằng libapache2-mod-php5

+1

Cảm ơn bạn! Không có gì khác làm việc cho tôi. Điều này đã làm! –

0

Tôi gặp vấn đề tương tự và có liên quan đến gói libapache2-mod-php5filter, tôi xóa phần p và sự cố. Tôi hy vọng ai đó có thể giúp đỡ.

+1

@yellowantphil trông giống như một câu trả lời biên giới với tôi –

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