2011-09-18 32 views
5

Tôi có một vấn đề nhỏ với tải nhiều file trong PHP,

i có dạng html này:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
    <input type="file" name="myfile[]" /> 
    <input type="submit" /> 
</form> 

và đây là upload.php:

<?php print_r($_FILES); ?> 

khi tôi đang gửi một tập tin nó chỉ cho tôi này:

Array 
(
[myfile] => Array 
    (
     [name] => Array 
      (
       [0] => Krw_Qe4QKmI.mp3 
      ) 

     [type] => Array 
      (
       [0] => 
      ) 

     [tmp_name] => Array 
      (
       [0] => 
      ) 

     [error] => Array 
      (
       [0] => 1 
      ) 

     [size] => Array 
      (
       [0] => 0 
      ) 

    ) 

) 

cho đến nay rất tốt.

vấn đề bắt đầu khi tôi nâng cấp hình thức của tôi với trang này:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
    <input type="file" name="myfile[]" /> 
    <input type="file" name="myfile[]" /> 
    <input type="submit" /> 
</form> 

bây giờ, khi tôi gửi 2 file, nó chỉ cho tôi này:

Array 
(
) 

như vậy, vấn đề là những gì ở đây? cảm ơn bạn, Mor.

+0

bạn có một lỗi trong mảng đầu tiên bạn hiển thị (với mã '1') xem ở đây cho những gì nó có nghĩa là:... http: // www .php.net/manual/en/features.file -upload.errors.php –

Trả lời

1

Rất nhiều đề xuất tại đây. Tôi sẽ cho nó đi. Điều này dựa trên nhận xét của @Pekka.

Tôi thấy bạn đang thử nghiệm với các tệp mp3, có thể vượt quá giới hạn tải lên PHP. Điều này là do trong ví dụ đầu tiên của bạn, bạn thực sự có mã lỗi tải lên 1: The uploaded file exceeds the upload_max_filesize directive in php.ini.. Vì vậy, ngay cả tải lên nắm đấm của bạn đã không hoạt động. Tải lên thành công luôn có 0 là mã lỗi.

Modify bạn php.ini với upload_max_filesize = 10M (hoặc 20M, hoặc 300M; cẩn thận về M đó - điều đó có nghĩa MB - như bỏ qua, mang lại rất nhiều đau đầu

Tôi đề nghị thử nghiệm với các file nhỏ hơn, như tôi. thấy bạn có giới hạn của 2M để tải lên

Further reading

0

Kiểm tra cài đặt max_file_uploads của bạn - có phải là nhiều hơn 1 không?

echo ini_get('max_file_uploads'); 
+0

tôi đã chạy lệnh này nhưng không có gì xuất hiện, tôi cũng kiểm tra trong tập tin ini nó tự nó không có một điều như vậy –

1

Tôi đặt cược rằng bạn đã vượt quá post_max_size và PHP chỉ bỏ qua các tệp đã tải lên.

Mặc định là 8MB. Nếu bạn cố tải lên một tệp 5MB, mọi thứ sẽ hoạt động. Nếu bạn cố gắng tải lên 2 tệp 5MB, nó sẽ phát hành 8MB và PHP bỏ qua dữ liệu đã đăng.

Thử tăng giá trị của post_max_size trong tệp php.ini của bạn.

+0

tôi đã làm, không có gì thay đổi. –

+0

bật [log_errors] (http://php.net/log_errors) và xem lỗi error_log – arnaud576875

+0

của máy chủ của bạn ngay bây giờ, cho đến bây giờ tôi có thể xem tôi có tải lên 2 tệp nhỏ không nhưng nó có kích thước lớn hơn, không phải –

0

Các tập tin php.ini phải có một cái gì đó như thế này:

;;;;;;;;;;;;;;;; 
; File Uploads ; 
;;;;;;;;;;;;;;;; 

; Whether to allow HTTP file uploads. 
file_uploads = On 

; Temporary directory for HTTP uploaded files (will use system default if not 
; specified). 
;upload_tmp_dir = 

; Maximum allowed size for uploaded files. 
upload_max_filesize = 50M 


; Maximum number of files that can be uploaded via a single request 
max_file_uploads = 20 

Thay đổi các giá trị của upload_max_filesize và sau đó khởi động lại máy chủ

+0

Tôi không có phần max_file_uploads trong tệp ini của mình, bạn có thể cho tôi biết hệ thống nào bạn làm việc và tải xuống liên kết tới tệp ini của bạn không? –

+0

@Mor bạn cần phải sửa đổi php.ini của riêng bạn, nó không tốt tải về ai đó của –

+0

đó là lạ, bạn có thể sao chép và dán mã trong tập tin php.ini và đây là nội dung của [php.ini đề nghị] (http://pastebin.com/QAebhauV) Tôi có php 5.2.17 – tttony

0

Vấn đề là name="myfile[]" thuộc tính của bạn trên của bạn đầu vào-Element.

Bạn không thể giới thiệu sau này trong PHP vào tệp của mình, nếu bạn không có số nhận dạng cho nó. Tài liệu PHP cung cấp cho bạn gợi ý tương tự: http://www.php.net/manual/en/features.file-upload.multiple.php

Nhiều tệp có thể được tải lên bằng tên khác cho đầu vào.

Vì vậy, hãy đổi tên thành "myfile1" và "myfile2" (hoặc một số tên tốt hơn;)) sẽ giải quyết được sự cố của bạn.

+0

Trên thực tế, bạn * có thể * tải lên nhiều tệp có cùng tên đầu vào, giống như OP được sử dụng: 'name []'. – nevvermind

0

Để làm được nhiều file cùng một lúc, hãy thử đưa ra một chỉ số như thế này:

<? For ($count = 0; count < SOME_MAXIMUM; ++$count;): ?> 
<input type="file" name="myfile[<? Echo $count; ?>]" /> 
<? endfor; ?> 
0

tôi đã cùng một vấn đề .. Tất cả những nỗ lực của tôi đều vô ích, nhưng cuối cùng tôi đã tìm thấy một lưu ý khá tốt tại PHP Thủ công. Nó đơn giản nhưng hoàn toàn phù hợp với tôi ...

"Nhiều upload có thể không hoạt động nếu bạn sử dụng một bảng để hiển thị hình thức đầu vào của bạn khi <form> phần tử là bên yếu tố <table>. Trong trường hợp này chỉ các tập tin đầu tiên sẽ được tải lên.

Đặt thành phần <form>bên ngoài thành phần để làm cho thiết bị hoạt động. "

Làm theo liên kết này để biết ghi chú đầy đủ, có chức năng sắp xếp lại nhiều tệp tệp tải lên theo cách dễ sử dụng.

http://php.net/manual/en/features.file-upload.multiple.php

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