2012-01-06 28 views
7

Tôi đang sử dụng tiện ích mở rộng tiến trình tải lên PHP để truy xuất thông tin về các tệp đang được tải lên hệ thống web của tôi. Tuy nhiên đối với các tệp lớn hơn 2 GB tổng số byte và thời gian các trường còn lại đang được trả lại dưới dạng số âm.Tiến trình tải lên tiện ích mở rộng PHP - trả về tổng số byte âm và thời gian còn lại

Apache đã được thiết lập để đảm bảo rằng các tệp có kích thước tối đa 3 GB có thể được tải lên trang web. Tôi đã thử nghiệm này và nó hoạt động. Tuy nhiên nó hoàn toàn là báo cáo đang quay trở lại không chính xác.

Tôi đã tự hỏi liệu điều này có liên quan đến giới hạn về giá trị PHP hay không và những gì có thể được thực hiện để khắc phục. Tôi tin rằng hệ thống đang sử dụng số nguyên 64 bit. Như các chương trình sau:

echo "PHP_INT_MAX: " . PHP_INT_MAX; 
// PHP_INT_MAX: 9223372036854775807 

Dưới đây là một số thông tin thêm về cách thức hoạt động của thanh tiến trình và được cài đặt: http://www.ultramegatech.com/blog/2010/10/create-an-upload-progress-bar-with-php-and-jquery/

Để có được thông tin mà tôi chỉ cần gọi hàm mở rộng:

$status = uploadprogress_get_info($unique_form_id); 

nào trả lại tổng số byte, thời gian chờ ước tính, byte hiện tại và nhiều thứ khác như được hiển thị bên dưới (với tổng số byte âm):

array(11) { 
    ["upload_id"]=> string(32) "ec75a30c24177ec1579aea93b56224f2" 
    ["fieldname"]=> string(9) "comp_data" 
    ["filename"]=> string(15) "Size_2-09GB.zip" 
    ["time_start"]=> string(10) "1325851749" 
    ["time_last"]=> string(10) "1325851758" 
    ["speed_average"]=> string(5) "93011" 
    ["speed_last"]=> string(6) "112618" 
    ["bytes_uploaded"]=> string(6) "837105" 
    ["bytes_total"]=> string(11) "-2048166056" 
    ["files_uploaded"]=> string(1) "1" 
    ["est_sec"]=> string(9) "-76260228" 
} 

Cập nhật (ngày 6 tháng 1 năm 2012): Tôi cũng đã liên hệ với nhà phát triển tiện ích mở rộng này để xem họ có thể chia sẻ bất kỳ thông tin chi tiết nào không.

Cập nhật (ngày 09 Tháng 1 2012): Nhà phát triển của phần mở rộng đã đáp lại chỉ ra rằng có một vé hiện có liên quan đến vấn đề này: https://bugs.php.net/bug.php?id=59918

Cập nhật (ngày 16 tháng 1 2012): Đã quản lý để thoát khỏi các giá trị âm được trả về bởi phần mở rộng. Tuy nhiên con số được trả lại là cách tắt số byte thực tế so với những gì Windows nói nó nằm trong cửa sổ thuộc tính.

+1

Bạn nhận và hiển thị các tệp như thế nào? – ManseUK

+1

Số âm có vẻ giống như một vòng tròn số nguyên. Có phải tệp có liên quan đến gần hoặc trên 2GB không? – hakre

+0

Có tệp lớn hơn 2GB như được nêu trong câu hỏi trên. – diggersworld

Trả lời

2

Dùng phao và loại bỏ các số thập phân - điều này sẽ làm việc cho những con số này lớn hơn:

$filesize = filesize($large_file); 
printf(Filesize: %.0f\n", $filesize); 

Câu trả lời này sẽ xác nhận nếu bạn đang sử dụng số nguyên 64bit: how to have 64 bit integer on PHP?

Lưu ý: mặc dù có một câu trả lời cho câu hỏi đó mà dường như chỉ ra rằng các số nguyên 64 bit không có sẵn trên các cửa sổ - bạn đang sử dụng hệ điều hành nào?

+0

đã kiểm tra int của tôi bằng liên kết bạn đã cung cấp ... chúng đang sử dụng 64 bit. Đã thêm câu hỏi này vào câu hỏi. Tôi không nhận được các tập tin bản thân mình, phần mở rộng PHP cung cấp nó. – diggersworld

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