PHP를 통해 파일을 서버에 업로드할 수 있습니다.
이 장의 예제는 테스트 프로젝트에서 완성되었으며 디렉터리 구조는 다음과 같습니다.
test|-----upload # 파일 업로드 디렉터리|------form.html # 양식 파일|------upload_file.php # PHP 업로드 코드
사용자가 양식에서 파일을 업로드할 수 있도록 허용하는 것은 매우 유용합니다.
파일 업로드를 위한 다음 HTML 양식을 살펴보세요.
<html><head><meta charset="utf-8"><title>코더 튜토리얼(codercto.com)</title></head><body><form action="upload_file.php" method=" post " enctype="multipart/form-data"> <label for="file">파일 이름:</label> <input type="file" name="file" id="file"><br> <입력 유형 ="제출" 이름="제출" value="제출"></form></body></html>
위 코드를 form.html 파일에 저장하세요.
위의 HTML 양식에 대한 몇 가지 참고 사항은 다음과 같습니다.
<form> 태그의 enctype 속성은 양식을 제출할 때 사용할 콘텐츠 유형을 지정합니다. 양식에 파일 내용과 같은 바이너리 데이터가 필요한 경우 " multipart/form-data "를 사용하십시오.
<input> 태그의 type="file" 속성은 입력이 파일로 처리되어야 함을 지정합니다. 예를 들어 브라우저에서 미리 볼 때 입력 상자 옆에 찾아보기 버튼이 표시됩니다.
참고: 사용자가 파일을 업로드하도록 허용하는 것은 보안상의 큰 위험입니다. 신뢰할 수 있는 사용자만 파일 업로드 작업을 수행하도록 허용하십시오.
"upload_file.php" 파일에는 파일 업로드를 위한 코드가 포함되어 있습니다.
<?phpif ($_FILES["file"]["error"] > 0){ echo "오류:" . $_FILES["file"]["error"] . "<br>";}else{ echo " 업로드 파일 이름: " . $_FILES["file"]["name"] . "<br>"; echo "파일 유형: " . $_FILES["file"]["type"] . "<br>"; echo "파일 크기: " . ($_FILES["file"]["size"] / 1024) . " kB<br>" echo "파일이 임시로 저장되는 위치: " . $_FILES[ "파일"]["tmp_name"];}?>
PHP의 전역 배열 $_FILES를 사용하면 클라이언트 컴퓨터에서 원격 서버로 파일을 업로드할 수 있습니다.
첫 번째 매개변수는 양식의 입력 이름이고 두 번째 첨자는 "name", "type", "size", "tmp_name" 또는 "error"일 수 있습니다. 아래와 같이:
$_FILES["file"]["name"] - 업로드된 파일의 이름
$_FILES["file"]["type"] - 업로드된 파일 유형
$_FILES["file"]["size"] - 업로드된 파일의 크기(바이트)
$_FILES["file"]["tmp_name"] - 서버에 저장된 파일의 임시 복사본 이름
$_FILES["file"]["error"] - 파일 업로드로 인해 발생한 오류 코드
이것은 파일을 업로드하는 매우 간단한 방법입니다. 보안상의 이유로 파일 업로드가 허용되는 사람에 대한 제한을 추가해야 합니다.
이 스크립트에서는 파일 업로드에 대한 제한 사항을 추가합니다. 사용자는 .gif, .jpeg, .jpg, .png 파일만 업로드할 수 있으며 파일 크기는 200KB 미만이어야 합니다.
<?php// 업로드된 이미지 접미사 허용됨 $allowedExts = array("gif", "jpeg", "jpg", "png");$temp =explore(".", $_FILES["file"][" name "]);$extension = end($temp); // 파일 접미사 가져오기 if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["파일"]["유형"] == "이미지/jpeg")|| ($_FILES["파일"]["유형"] == "이미지/jpg")|| "파일"]["유형"] == "이미지/pjpeg")|| ($_FILES["파일"]["유형"] == "이미지/x-png")|| ($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 204800) // 200kb 미만&& in_array($extension, $ allowedExts)){ if ($_FILES["file"]["error"] > 0) { echo "오류:: " . $_FILES["file"]["error"] . "<br>"; } else { echo "파일 이름 업로드: " . $_FILES["file"]["name"] . "파일 유형: " . $_FILES["file"]["type"] . "<br>"; echo "파일 크기: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "파일이 임시로 저장되는 위치: " . $_FILES["file"]["tmp_name"]; }}else{ echo "잘못된 파일 형식";}?>
위의 예에서는 서버의 PHP 임시 폴더에 업로드된 파일의 임시 복사본을 만듭니다.
이 임시 복사본은 스크립트가 끝나면 사라집니다. 업로드된 파일을 저장하려면 해당 파일을 다른 위치에 복사해야 합니다.
<?php// 업로드된 이미지 접미사 허용됨 $allowedExts = array("gif", "jpeg", "jpg", "png");$temp =explore(".", $_FILES["file"][" name "]);echo $_FILES["file"]["size"];$extension = end($temp); // 다음과 같은 경우 파일 접미사를 가져옵니다. ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($ _FILES["파일"]["유형"] == "이미지/jpg")|| ($_FILES["파일"]["유형"] == "이미지/pjpeg")|| ($_FILES["파일"]["유형"] == "이미지/x-png")|| ($_FILES["파일"]["유형"] == "이미지/png"))&& ($ _FILES["file"]["size"] < 204800) // 200kb 미만&& in_array($extension, $allowedExts)){ if ($_FILES["file"]["error"] > 0) { echo "오류: " . $_FILES["file"]["error"] . "<br>" } else { 파일 이름 업로드 : " . $_FILES["file"]["name"] . "<br>"; echo "파일 유형: " . $_FILES["file"]["type"] . "<br>"; echo "파일 크기: " . ($_FILES["file"]["size"] / 1024) . " kB<br>" echo "파일이 임시로 저장되는 위치: " . ["tmp_name "] . "<br>"; // 현재 디렉터리 아래의 업로드 디렉터리에 파일이 있는지 확인합니다. // 업로드 디렉터리가 없는 경우 업로드 디렉터리 권한은 777입니다. (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 파일이 이미 존재합니다. "; } else { // 업로드 디렉터리에 파일이 없으면 업로드 디렉터리에 파일을 업로드합니다. move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file "][ "name"]); echo "파일은 다음 위치에 저장됩니다: " . "upload/" . $_FILES["file"]["name"]; } }}else{ echo "잘못된 파일 형식";}?>
위 스크립트는 파일이 이미 존재하는지 확인합니다. 파일이 없으면 "upload"라는 디렉터리에 파일을 복사합니다.