>백엔드 개발 >PHP 문제 >PHP에서 파일을 업로드하고 데이터베이스에 저장하는 방법

PHP에서 파일을 업로드하고 데이터베이스에 저장하는 방법

PHPz
PHPz원래의
2023-04-06 08:54:001843검색

파일 업로드는 최신 애플리케이션에서 매우 일반적인 기능이며 웹 애플리케이션도 예외는 아닙니다. 웹 애플리케이션에서는 때때로 사용자가 사진, 문서 등과 같은 파일을 업로드하도록 허용해야 하며, PHP는 파일 업로드 작업을 쉽게 처리할 수 있는 널리 사용되는 서버 측 스크립팅 언어입니다. 이번 글에서는 PHP를 사용하여 업로드된 파일을 데이터베이스에 저장하는 방법을 설명하겠습니다.

  1. HTML 양식 준비

먼저 사용자가 업로드할 파일을 선택할 수 있도록 HTML 양식이 필요합니다. HTML5의 요소를 사용하여 HTML 코드는 다음과 같습니다.

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="上传文件" name="submit">
</form>

form 태그의 action 속성은 파일 업로드 처리 스크립트의 URL을 지정하고 method 속성은 다음과 같습니다. 사용할 HTTP 메소드를 지정합니다. 업로드된 파일을 서버에 저장해야 하기 때문에 POST 방식을 사용합니다.

enctype 속성은 사용할 인코딩 유형을 지정합니다. 파일을 업로드하려면 multipart/form-data를 지정합니다.

요소는 업로드할 파일을 선택하는 데 사용됩니다. 또한 사용자가 선택한 파일을 서버에 업로드할 수 있도록 제출 버튼을 추가했습니다.

  1. 서버측 처리 스크립트

이제 파일 업로드 요청을 처리하기 위한 PHP 스크립트를 작성해야 합니다. 이 스크립트를 upload.php 파일에 작성하겠습니다. 이 스크립트에서는 먼저 업로드된 파일이 존재하는지, 업로드가 성공했는지 확인합니다. 업로드가 성공하면 업로드된 파일에서 데이터를 가져와 데이터베이스에 저장합니다.

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "文件是一个图片类型 - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "文件不是一个图片类型.";
    $uploadOk = 0;
  }
}

// Check if file already exists
if (file_exists($target_file)) {
  echo "已存在同名文件.";
  $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "文件太大了.";
  $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "只支持JPG, JPEG, PNG和GIF文件类型.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
  echo "文件上传失败.";

// if everything is ok, try to upload file
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). "已经被上传.";
    
    // 保存文件数据到数据库中 
    
  } else {
    echo "文件上传发生错误.";
  }
}
?>

이 스크립트에서 $target_dir 변수는 업로드된 파일의 디렉터리를 지정합니다. $target_file 변수는 저장할 파일 이름을 지정합니다. $_FILES 변수에는 업로드된 파일의 데이터가 포함됩니다. basename() 함수를 사용하여 파일 이름을 가져오고 strtolower() 함수를 사용하여 확장자를 소문자로 변환합니다. $uploadOk 변수는 업로드 성공 여부를 추적하는 데 사용되며 $imageFileType 변수는 업로드된 파일 유형을 저장합니다.

업로드된 파일이 이미지 형식인지 확인하려면 getimagesize() 함수를 사용합니다. 이미지 유형인 경우 파일의 MIME 유형을 출력합니다. 그렇지 않은 경우 $uploadOk 변수를 0으로 설정하여 업로드가 실패했음을 나타냅니다.

다음으로 파일이 이미 존재하는지 확인합니다. 존재하는 경우 $uploadOk 변수를 0으로 설정하여 업로드가 실패했음을 나타냅니다.

파일 크기가 요구 사항을 충족하는지도 확인합니다. 500KB보다 큰 경우 $uploadOk 변수를 0으로 설정하여 업로드가 실패했음을 나타냅니다.

마지막으로 파일 형식이 요구 사항을 충족하는지 확인합니다. 이제 JPG, JPEG, PNG 및 GIF 형식만 지원됩니다. 그렇지 않은 경우 $uploadOk 변수를 0으로 설정하여 업로드가 실패했음을 나타냅니다.

모든 검사가 통과되면 업로드된 파일을 지정된 디렉터리로 이동해 보세요. 이동이 성공하면 파일이 업로드되었다는 메시지가 출력되고, 업로드된 파일의 데이터가 데이터베이스에 저장됩니다. 그렇지 않으면 오류 메시지가 출력됩니다.

  1. 파일 데이터를 데이터베이스에 저장

파일을 성공적으로 업로드한 후에는 파일 데이터를 데이터베이스에 저장해야 합니다. 이 예에서는 id, fileName 및 fileData의 3개 필드가 있는 데이터베이스 테이블을 만듭니다.

이 기능을 구현하려면 데이터베이스 연결과 $sql 문이 필요합니다. $sql 문은 파일 이름과 파일 데이터를 모두 삽입해야 합니다. PHP에서는 fopen(), fread() 및 fclose() 함수를 사용하여 파일 데이터를 처리할 수 있습니다. 따라서 $sql 문에 파일 데이터를 삽입하려면 먼저 fopen() 함수를 사용하여 파일을 연 다음 fread() 함수를 사용하여 파일에서 데이터를 읽고 마지막으로 fclose() 함수를 사용하여 파일을 닫습니다. 코드는 다음과 같습니다.

<?php
$conn = new mysqli("localhost", "root", "", "test");
if ($conn->connect_error) {
  die("连接数据库失败: " . $conn->connect_error);
}

// Check server connection
if ($conn->connect_error) {
  die("连接数据库失败: " . $conn->connect_error);
} 

$fileName = $_FILES["fileToUpload"]["name"];
$fileData = "";

// Open the file for reading
$file = fopen($target_file, "r");

// Read from the file until the end
while(!feof($file)) {
  $fileData .= fread($file, 8192);
}

// Close the file
fclose($file);

// Prepare SQL statement
$sql = "INSERT INTO upload_files (fileName, fileData) VALUES ('$fileName', '$fileData')";

if ($conn->query($sql) === TRUE) {
  echo "上传成功!";
} else {
  echo "上传失败:" . $conn->error;
}

$conn->close();
?>

이 스크립트에서는 fread() 함수를 사용하여 파일을 열고 파일의 모든 데이터를 읽습니다. 이 데이터는 $fileData 변수에 저장되며, 새로 업로드된 파일 데이터가 $sql 문에 삽입됩니다.

이제 업로드된 파일을 데이터베이스에 저장하는 기능을 구현했습니다.

요약

이 글에서는 PHP를 사용하여 파일을 업로드하고 파일 데이터를 데이터베이스에 저장하는 방법을 소개했습니다. HTML 양식으로 시작한 다음 서버측 처리 스크립트를 작성하고 업로드된 파일 데이터를 데이터베이스에 저장했습니다. 이 예는 파일을 데이터베이스에 업로드하고 저장하는 전체 프로세스를 보여 주며 웹 개발자에게 유용합니다.

위 내용은 PHP에서 파일을 업로드하고 데이터베이스에 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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