ファイルがアップロードされると、$ _FILE変数は常に1つまたは複数のファイルをアップロードする配列です。
ので
Array
(
[file] => Array
(
[name] => Array
(
[file1] => MyFile.txt
[file2] => MyFile.jpg
),
[type] => Array
(
[file1] => text/plain
[file2] => image/jpeg
),
[tmp_name] => Array
(
[file1] => /tmp/php/php1h4j1o
[file2] => /tmp/php/php6hst32
),
[error] => Array
(
[file1] => UPLOAD_ERR_OK
[file2] => UPLOAD_ERR_OK
),
[size] => Array
(
[file1] => 123
[file2] => 98174
)
)
)
はそう、複数のファイルのアップロードのために、私は[「tmp_name」]をアクセスしたい場合は言うことができます。..複数のファイルのための$ _file変数の典型的なマッピングが似ている、複数のファイルについて言うことができます$temp_name = $_FILES['file']['tmp_name']
のように複数のファイルをアップロードした場合、$temp_name
には配列が含まれます
1つのファイルのアップロードでは、違いは$temp_name = $_FILES['file']['tmp_name']
です。 $temp_name
には、アップロードされた単一ファイルの1文字列の文字列が含まれます。
私たちは実際に配列にキャストし、複数のアップロードのように見せます。$temp_name = (array)$_FILES['file']['tmp_name']
を書き込むと、今度は$temp_name
ファイルに配列が含まれます。これは基本的には単一の文字列ですが、インデックスは0です。
ここで、単一ファイルアップロードと複数ファイルアップロードの両方がよく似ていますか?
だから、それに基づいて、あなただけの1ファイル、foreachのforeach((array) $_FILES['file']['tmp_name'] as $key => $tmp_name)
中(配列)鋳造があるかどうだから今、これは、あなたの例の両方で動作します。..
// lets be sure that $_FILES are not empty
if(!empty($_FILES)) { // I might did this check already, if so, ignore it
// now we are going to type cast the $_FILE variable as an array
foreach((array) $_FILES['file']['tmp_name'] as $key => $tmp_name){
$file_names = (array) $_FILES['file']['name']; // just ensuring that single file name is in array format
$new_image_name = $key.$file_names[$key]; // no worries about the $key!
$file_tmp = $tmp_name[$key];
$dest=$_SERVER['DOCUMENT_ROOT']."uploads/".$new_image_name;
move_uploaded_file($file_tmp, $dest);
// and so on...
}
}
のようにコードを変更することができます$_FILES['file']['tmp_name']
には少なくとも1つのtmp_nameを持つ配列が含まれ、複数のアップロードの場合は既に配列になっています!
私は$file_names = (array) $_FILES['file']['name'];
と同じことをして、少なくとも1つのファイルをアップロードする場合には少なくとも1つの名前を含む名前の配列が常に存在するようにしました。
同じ方法で他の値にアクセスできます。
希望します。
あなたは両方のフォームで同じファイル名を使用するだけです、 '名= "ファイル[]"。角括弧は、PHPが配列構造を生成するようにするものです。 – CBroe