시간은 모든 것을 잊게 하고, 잊은 지식을 정리하는 것은 미래를 망각하게 한다!
많은 사이트들이 파일 업로드 기능을 구현해야 하는데, 이 기능은 크든 작든 작든 간에파일 업로드에 구멍이 뚫리면 사이트 통제권이 해커에게 넘어갈 수 있고, 모든 파일 업로드에 대한 통제는 엄격하고 엄격해야 하며, 파일 업로드의 허점 원리를 더욱 심도 있게 연구하기 위해 파일 업로드 기본 기능을 주로 작성해 간단한 체크만 했다.
먼저 내 앞 페이지를 봐. 여기 이마에 있는 코드와 원래 조금 다른 점이 있는데, 바로 채택이다.이진 전송 방법은 데이터 전송을 수행한다.전면 파일 이름: upload.php
<!DOCTYPE html>
<html>
<head>
<title>파일 업로드</title>
<meta charset="utf-8">
</head>
<body>
<center>
<!-- enctype="mulipart/form-data"속성이란 이진수 방식으로 데이터를 전송하는 것을 말한다
전송 파일 설정 필요-->
<form action="upload_server.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="max_file_size" value="1048576">
<input type="file" name="file">
<input type="submit" name="업로드">
</form>
</center>
</body>
</html>
파일 업로드의 수신, 처리 모두 다음 코드에 기록되며 파일 이름은 upload_server.php입니다
<?php
header("content-type:text/html;charset=utf-8");
//시간대 설정
date_default_timezone_set('PRC');
//파일 이름 가져오기
$filename = $_FILES['file']['name'];
//임시 파일 경로 가져오기
$temp_name = $_FILES['file']['tmp_name'];
//크기 가져오기
$size = $_FILES['file']['size'];
//파일 업로드 코드를 가져옵니다. 0은 파일 업로드 성공
$error = $_FILES['file']['error'];
//파일 크기가 최대 업로드 제한을 초과하는지 여부 판단
if ($size > 2*1024*1024){
//
echo "<script>alert('파일 크기가 2M을 초과함');window.history.go(-1);</script>";
exit();
}
//phpinfo함수는 배열로 파일 경로에 대한 정보를 반환합니다
//[dirname]:디렉터리 경로[basename]:파일 이름[extension]:파일 접미사 이름[filename]:不접미사가 없는 파일 이름
$arr = pathinfo($filename);
//파일의 접미사 이름 가져오기
$ext_suffix = $arr['extension'];
//파일을 업로드할 수 있는 접미사를 설정합니다
$allow_suffix = array('jpg','gif','jpeg','png');
//업로드한 파일이 허용 범위 내에 있는지 여부 판단(접미사)==>화이트리스트 판정
if(!in_array($ext_suffix, $allow_suffix)){
//window.history.go(-1)이전 페이지로 돌아가서 새로 고침
echo "<script>alert('업로드할 파일 형식은 다음과 같습니다jpg,gif,jpeg,png');window.history.go(-1);</script>";
exit();
}
//업로드 파일을 저장할 경로가 있는지, 존재하지 않으면 새 디렉터리
if (!file_exists('uploads')){
mkdir('uploads');
}
//업로드한 파일의 이름을 새로 지어서 더욱 안전할 것
$new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
//임시 경로에서 디스크로 파일 이동
if (move_uploaded_file($temp_name, 'uploads/'.$new_filename)){
echo "<script>alert('파일 업로드 성공!');window.history.go(-1);</script>";
}else{
echo "<script>alert('파일 업로드 실패, 오류 코드:$error');</script>";
}
?>
문장 말미에 첨부파일에 error 코드와 의미를 올린다.
$_FILES['file']['error'] 다음과 같이 있습니다몇 가지 유형
1,UPLOAD_ERR_OK:0의 값, 오류 없음생, 파일 업로드 성공.
2,UPLOAD_ERR_INI_SIZE:1의 값업로드한 파일이 php.ini에서 upload_max_f를 초과함ilesize 옵션 제한 값입니다.
3,UPLOAD_ERR_FORM_SIZE: 그 값은 2, 업로드 파일의 크기가 HTML 폼의 MAX_FILE_S보다 큽니다IZE 옵션에서 지정한 값입니다.
4,UPLOAD_ERR_PARTIAL:3의 값,파일은 일부만 업로드 됩니다.
5,UPLOAD_ERR_NO_FILE:4의 값,업로드된 파일이 없습니다.
6,UPLOAD_ERR_NO_TMP_DIR: 그 값은 6,임시 폴더를 찾을 수 없습니다.PHP 4.3.10과 PHP 5.0.3 도입.
7,UPLOAD_ERR_CANT_WRITE: 그 값은 7, 파일을 쓸 수 없습니다.PHP 5.1.0 도입.
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP는 과학적 카운트 포맷을 숫자 문자열로 변환하고, PHP는 필드 varchar 타입으로 비교 정렬합니다 (0) | 2022.07.01 |
---|---|
PHP 8대 디자인 패턴 (0) | 2022.06.30 |
PHP php-fpm을 다시 시작하는 몇 가지 방법 (0) | 2022.06.30 |
PHP는 RabbitMQ 인스턴스 사용 (0) | 2022.06.30 |
php openssl 확장 추가 (0) | 2022.06.30 |