[php] PHP에서 여러 파일 업로드

여러 파일을 업로드하고 폴더에 저장하고 경로를 가져 와서 데이터베이스에 저장하고 싶습니다. 여러 파일 업로드를 위해 찾은 좋은 예 …

참고 : 파일은 모든 유형이 될 수 있습니다.



답변

나는 이것이 오래된 게시물이라는 것을 알고 있지만 몇 가지 추가 설명은 여러 파일을 업로드하려는 사람에게 유용 할 수 있습니다. 다음은 수행해야 할 작업입니다.

  • 입력 이름은 배열로 정의되어야합니다.
    name="inputName[]"
  • 입력 요소가 있어야 multiple="multiple"하거나multiple
  • PHP 파일에서 구문을 사용하십시오. "$_FILES['inputName']['param'][index]"
  • 빈 파일 이름과 경로 를 찾아야 합니다. 배열에 빈 문자열 이 포함될 수 있습니다 . array_filter()계산하기 전에 사용하십시오 .

다음은 다운되고 더러운 예제입니다 (관련 코드 만 표시).

HTML :

<input name="upload[]" type="file" multiple="multiple" />

PHP :

//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.

// Count # of uploaded files in array
$total = count($_FILES['upload']['name']);

// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {

  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

  //Make sure we have a file path
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];

    //Upload the file into the temp dir
    if(move_uploaded_file($tmpFilePath, $newFilePath)) {

      //Handle other code here

    }
  }
}

이것이 도움이되기를 바랍니다!


답변

여러 파일을 선택한 다음 업로드를 수행
<input type='file' name='file[]' multiple>
하는 샘플 PHP 스크립트를 사용하여 업로드 할 수 있습니다 .

<html>
<title>Upload</title>
<?php
    session_start();
    $target=$_POST['directory'];
        if($target[strlen($target)-1]!='/')
                $target=$target.'/';
            $count=0;
            foreach ($_FILES['file']['name'] as $filename)
            {
                $temp=$target;
                $tmp=$_FILES['file']['tmp_name'][$count];
                $count=$count + 1;
                $temp=$temp.basename($filename);
                move_uploaded_file($tmp,$temp);
                $temp='';
                $tmp='';
            }
    header("location:../../views/upload.php");
?>
</html>

선택한 파일은 다음과 같은 배열로 수신됩니다.

$_FILES['file']['name'][0]첫 번째 파일의 이름을 저장합니다.
$_FILES['file']['name'][1]두 번째 파일의 이름을 저장합니다.
등등.


답변

HTML

  1. 로 div 생성 id='dvFile';

  2. 만들기 button;

  3. onclick 그 버튼 호출 기능의 add_more()

자바 스크립트

function  add_more() {
  var txt = "<br><input type=\"file\" name=\"item_file[]\">";
  document.getElementById("dvFile").innerHTML += txt;
}

PHP

if(count($_FILES["item_file"]['name'])>0)
 {
//check if any file uploaded
 $GLOBALS['msg'] = ""; //initiate the global message
  for($j=0; $j < count($_FILES["item_file"]['name']); $j++)
 { //loop the uploaded file array
   $filen = $_FILES["item_file"]['name']["$j"]; //file name
   $path = 'uploads/'.$filen; //generate the destination path
   if(move_uploaded_file($_FILES["item_file"]['tmp_name']["$j"],$path))
{
   //upload the file
    $GLOBALS['msg'] .= "File# ".($j+1)." ($filen) uploaded successfully<br>";
    //Success message
   }
  }
 }
 else {
  $GLOBALS['msg'] = "No files found to upload"; //No file upload message 
}

이런 식으로 파일 / 이미지를 필요한만큼 추가하고 php 스크립트를 통해 처리 할 수 ​​있습니다.


답변

하나의 파일을 업로드하는 것과 다르지 않습니다. $_FILES . 업로드 된 모든 파일을 포함하는 배열입니다.

PHP 매뉴얼에 다음 장이 있습니다 : 여러 파일 업로드

사용자 측에서 쉽게 선택하여 여러 파일 업로드를 활성화하려면 (업로드 필드를 채우는 대신 한 번에 여러 파일 선택) SWFUpload를 살펴보십시오 . 그러나 일반 파일 업로드 양식과는 다르게 작동하며 작동하려면 Flash가 필요합니다. SWFUpload는 Flash와 함께 사용되지 않습니다. 현재 올바른 접근 방식에 대한 다른 최신 답변을 확인하십시오.


답변

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
$max_no_img=4; // Maximum number of images value to be set here

echo "<form method=post action='' enctype='multipart/form-data'>";
echo "<table border='0' width='400' cellspacing='0' cellpadding='0' align=center>";
for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name='images[]' class='bginput'></td></tr>";
}

echo "<tr><td colspan=2 align=center><input type=submit value='Add Image'></td></tr>";
echo "</form> </table>";
while(list($key,$value) = each($_FILES['images']['name']))
{
    //echo $key;
    //echo "<br>";
    //echo $value;
    //echo "<br>";
if(!empty($value)){   // this will check if any blank field is entered
$filename =rand(1,100000).$value;    // filename stores the value

$filename=str_replace(" ","_",$filename);// Add _ inplace of blank space in file name, you can remove this line

$add = "upload/$filename";   // upload directory path is set
//echo $_FILES['images']['type'][$key];     // uncomment this line if you want to display the file type
//echo "<br>";                             // Display a line break
copy($_FILES['images']['tmp_name'][$key], $add);
echo $add;
    //  upload the file to the server
chmod("$add",0777);                 // set permission to the file.
}
}
?>
</body>
</html>


답변

간단합니다. 먼저 파일 배열을 계산 한 다음 while 루프에서 다음과 같이 쉽게 수행 할 수 있습니다.

$count = count($_FILES{'item_file']['name']);

이제 총 파일 수가 맞습니다.

while 루프에서 다음과 같이하십시오.

$i = 0;
while($i<$count)
{
    Upload one by one like we do normally
    $i++;
}


답변

이 간단한 스크립트가 저에게 효과적이었습니다.

<?php

foreach($_FILES as $file){
  //echo $file['name']; 
  echo $file['tmp_name'].'</br>';
  move_uploaded_file($file['tmp_name'], "./uploads/".$file["name"]);
}

?>