1장 파일 업로드
1.1 클라이언트 업로드 설정
파일 업로드는 B/S 프로그램에서 일반적인 기능이 되었습니다. 목적은 고객이 브라우저(Browser)를 통해 서버(Server)의 지정된 디렉터리에 파일을 업로드할 수 있도록 하는 것입니다.
파일 업로드를 지원하는 인터넷의 일반적인 웹사이트:
다양한 네트워크 디스크
아바타
온라인 사진 앨범
실명 인증
이메일 첨부 파일
간단히 말하면, 웹 개발에서는 사용자가 파일을 다음으로 전달해야 합니다. 서버는 모두 PHP의 업로드 범주에 속합니다. 서버는 이 기능을 수행하지 않는 한 복사본만 허용할 수 있습니다. 10086 고객 서비스와 마찬가지로 전화만 하면 수락합니다. 수락하지 않으면 서버가 바쁘다는 의미일 뿐입니다.
PHP 파일 업로드 기본 지식:
1) 클라이언트 양식 설정
2) 업로드된 파일을 운영하고 처리하는 서버
양식 양식 항목을 설정해야 함:
<html> <head><title>文件上传</title></head> <body> <form action="./upload.php" method="post" enctype="multipart/form-data"><!--必须要写--> <!--typle写file类型,name必须要写,名字随便--> 选择文件:<input type="file" name="myfile"> <input type="submit" value="上传文件"> </form> </body> </html>
몇 가지 특징적인 속성에 주의하세요:
1. 파일은 반드시 post 방식으로 업로드해야 하며, get 방식은 사용할 수 없습니다.
2. 양식은 enctype="multipart/form-data"로 작성해야 합니다.
3. 이름은 입력란에 반드시 기재해주셔야 합니다.
1.2 업로드는 서버 측에서 PHP를 통해 처리됩니다.
업로드된 파일의 수신 및 처리는 PHP 스크립트를 통해 처리됩니다. 특히 다음 세 가지 정보 측면이 필요합니다.
1) PH 구성 파일에서 지침을 설정합니다. : 괜찮습니다. PHP의 파일 업로드 기능을 로컬에서 조정합니다.
2) $FILES 다차원 배열: 업로드된 파일과 관련된 다양한 정보를 저장하는 데 사용됩니다. 다른 데이터는 여전히 $_POST를 사용하여 가져옵니다.
3) PHP 파일 업로드 처리 기능: 업로드된 파일의 후속 처리에 사용됩니다.
1) PHP 구성 파일의 파일 업로드와 관련된 옵션입니다.
2) $_FILES 다차원 배열.
슈퍼 전역 배열 $_FILES
1. $_FILES["myfile"]["name"]의 값은 클라이언트 파일 시스템의 파일 이름입니다.
2. $FILES["myfile"]["type"]의 값은 클라이언트가 전달한 파일 유형입니다.
3. $_FILES["myfile"]["size"]의 값은 파일 크기(바이트)입니다.
4. $_FILES["myfile"]["tmp_name"]의 값은 파일이 업로드된 후 서버에 저장된 임시 전체 경로입니다.
5. $_FILES["myfile"]["error"]의 값은 파일 업로드의 오류 코드 - PHP 4.2 이후에 추가된 기능입니다.
파일 업로드 오류 코드 정보:
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에서 도입되었습니다.
참고: 위 값은 PHP 4.3.0 이후 PHP 상수가 되었습니다.
공통 데이터 형식(MIME)
3) PHP의 파일 업로드 처리 기능
성공적으로 업로드된 파일은 서버측 임시 디렉터리에 저장되며, 파일명은 임의로 생성된 파일명입니다. 임시 파일 이름 .
참고: 이 파일은 프로그램 실행 후 자동으로 삭제됩니다. 삭제하기 전에 로컬 파일처럼 작동할 수 있습니다.
파일 업로드 처리 기능:
is_uploaded_file - HTTP POST를 통해 파일이 업로드되는지 확인합니다.
형식: bool is_uploaded_file (string $filename)
move_uploaded_file — 업로드된 파일을 새 위치로 이동합니다.
형식: bool move_uploaded_file (string $filename, string $destination)
참고: 대상 파일이 이미 존재하는 경우 덮어쓰게 됩니다.
매개변수 설명: 파일의 임시 디렉터리, 이동할 위치 디렉터리
사례:
1) 프런트 엔드 업로드 인터페이스 설정
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="doup.php" method="post" enctype="multipart/form-data"> <input type="file" name="pic"> <input type="submit" value="上传"> </form> </body> </html>
2) doup.php는 임시 디렉터리에 업로드된 파일을 처리합니다.
//专业搬运工具 //move_uploaded_file() //参数1: 文件临时目录 参数2: 要移动到的位置 //is_uploaded_file() 判断文件是否是http post提交过来的 //参数1: 文件临时目录 //1.我们保存的路径按照时间来创建 //var_dump($_GET); //1.1保存的路径 $dir='./biran/'.date('Y/m/d/'); //echo $dir;exit; //1.2 判断文件上传的路径是否存在 如果不存在就创建 if(!file_exists($dir)){ mkdir($dir,777,true); } //2.要有个好的文件名 唯一的文件名 //2.1获取文件的后缀名 //2.jpg jpg $suffix = pathinfo($_FILES['pic']['name'],PATHINFO_EXTENSION); //echo $suffix; //2.2重新起名 $filename = date('Ymd').uniqid().mt_rand(0,9999).'.'.$suffix; //echo $filename; //开始搬运 //判断是否是http post 传递的文件 if(!is_uploaded_file($_FILES['pic']['tmp_name'])){ //不是http post上传文件 echo '别整没用的!!';exit; } //开始真正的搬运 if(move_uploaded_file($_FILES['pic']['tmp_name'],$dir.$filename)){ echo '11111111111'; }else{ echo '22222222222'; }
함수로 캡슐화:
아이디어:
function upload(){ //1.判断文件上传错误 //2.判断你文件上传的类型是否是你想要的类型 //3.起名字 //4.判断保存路径是否存在 //5.判断是否是http post方式上传 //6.移动图片 //7.返回移动成功的图片名 }
함수 캡슐화 시작: 새 function.php 만들기
<?php /* 文件上传函数 @param string $name 文件上传文件域的name值 @param string $dir 文件保存路径 @param array $allow 文件允许上传的类型 return string $filename 文件名 如果失败 返回false */ function upload($name,$dir='./upload/',$allow=array('jpg','gif','jpeg','png')){ //echo $name;exit; //var_dump($_FILES);exit; //1.判断文件上传错误 if($_FILES[$name]['error']>0){ //echo '上传错误'; switch($_FILES[$name]['error']){ case 1: echo '上传的文件超过了 php.ini 中upload_max_filesize 选项限制的值.'; break; case 2: echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'; break; case 3: echo '文件只有部分被上传.'; break; case 4: echo '没有文件被上传.'; break; case 6: echo '找不到临时文件夹.'; break; case 7: echo '文件写入失败.'; break; } return false; } //2.判断你文件上传的类型是否是你想要的类型 //2.1允许上传的类型 //2.2 获取后缀名 $suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION); //echo $suffix;exit; //2.3 判断是否是我们允许上传的类型 //var_dump(in_array($suffix,$allow));exit; if(!in_array($suffix,$allow)){ //不允许上传的类型 echo '大哥你的上传类型不符合'; return false; } //3.起名字 $filename = date('Ymd').uniqid().mt_rand(0,9999).'.'.$suffix; //echo $filename;exit; //4.判断保存路径是否存在 //4.1 得到保存路径 //4.2 处理保存路径和后面的斜杠 $save_path = rtrim($dir,'/'); $save_path .='/'; //4.3 保存路径中的时间文件夹处理 $save_path .=date('Y/m/d/'); //4.4 判断保存的路径是否存在 if(!file_exists($save_path)){ mkdir($save_path,777,true); } //4.5 拼接一个完整的保存路径 $path = $save_path.$filename; //echo $path;exit; //5.判断是否是httppost方式上传 if(!is_uploaded_file($_FILES[$name]['tmp_name'])){ echo '滚蛋!'; return false; } //6.移动图片 if(!move_uploaded_file($_FILES[$name]['tmp_name'],$path)){ echo '移动失败'; return false; } //7.返回移动成功的图片名 return $filename; }
함수를 호출하여 업로드 시작:
<?php include './function.php'; //var_dump($_FILES);exit; echo upload('file','./leiding',array('jpg','png'));
2장 다중 파일 업로드
2.1 다중 파일 업로드 이름이 다릅니다
여러 파일을 업로드해야 하는 경우 이 경우 해결 방법은 두 가지입니다.
1) 다른 양식 요소를 사용하세요.
<input type="file" name="file_a"> <input type="file" name="file_b"> <input type="file" name="file_c">
2) 양식 요소를 배열 형식으로 사용하세요.
<input type="file" name="file[]"> <input type="file" name="file[]"> <input type="file" name="file[]">
3장 파일 다운로드
1) 브라우저에서 인식되지 않는 파일은 연결을 통해 직접 다운로드할 수 있습니다.
<!-- 因为他们三个浏览器不认识这样的类型 --> <a href="./downlist/1.rar">1.rar</a> <a href="./downlist/1.exe">1.exe</a> <a href="./downlist/1.avi">1.avi</a>
2) 对于浏览器不识别的,可以利用 readfile 函数。
<!-- 浏览器认识这样的类型,就会被解析 --> <a href="./action.php?name=1.html">1.html</a> <a href="./action.php?name=1.php">1.php</a> <a href="./action.php?name=1.txt">1.txt</a> <a href="./action.php?name=1.jpg">1.jpg</a> //接收一下name值. $name = $_GET['name']; //实现下载功能 //强制浏览器弹出另存为对话框 header('content-Disposition:attachment;filename="'.$name.'"'); //此时只是下载了一个空文件,需要利用readfile读一遍所有的内容.便可下载. $path = './downlist/'.$name; readfile($path);
위 내용은 PHP에서 파일을 업로드하고 다운로드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!