0

配列であるファイル入力がありますが、以前は機能していませんでした。複数のファイルに対してエラーがスローされるようで、最新のファイルをアップロードするだけです。何を間違えたのかわからない。

<input type="file" name="userfile[]" id="userfile" class="multi" />

次に、私のコントローラーで:

$upload_files = $_FILES;
var_dump($upload_files['userfile']['name']);
// get the selected files out of the array
for($i = 0; $i < count($upload_files['userfile']['name']); $i++) {
   $_FILES['userfile'] = array(
      'name' => $upload_files['userfile']['name'][$i],
      'type' => $upload_files['userfile']['type'][$i],
      'tmp_name' => $upload_files['userfile']['tmp_name'][$i],
      'error' => $upload_files['userfile']['error'][$i],
      'size' => $upload_files['userfile']['size'][$i]
);
4

2 に答える 2

2

$_FILES['userfile']配列の各反復で上書きしています(これが最後のファイルのみがアップロードされる理由です)。

ループするたびに新しい配列要素を作成します。

また、上記のコメントで提案されているようにでは$upload_files['userfile']なく、ループを反復するように変更してください:)$upload_files['userfile']['name']


単なるポインタ-ループcount($upload_files['userfile'])の外側の変数に割り当てることをお勧めします。for配列に要素が少ない場合はおそらく大きな違いはありませんが、大きな配列で作業する場合はパフォーマンスが大幅に向上します。

http://www.phpbench.com/をチェックしてください

于 2012-04-19T12:08:30.513 に答える
1

反復ごとに配列を上書きしているので、次のようにしてみてください。

foreach($upload_files['userfile'] as $i => $file) {
   $_FILES['userfile_org'][$i] = array(
      'name' => $file['name'],
      'type' => $file['type'],
      'tmp_name' => $file['tmp_name'],
      'error' => $file['error'],
      'size' => $file['size']
   ); 
  } 
  echo "<pre>"; var_dump($_FILES['userfile_org']); die;
于 2012-04-19T12:20:10.527 に答える