PHP 파일 업로드 문제 요약
PHP에서 파일을 업로드할 때 자주 발생하는 몇 가지 문제를 나중에 사용할 때 찾아볼 필요가 없도록 정리해 보겠습니다.
1. 먼저 가장 간단한 업로드 파일을 만듭니다
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html>
<?php if (($_FILES["file"]["size"] < 20000) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if ( file_exists ("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?>
2. 그런 다음 슈퍼 전역 변수 $_FILES
$_FILES['userfile']['name'] $_FILES['userfile']['type'] $_FILES['userfile']['size'] $_FILES['userfile']['tmp_name'] $_FILES['userfile']['error']
그 중 $_FILES['userfile']['error'의 모든 값을 이해합니다. ] 값:
UPLOAD_ERR_OK 값이 0이고 오류가 발생하지 않으며 파일 업로드가 성공합니다.
UPLOAD_ERR_INI_SIZE 값은 1이며, 업로드된 파일이 php.ini의 upload_max_filesize 옵션에 의해 제한되는 값을 초과합니다.
UPLOAD_ERR_FORM_SIZE 값은 2이며, 업로드된 파일의 크기가 HTML 양식의 MAX_FILE_SIZE 옵션에 지정된 값을 초과합니다.
UPLOAD_ERR_PARTIAL 값은 3이며 파일이 부분적으로만 업로드됩니다.
UPLOAD_ERR_NO_FILE 값은 4이며 업로드된 파일이 없습니다.
UPLOAD_ERR_NO_TMP_DIR 값이 6이면 임시 폴더를 찾을 수 없습니다. PHP 4.3.10 및 PHP 5.0.3에서 도입되었습니다.
UPLOAD_ERR_CANT_WRITE 값은 7이며 파일 쓰기에 실패했습니다. PHP 5.1.0에서 도입되었습니다.
3. 많은 상황: 업로드된 파일 형식을 엄격하게 판단해야 합니다
업로드된 파일 형식을 판단하기 위해 $_FILES['userfile']['type']을 사용하는 것은 매우 현명하지 못한 접근 방식이라는 것을 알고 있습니다. , 파일을 기준으로 판단하기 때문에 누구나 mp3 파일의 접미사를 jpg로 변경하고 그림으로 위장하여 업로드할 수 있습니다. 따라서 PHP는 공식적으로 PHP 확장자 php_fileinfo를 사용하여 파일의 MIME을 확인할 것을 권장합니다. Baidu에서 확장 기능을 활성화하는 방법에는 여러 가지가 있습니다. Win과 Linux는 약간 다릅니다.
4. 시나리오 1: 동일한 이름의 파일을 업로드한 후 자동으로 이름 바꾸기
if (file_exists("./upload/" . $_FILES["file"]["name"])) { do{ $suffix =""; $suffix_length = 4; $str = "0123456789abcdefghijklmnopqrstuvwxyz"; $len = strlen($str)-1; //文件名后追加4个随机字符 for($i=0 ; $i<$suffix_length; $i++){ $suffix .= $str[rand(0,$len)]; } $upload_filename = $_FILES['file']['name']; $filename = substr($upload_filename,0,strrpos($upload_filename,".")).$suffix.".".substr($upload_filename,strrpos($_FILES["file"]["name"],".")+1); }while(file_exists("./upload/".$filename)); move_uploaded_file($_FILES["file"]["tmp_name"],"./upload/" . $filename); }else{ move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); }
5. 시나리오 2: 날짜를 기준으로 디렉터리에 파일 업로드
$structure = './'.date("Y").'/'.date("m").'/'.date("d").'/'; if (!mkdir($structure, 0777, true)) { die('Failed to create folders...'); } move_uploaded_file($_FILES["file"]["tmp_name"],$structure . $_FILES["file"]["name"]);
6: 여러 파일 업로드
<form action="" method="post" enctype="multipart/form-data"> <p>Pictures: <input type="file" name="pictures[]" /> <input type="file" name="pictures[]" /> <input type="file" name="pictures[]" /> <input type="submit" value="Send" /> </p> </form>
<?php foreach ($_FILES["pictures"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; $name = $_FILES["pictures"]["name"][$key]; move_uploaded_file($tmp_name, "data/$name"); } } ?>
예 여러 파일의 경우 이 변수 구조는 사용하기 쉽지 않습니다.
array(1) { ["upload"]=>array(2) { ["name"]=>array(2) { [0]=>string(9)"file0.txt" [1]=>string(9)"file1.txt" } ["type"]=>array(2) { [0]=>string(10)"text/plain" [1]=>string(10)"text/html" } } }
많은 경우에 필요한 것은 이와 유사한 구조입니다.
array(1) { ["upload"]=>array(2) { [0]=>array(2) { ["name"]=>string(9)"file0.txt" ["type"]=>string(10)"text/plain" }, [1]=>array(2) { ["name"]=>string(9)"file1.txt" ["type"]=>string(10)"text/html" } } }
다음 함수를 사용하면 구조를 쉽게 변환할 수 있습니다
function perse_array($vector) { $result = array(); foreach($vector as $key1 => $value1) foreach($value1 as $key2 => $value2) $result[$key2][$key1] = $value2; return $result; } $upload = perse_array($_FILES["upload"]);
7. 때때로: 요구서버 구성최대 업로드 파일 크기 수정
먼저 양식에서
업로드 파일 크기를 제한할 수 있습니다(우회 가능).
그런 다음 서버의 구성도 조정해야 합니다
php.ini:
max_execution_time = 30 각 스크립트가 실행되는 최대 시간(초)
max_input_time = 60, 각 스크립트가 사용할 수 있는 시간, 단위 초
memory_limit = 128M, 이는 스크립트에서 소비하는 최대 메모리입니다.
post_max_size = 8M, 양식으로 제출되는 최대 데이터는 8M입니다. 이 항목은 업로드되는 단일 파일의 크기를 제한하지 않지만 제출되는 데이터를 제한합니다. 전체 형태의.
upload_max_filesize = 2M, 업로드 가능한 최대 파일 크기
nginx:
location / { root html; index index.html index.htm; client_max_body_size 1000m; }
위 내용은 PHP 파일 업로드 문제 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다
