これはあなたのために働くでしょう
サンプル HTML
<form action="" enctype="multipart/form-data" method="post">
<p>
Please specify a file, or a set of files:<br> <input type="file"
name="image[]" size="40">
</p>
<p>
Please specify a file, or a set of files:<br> <input type="file"
name="image[]" size="40">
</p>
<p>
Please specify a file, or a set of files:<br> <input type="file"
name="image[]" size="40">
</p>
<p>
Please specify a file, or a set of files:<br> <input type="file"
name="image[]" size="40">
</p>
<p>
Please specify a file, or a set of files:<br> <input type="file"
name="image[]" size="40">
</p>
<div>
<input type="submit" value="Send">
</div>
</form>
PHPコード
$allowedExtention = array (
'jpg',
'jpeg',
'png',
'bmp',
'tiff',
'gif'
);
$errors = array ();
$output = array ();
if (! empty ( $_FILES ['image'] ['tmp_name'] )) {
foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
$fileName = $_FILES ['image'] ['name'] [$key];
$fileSize = $_FILES ['image'] ['size'] [$key];
$fileTemp = $_FILES ['image'] ['tmp_name'] [$key];
$fileExtention = pathinfo ( $fileName, PATHINFO_EXTENSION );
$fileExtention = strtolower ( $fileExtention );
if (! in_array ( $fileExtention, $allowedExtention )) {
$errors [$fileName] [] = "File format $fileExtention not accepted for $fileName";
continue;
}
if ($fileSize > 2097152) {
$errors [$fileName] [] = 'reached maxsize of 2MB per file in picture $variable_that_count';
continue ;
}
if (count ( $errors ) == 0) {
$path = "temp";
$prifix = basename ( $fileName, "." . $fileExtention );
var_dump ( $prifix );
$uploadfile = $path . "/" . $fileName;
$x = 0;
while ( file_exists ( $uploadfile ) ) {
$x ++;
$uploadfile = "{$path}/{$prifix}-{$x}.{$fileExtention}";
}
if (move_uploaded_file ( $fileTemp, $uploadfile )) {
$fileName = basename ( $uploadfile );
$output [$fileName] = "OK";
} else {
$output [$fileName] = "ERORR";
$errors [$fileName] [] = "Can Move uploaded file to destination";
}
}
}
}
var_dump ( $errors );
var_dump ( $output );
サンプル出力
string '79534296' (length=8)
string '89773706' (length=8)
array
'download (1)' =>
array
0 => string 'File format not accepted for download (1)' (length=42)
'brief.docx' =>
array
0 => string 'File format docx not accepted for brief.docx' (length=44)
'' =>
array
0 => string 'File format not accepted for ' (length=30)
array
'79534296-2.jpg' => string 'OK' (length=2)
'89773706-2.jpg' => string 'OK' (length=2)
編集 1
すべてのファイルが有効でなければならない場合、それを達成する方法は 2 つあります。
A. 最初にすべてのファイルを検証することから始めます。
foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
if(! in_array (pathinfo ($_FILES ['image'] ['name'] [$key], PATHINFO_EXTENSION ), $allowedExtention ))
{
die("Die! Die! Die") ;
}
}
foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
// Upload Script here
}
B. エラーが検出された場合は、すべてのファイルを削除します
foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) {
// Upload Script here
}
// Remove All Files
if(count($errors) > 0)
{
foreach ($output as $key => $value)
{
@unlink($path . "/" . $key);
}
die("Die! die! die!") ;
}
これが役立つことを願っています