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

PHP에서 파일 업로드를 구현하는 두 가지 방법

墨辰丷
墨辰丷원래의
2018-06-04 10:25:112178검색

이 글에서는 주로 PHP 파일 업로드를 구현하는 두 가지 방법을 자세히 소개합니다. 관심 있는 친구는 이를 참고할 수 있습니다.

파일을 업로드하는 방법에는 일반적으로 두 가지가 있습니다.

두 가지 방법이 있습니다.
1. $_FILES 수신
2. 일반적으로 AJAX 비동기 업로드로 Base64로 전송합니다.

첫 번째
표준 입력 양식 방식은 대용량 파일 업로드에 적합하며 일괄 처리를 지원합니다. HTML 코드의 몇 가지 주요 문장:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic[]" accept="image/*" class="form-control" multiple />
  <input type="submit" value="上传 " />
</form>

다른 이름:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic_1" accept="image/*" class="form-control" />
  <input type="file" name="id_pic_2" accept="image/*" class="form-control" />
  <input type="submit" value="上传 " />
</form>

여기서 enctype="multipart/form-data"는 파일 업로드에 필수적입니다. 또한, type="file"은 입력 유형을 설정하고, accept="image/*"는 이미지 업로드 우선순위를 지정합니다(MIME 참조 설명서). Multiple은 한 번에 여러 파일을 선택하는 것을 지원하며 pic[]은 배열 형태로 여러 파일을 받습니다. 모바일 단말기는 또한 캡처="카메라" 매개변수를 추가하여 사진을 찍고 업로드할 카메라를 선택할 수도 있습니다.

백엔드 처리:
$_FILES를 통해 업로드된 파일을 가져옵니다.

$files = $_FILES;
여러 파일을 전송할 때 이름이 다르면 반환되는 $_FILES 배열의 형식이 달라집니다.

이름이 같은 경우:

array(1) {
 ["id_pic"] => array(5) {
  ["name"] => array(2) {
   [0] => string(5) "1.jpg"
   [1] => string(5) "2.jpg"
  }
  ["type"] => array(2) {
   [0] => string(10) "image/jpeg"
   [1] => string(10) "image/jpeg"
  }
  ["tmp_name"] => array(2) {
   [0] => string(27) "C:\Windows\Temp\php7A7E.tmp"
   [1] => string(27) "C:\Windows\Temp\php7A7F.tmp"
  }
  ["error"] => array(2) {
   [0] => int(0)
   [1] => int(0)
  }
  ["size"] => array(2) {
   [0] => int(77357)
   [1] => int(56720)
  }
 }
}

이름이 다른 경우:

   array(2) {
 ["id_pic_1"] => array(5) {
  ["name"] => string(5) "1.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEE.tmp"
  ["error"] => int(0)
  ["size"] => int(77357)
 }
 ["id_pic_2"] => array(5) {
  ["name"] => string(5) "2.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp"
  ["error"] => int(0)
  ["size"] => int(56720)
 }
}

$_FILES에 대해 foreach 순회를 수행할 때 이전 출력 형식은 그다지 편리하지 않습니다. 후자는 직접 통과할 수 있습니다. 통합 변환을 위한 메소드를 작성할 수 있습니다:

function dealFiles($files) {
    $fileArray = array();
    $n     = 0;
    foreach ($files as $key=>$file){
      if(is_array($file[&#39;name&#39;])) {
        $keys    =  array_keys($file);
        $count   =  count($file[&#39;name&#39;]);
        for ($i=0; $i<$count; $i++) {
          $fileArray[$n][&#39;key&#39;] = $key;
          foreach ($keys as $_key){
            $fileArray[$n][$_key] = $file[$_key][$i];
          }
          $n++;
        }
      }else{
        $fileArray = $files;
        break;
      }
    }
    return $fileArray;
 }

좋아, 백엔드가 수신된 $_FILES 배열을 처리하고 이를 통합 형식으로 변환하는 방법에 대해 이야기했습니다. 다음 작업은 주로 다음과 같습니다.
1. 업로드된 파일이 크기를 초과하는지 확인합니다.
3. 파일 이름을 변경합니다. ;

업로드 프로세스에서는 매우 중요한 기능인 move_uploaded_file(filename, $destination)이 파일 이동 작업을 수행하는 데 사용됩니다. $_FILES['id_pic']['tmp_name']을 새 경로로 이동합니다. 물론, 이동하기 전에 is_uploaded_file($_FILES['id_pic']['tmp_name']) 을 이용하면 파일이 정상적으로 업로드 되었는지 확인할 수 있습니다.

다중 파일 업로드는 이동 작업을 수행하기 위해 루프에서 move_uploaded_file()을 여러 번 사용합니다.

두 번째 유형

은 주로 사진 업로드에 관한 것입니다. 입력 변경 이벤트를 사용하여 캔버스로 이미지(예: 압축)를 처리한 다음 ajax를 통해 파일 스트림을 백엔드로 보냅니다.

기본 원리는 캔버스를 통해 이미지를 렌더링한 다음 toDataURL 메서드를 통해 압축하여 base64 문자열로 저장하는 것입니다(jpg 형식 이미지로 컴파일 가능).

백엔드 처리:
백엔드는 결국 프런트엔드에서 보낸 base64 문자열을 수신한 다음 해당 문자열을 이미지로 처리합니다. 구체적으로 Google|Baidu의 이미지 개발 언어에는 base64라는 키워드를 사용하세요. 프론트엔드에서 생성된 결과에는 문자열의 길이인 base64Len이 있는데, 백엔드는 제출이 완료되었는지 확인해야 합니다.

//php示例:
$img = base64_decode($_POST[&#39;img&#39;]);
$img = imagecreatefromstring($img);

요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항:

phporacle 데이터베이스에 연결하는 방법 및 간단한 분석

PHP로 캡슐화된 MSSql 작업 클래스 및 전체 예제 분석


php핵심 단계 및 간략한 분석 Oracle 데이터베이스에 연결 중 Analysis

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

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