2008-10-01 42 views
5

Có ai biết về bất kỳ phương pháp nào để tạo thanh tiến trình tải tệp lên trong PHP không? Tôi thường nghe nói rằng điều đó là không thể.Tạo thanh tiến trình tệp trong PHP

Tôi có một ý tưởng, nhưng không chắc chắn nó có hoạt động hay không: có tệp tải lên bình thường, nhưng thay vào đó hãy gửi đến khung nội tuyến. Khi điều này được gửi, lưu trữ thông tin tệp (kích thước và vị trí tạm thời) trong phiên. Đồng thời, bắt đầu một cuộc gọi AJAX đến mỗi 10 giây để kiểm tra kích thước của tệp so với kích thước được lưu trữ trong phiên. Điều này sẽ trả về kích thước cho AJAX và sau đó một thanh tiến trình sẽ được kích thước và có thể hiển thị kích thước được tải lên cho người dùng.

Suy nghĩ?

Trả lời

3

Bạn có thể thử YUI hay Prototype hoặc JQuery

+0

jQuery trông giống như cách tốt nhất để đi! Thxs, không biết nó có một addon. –

0

Trong PHP thuần túy, bạn đúng: không thể.

Nếu bạn AJAX-ify này, thì bạn có thể làm những gì bạn mô tả. Các mét tiến bộ duy nhất tôi từng thấy là trong Javascript hoặc Flash, mặc dù tôi tưởng tượng Silverlight cũng có thể làm điều đó.

6

Bạn đang có khá nhiều tìm ra cách để làm điều đó. Vấn đề chính là bạn thường không có quyền truy cập vào kích thước của tệp được tải lên cho đến khi tải lên xong.

Có giải pháp cho việc này: Bật APC, bạn truy cập thông tin này nếu bạn bao gồm trường được gọi là "APC_UPLOAD_PROGRESS" và sử dụng apc_fetch() để truy xuất mục nhập bộ nhớ cache với trạng thái.

Ngoài ra còn có một plugin gọi là uploadprogress nhưng nó không được tài liệu rất tốt và không hoạt động trên Windows (cuối cùng tôi đã kiểm tra).

Cách khác là sử dụng Flash để thực hiện. Xem các tập lệnh như FancyUpload.

Trước khi APC xuất hiện, tôi phải viết một tập lệnh CGI trong C đã ghi thông tin vào một tệp văn bản. APC có vẻ như là một cách tốt hơn để làm điều đó ngay bây giờ.

Hy vọng điều này sẽ hữu ích.

+0

Khi tôi thấy câu hỏi này, điều tiến bộ upload của APC đến tâm là tốt. Tôi biết rằng Rasmus thậm chí đã tạo ra một mẫu cho nó ở đâu đó, nhưng tôi không thể tìm thấy nó ngay bây giờ. – Powerlord

+0

Rasmus: http://progphp.com/progress.phps – davethegr8

5

Cho đến nay, cách phổ biến nhất để làm điều này là SWFUpload: http://www.swfupload.org/

Tuy nhiên, nó thể với PHP tinh khiết, chỉ rất khó khăn và rất thực nghiệm. Tôi sẽ xem liệu tôi có thể tìm thấy liên kết hay không.

Chỉnh sửa: Theo nhận xét trên php.net, kể từ 5.2 có một móc để xử lý tiến trình tải lên.http://us.php.net/features.file-upload#71564

More giải thích:

Rasmus' Ví dụ:

0

Theo tôi, giải pháp tốt nhất/dễ nhất là xây dựng một widget flash nhỏ, bao gồm nút 'Tải lên' và một thanh tiến trình. Flash cung cấp cho bạn thông tin phản hồi rất chi tiết về số lượng dữ liệu đã được tải lên cho đến nay và bạn có thể xây dựng một thanh tiến trình tốt đẹp dựa trên đó. Không yêu cầu bỏ phiếu không hiệu quả của máy chủ và trên thực tế không yêu cầu bất kỳ thay đổi nào đối với mã máy chủ của bạn. Google cho 'người tải lên flash' và bạn sẽ tìm thấy nhiều người đã viết những tiện ích này và rất vui khi bán chúng cho bạn.

0

Tôi khuyên bạn nên xem SWFUpload để thực hiện những gì bạn muốn. Nó khá linh hoạt và hỗ trợ xếp hàng các tệp, vì vậy bạn thậm chí có thể xử lý tải lên nhiều tệp.

0

Bạn chắc chắn sẽ muốn đi với digitgerald's FancyUpload. Đó là Mootools & swfuplaod dựa, và nó thể thao một hàng đợi tốt đẹp với statusses, tiến bộ, eta vv Nó thực sự là phương pháp slickest tôi đã nhìn thấy để tải lên các tập tin. Đối với trường hợp sử dụng cá nhân của tôi, ivé đã sử dụng nó để cho phép khách hàng chọn 1,2 gb tệp PDF và tải chúng lên. những cái mới hơn được đổi tên và phiên bản tự động, cùng được bỏ qua vv

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