>백엔드 개발 >PHP 튜토리얼 >PHP에서 여러 파일 업로드를 구현하는 방법

PHP에서 여러 파일 업로드를 구현하는 방법

小云云
小云云원래의
2018-03-30 13:12:475280검색

이 기사는 주로 PHP에서 여러 파일 업로드를 구현하는 방법을 공유합니다. 도움이 되기를 바랍니다.

PHP 파일 업로드 프로세스
1. 제출 버튼을 클릭하면 브라우저 사용자가 업로드된 파일이 포함된 양식 데이터를 PHP 핸들러에 제출합니다.
2. 웹 서버와 PHP 전처리기는 먼저 양식 데이터의 크기가 PHP를 초과하는지 확인합니다. .ini 구성 파일의 post_max_size 옵션으로 설정한 상한 값입니다.
이를 초과하면 PHP 핸들러는 양식 데이터를 얻을 수 없습니다. 이때 파일 업로드가 실패할 뿐만 아니라 양식 컨트롤에 채워진 데이터도 제출되지 않습니다. PHP 핸들러 사전 정의 변수 $_GET, $_POST, $_FILES는 빈 배열입니다.
제한을 초과하지 않는 경우 3단계로 파일을 업로드하여 확인하게 됩니다.
3. 양식의 파일 크기가 양식 숨김 필드 MAX_FILE_SIZE에 설정된 상한을 초과하는지 확인하세요.
이를 초과하면 PHP 전처리기가 상태 코드 2를 반환하고 파일 업로드가 실패합니다.
제한을 초과하지 않는 경우 4단계로 파일을 업로드하여 확인하게 됩니다.
(업로드할 파일이 여러 개인 경우 특정 파일 업로드 박스로 인한 파일 업로드 실패는 다른 파일 업로드 박스의 업로드 결과에 영향을 미치지 않습니다.)
4. 양식에 있는 파일이 php.ini 구성 파일을 초과하는지 확인하세요 upload_max_filesize 옵션에서 설정한 상한값입니다.
이를 초과하면 PHP 전처리기가 상태 코드 1을 반환하고 파일 업로드가 실패합니다.
제한을 초과하지 않을 경우 5단계로 파일 업로드가 진행되어 확인이 진행됩니다.
5. PHP에서 파일 업로드를 구현하려면 php.ini 구성 파일의 upload_tmp_dir 옵션에 정의된 디렉터리에 업로드된 파일에 해당하는 임시 파일(기본 확장자는 tmp)을 생성해야 합니다. 업로드가 성공하면 임시 파일이 즉시 사라집니다. PHP 전처리기는 상태 코드 0을 반환합니다.
하지만 암묵적인 작성 사유(max_execution_time 옵션 설정이 너무 작거나 네트워크 속도가 느린 등)로 인해 일부 파일을 업로드한 후 남은 파일이 더 이상 업로드되지 않아 이때 파일 업로드가 실패하는 경우가 있습니다. , PHP 전처리기는 상태 코드 3을 반환합니다
통과하면 검사를 위해 파일이 6단계로 업로드됩니다.
6. 파일 업로드를 위한 핵심 단계는 임시 파일이 사라지기 전에 웹 서버나 파일 서버에 저장하는 것입니다. PHP에서 제공하는 두 가지 함수: is_uploaded_file() 함수와 move_uploaded_file() 함수는 이 작업 단계를 완료하는 데 도움이 될 수 있습니다.


여러 파일을 업로드하는 경우 동일한 파일로 저장된 파일의 내용이 이름은 다음과 같습니다. 형태는 배열로 배치됩니다. 이는 3개의 배열이 아닌 파일의 5개 매개변수에 따라 별도로 저장되는 5개의 배열입니다. 따라서 count($_FILES['$myPicture'])를 직접 사용하면 대답은 5입니다.

array (size=5)  'name' => 
    array (size=3)      0 => string '1.txt' (length=5)      1 => string '2.txt' (length=5)      2 => string '3.txt' (length=5)  'type' => 
    array (size=3)      0 => string 'text/plain' (length=10)      1 => string 'text/plain' (length=10)      2 => string 'text/plain' (length=10)  'tmp_name' => 
    array (size=3)      0 => string 'D:\wamp64\tmp\phpC5E8.tmp' (length=25)      1 => string 'D:\wamp64\tmp\phpC5E9.tmp' (length=25)      2 => string 'D:\wamp64\tmp\phpC5EA.tmp' (length=25)  'error' => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
  'size' => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0

index.php 파일

<form action="fileSystem.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="submit" value="提交">
</form>

fileSystem 파일

<?php
    if (empty($_POST)) {        exit("提交的表单数据超过post_max_size的配置");
    }    $arr = $_FILES[&#39;myPicture&#39;];    $file =array();    for ($i=0; $i < count($arr[&#39;name&#39;]); $i++) { 
        $file[$i][&#39;name&#39;] = $arr[&#39;name&#39;][$i];        $file[$i][&#39;type&#39;] = $arr[&#39;type&#39;][$i];        $file[$i][&#39;tmp_name&#39;] = $arr[&#39;tmp_name&#39;][$i];        $file[$i][&#39;error&#39;] = $arr[&#39;error&#39;][$i];        $file[$i][&#39;size&#39;] = $arr[&#39;size&#39;][$i];
    }    for ($i=0; $i < count($file); $i++) { 
        switch ($file[$i][&#39;error&#39;]) {            case 0:          
                $fileName = $file[$i][&#39;name&#39;];                $fileTemp = $file[$i][&#39;tmp_name&#39;];                $destination = "uploads/" . $file[$i][&#39;name&#39;];
                move_uploaded_file($fileTemp, $destination);                echo "上传成功";                break;            case 1:                echo "上传附件超过php.ini中的upload_max_filesize选项的限制";                break;            case 2:                echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";                break;            case 3:                echo "附件只有部分被上传";                break;            case 4:                echo "没有选择上传附件";                break;
        } 
    }   
?>

                                                          PHP 파일 업로드 프로세스 서버와 PHP 전처리기는 먼저 양식 데이터의 크기가 PHP의

post_max_size

옵션에 설정된 상한을 초과하는지 여부를 확인합니다. ini 구성 파일.
이를 초과하면 PHP 핸들러는 양식 데이터를 얻을 수 없습니다. 이때 파일 업로드가 실패할 뿐만 아니라 양식 컨트롤에 채워진 데이터도 제출되지 않습니다. PHP 핸들러 사전 정의 변수 $_GET, $_POST, $_FILES는 빈 배열입니다.
제한을 초과하지 않는 경우 3단계로 파일을 업로드하여 확인하게 됩니다. 3. 양식의 파일 크기가 양식 숨김 필드 MAX_FILE_SIZE
에 설정된 상한을 초과하는지 확인하세요.
이를 초과하면 PHP 전처리기가 상태 코드 2를 반환하고 파일 업로드가 실패합니다.
제한을 초과하지 않는 경우 4단계로 파일을 업로드하여 확인하게 됩니다. (업로드할 파일이 여러 개인 경우 특정 파일 업로드 박스로 인한 파일 업로드 실패는 다른 파일 업로드 박스의 업로드 결과에 영향을 미치지 않습니다.) 4. 양식에 있는 파일이 php.ini 구성 파일을 초과하는지 확인하세요
upload_max_filesize
옵션에서 설정한 상한값입니다.
이를 초과하면 PHP 전처리기가 상태 코드 1을 반환하고 파일 업로드가 실패합니다.
제한을 초과하지 않을 경우 5단계로 파일 업로드가 진행되어 확인이 진행됩니다. 5. PHP에서 파일 업로드를 구현하려면 php.ini 구성 파일의 upload_tmp_dir 옵션에 정의된 디렉터리에 업로드된 파일에 해당하는 임시 파일(기본 확장자는 tmp)을 생성해야 합니다. 업로드가 성공하면 임시 파일이 즉시 사라집니다. PHP 전처리기는 상태 코드 0을 반환합니다. 하지만 때로는 암묵적인 쓰기 이유(예: max_execution_time 옵션 설정이 너무 작거나 네트워크 속도가 느린 등)로 인해 일부 파일을 업로드한 후 나머지 파일이 더 이상 업로드되지 않아 파일 업로드가 실패하는 경우가 있습니다. 시간이 지나면 PHP 전처리기는 상태 코드 3을 반환합니다
통과하면 검사를 위해 파일이 6단계로 업로드됩니다.
6. 파일 업로드를 위한 핵심 단계는 임시 파일이 사라지기 전에 웹 서버나 파일 서버에 저장하는 것입니다. PHP에서 제공하는 두 가지 함수:
is_uploaded_file()
함수와
move_uploaded_file()
함수가 이 단계를 완료하는 데 도움이 될 수 있습니다


여러 파일을 업로드할 경우, 같은 이름으로 저장된 파일의 내용은 다음과 같은 형태로 배열에 배치되니 주의하시기 바랍니다. 이는 3개의 배열이 아닌 파일의 5개 매개변수에 따라 별도로 저장되는 5개의 배열입니다. 따라서 count($_FILES['$myPicture'])를 직접 사용하면 대답은 5입니다.

array (size=5)  &#39;name&#39; => 
    array (size=3)      0 => string &#39;1.txt&#39; (length=5)      1 => string &#39;2.txt&#39; (length=5)      2 => string &#39;3.txt&#39; (length=5)  &#39;type&#39; => 
    array (size=3)      0 => string &#39;text/plain&#39; (length=10)      1 => string &#39;text/plain&#39; (length=10)      2 => string &#39;text/plain&#39; (length=10)  &#39;tmp_name&#39; => 
    array (size=3)      0 => string &#39;D:\wamp64\tmp\phpC5E8.tmp&#39; (length=25)      1 => string &#39;D:\wamp64\tmp\phpC5E9.tmp&#39; (length=25)      2 => string &#39;D:\wamp64\tmp\phpC5EA.tmp&#39; (length=25)  &#39;error&#39; => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
  &#39;size&#39; => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0

index.php 파일

<form action="fileSystem.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="submit" value="提交">
</form>

fileSystem 파일

<?php
    if (empty($_POST)) {        exit("提交的表单数据超过post_max_size的配置");
    }    $arr = $_FILES[&#39;myPicture&#39;];    $file =array();    for ($i=0; $i < count($arr[&#39;name&#39;]); $i++) { 
        $file[$i][&#39;name&#39;] = $arr[&#39;name&#39;][$i];        $file[$i][&#39;type&#39;] = $arr[&#39;type&#39;][$i];        $file[$i][&#39;tmp_name&#39;] = $arr[&#39;tmp_name&#39;][$i];        $file[$i][&#39;error&#39;] = $arr[&#39;error&#39;][$i];        $file[$i][&#39;size&#39;] = $arr[&#39;size&#39;][$i];
    }    for ($i=0; $i < count($file); $i++) { 
        switch ($file[$i][&#39;error&#39;]) {            case 0:          
                $fileName = $file[$i][&#39;name&#39;];                $fileTemp = $file[$i][&#39;tmp_name&#39;];                $destination = "uploads/" . $file[$i][&#39;name&#39;];
                move_uploaded_file($fileTemp, $destination);                echo "上传成功";                break;            case 1:                echo "上传附件超过php.ini中的upload_max_filesize选项的限制";                break;            case 2:                echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";                break;            case 3:                echo "附件只有部分被上传";                break;            case 4:                echo "没有选择上传附件";                break;
        } 
    }   
?>

관련 권장 사항:

다중 파일 업로드를 구현하는 php3.2

다중 파일 업로드를 구현하는 PHP 방법 예제 분석

예제 PHP 단일 파일 및 다중 파일 업로드 분석

위 내용은 PHP에서 여러 파일 업로드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.