2009-03-17 25 views
8

Tôi chắc chắn điều này đã được yêu cầu trước đó, nhưng dường như tôi không thể tìm thấy câu trả lời hay, tôi ở đây, hỏi ... một lần nữa. :)Tiến trình tải lên bằng cách sử dụng PHP/AJAX tinh khiết?

Có cách nào, chỉ sử dụng hỗn hợp HTML, JavaScript/AJAX và PHP để báo cáo tiến độ thực tế của việc tải lên tệp không?

Để trả lời bất kỳ ai đề xuất SWFUpload hoặc tương tự:

Tôi biết tất cả về điều đó. Đã xuống con đường đó. Tôi đang tìm kiếm một giải pháp tinh khiết 100% (và có, tôi biết tôi có lẽ sẽ không nhận được nó).

Trả lời

1

Nếu bạn có thể cài thêm các gói PECL vào PHP của bạn, có gói uploadprogress.

Cách đơn giản nhất là chỉ sử dụng swfupload.

+0

Tôi đã đánh dấu đây là câu trả lời, vì cách đơn giản nhất là chỉ sử dụng SWFUpload. :) –

+4

có, nhưng tôi nghĩ nó không đủ điều kiện là "thuần PHP/AJAX"? :) – Jacco

0

Tôi muốn giới thiệu bạn với năm FancyUpload một thử nghiệm đó là một giải pháp thực sự tuyệt vời cho thanh tiến trình và nó không được gắn liền với php. Checkout cũng các công cụ khác tại digitarald.de

cổ vũ

1

Có cách nào, chỉ sử dụng một hỗn hợp của HTML, JavaScript/AJAX và PHP, báo cáo tiến độ thực tế của một tập tin tải lên?

Tôi không biết cách nào để theo dõi các tệp HTML thuần túy (nhiều phần/biểu mẫu) tải lên trong PHP được tải trên máy chủ web.

Bạn cần có quyền truy cập vào tiến trình của trình phân tích cú pháp đa dữ liệu/biểu mẫu khi dữ liệu được đưa vào, nhưng điều này có vẻ không thể được vì cách truy cập cơ quan yêu cầu HTTP từ PHP ($HTTP_RAW_POST_DATAphp://input) được ghi nhận là “Không khả dụng với enctype =" multipart/form-data "".

Bạn có thể tải lên tệp được hỗ trợ tập lệnh bằng Firefox bằng cách sử dụng trường tải lên FileList để lấy nội dung của tệp để gửi theo cách được phân đoạn hoặc không phải đa phần. Vẫn còn một loạt các công việc để phân tích cú pháp mặc dù.

(Bạn thậm chí có thể chạy một kịch bản PHP như một máy chủ độc lập trên các cổng khác chỉ tiếp nhận tập tin tải lên, sử dụng riêng mã HTTP xử lý của bạn. Nhưng đó là một số tiền rất lớn của công việc đối với tương đối ít lợi ích.)

+0

Có một phần mở rộng PECL thực hiện chính xác những gì cần thiết. – Jacco

-1

IMHO, đây là vấn đề mà trình duyệt web nên giải quyết. Chúng tôi có đồng hồ đo tiến độ để tải xuống, vậy tại sao không cho tải lên?

Hãy xem này ví dụ:

http://www.fireuploader.com/

+0

Nếu bạn có thể bao gồm chức năng này trong tất cả các trình duyệt thị trưởng cho chúng tôi, nó sẽ là một giải pháp rất tốt đẹp. Cho đến lúc đó, chúng tôi sẽ chỉ phải làm việc với những hạn chế hiện tại và tự xây dựng chức năng. – Jacco

2

Nếu bạn đã cài đặt APC (và vào thời điểm này, bạn thực sự cần; nó sẽ là tiêu chuẩn trong PHP6), nó có tùy chọn bật theo dõi tải lên. Có some documentation và Rasmus đã viết code sample sử dụng YUI.

+0

Điều này sẽ là hoàn hảo, ngoại trừ nó không được cài đặt máy chủ của tôi, và nó không phải là chủ đề an toàn, do đó, không có điểm thực sự. Có lẽ trong PHP6. ;) –

5

giám sát tập tin tải lên của bạn với PHP/Javascript yêu cầu tiện ích PECL:

uploadprogress

Một ví dụ điển hình của mã cần thiết để hiển thị các tiến bộ cho người dùng của bạn là:

Uber Uploader

Nếu tôi không nhầm thì nó sử dụng JQuery để giao tiếp với PHP.


Bạn cũng có thể tự viết, Không phức tạp.

Thêm phần tử bị ẩn làm thành phần đầu tiên của biểu mẫu tải lên, có tên UPLOAD_IDENTIFIER.

Thăm dò ý kiến ​​một kịch bản PHP mà các cuộc gọi uploadprogress_get_info(UPLOAD_IDENTIFIER) Nó trả về một mảng chứa những điều sau đây:

 
time_start  - The time that the upload began (unix timestamp), 
time_last  - The time that the progress info was last updated, 
speed_average - Average speed in bytes per second, 
speed_last  - Last measured speed in bytes per second, 
bytes_uploaded - Number of bytes uploaded so far, 
bytes_total - The value of the Content-Length header sent by the browser, 
files_uploaded - Number of files uploaded so far, 
est_sec  - Estimated number of seconds remaining. 

Hãy PHP trả lại thông tin để javascript và bạn nên có rất nhiều thông tin. Tùy thuộc vào đối tượng, bạn có thể sẽ không sử dụng tất cả thông tin có sẵn.

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