이 글에서는 주로 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['name'])) { $keys = array_keys($file); $count = count($file['name']); for ($i=0; $i<$count; $i++) { $fileArray[$n]['key'] = $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['img']); $img = imagecreatefromstring($img);
요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.
관련 권장 사항:
phporacle 데이터베이스에 연결하는 방법 및 간단한 분석
php핵심 단계 및 간략한 분석 Oracle 데이터베이스에 연결 중 Analysis
위 내용은 PHP에서 파일 업로드를 구현하는 두 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!