> 백엔드 개발 > PHP 문제 > PHP 업로드 기능을 캡슐화하는 방법

PHP 업로드 기능을 캡슐화하는 방법

藏色散人
풀어 주다: 2023-02-28 14:22:02
원래의
2197명이 탐색했습니다.

PHP 업로드 기능을 캡슐화하는 방법

PHP 업로드 기능을 어떻게 캡슐화하나요?

<?php
//上传文件调用
$file = $_FILES[&#39;image&#39;];
//允许上传的类型
$allow = array(&#39;image/jpeg&#39;, &#39;image/png&#39;,  &#39;image/jpg&#39;, &#39;image/gif&#39;);
$path = &#39;./uploads&#39;;
 
$maxsize = 1024 * 1024 * 3;
$result = upload($file, $allow, $error, $path, $maxsize);
 
if ($result) {
//上传成功
echo "文件上传成功,新的文件名叫".$result;
}else{
//上传失败
echo $error;
}
 
/**
 *文件的上传
 *@param array $file 上传的文件的相关信息(是一个数组有五个元素)
 *@param array $allow 允许文件上传的类型
 *@param string & $error 引用传递,用来记录错误的信息
 *@param string $path 文件上传的目录,不带最后的 /
 *@param int $maxsize = 1024*1024 允许上传的文件大小
 *@return mixed false | $newname 如果上传失败返回false,成功返回文件的新名字
 **/
 
function upload($file, $allow, &$error, $path, $maxsize =1048576){
//先判断系统错误
switch ($file[&#39;error&#39;]) {
case 1:
$error = &#39;上传错误,超出了服务器文件限制的大小!&#39;;
return false;
case 2:
$error = &#39;上传错误,超出了浏览器表单允许的大小!&#39;;
return false;
 
case 3:
$error = &#39;上传错误,文件上传不完整!&#39;;
return false;
 
case 4:
$error = &#39;上传错误,请您先选择要上传的文件!&#39;;
return false;
 
case 6:
case 7:
$error = &#39;对不起,服务器繁忙,请稍后再试!&#39;;
return false;
}
 
//判断逻辑错误
//验证文件的大小
if ($file[&#39;size&#39;] > $maxsize) {
//超出用户了自己规定的大小
$error = &#39;上传错误,超出了文件限制的大小!&#39;;
return false;
}
//判断文件的类型
if (!in_array($file[&#39;type&#39;], $allow)) {
//非法的文件类型
$error = &#39;上传的文件的类型不正确,允许的类型有:&#39;.implode(&#39;,&#39;, $allow);
return false;
}
 
//移动临时文件
//指定文件上传后保存的路径
$newname = randName($file[&#39;name&#39;]); //得到文件新的名字
//判断$path 目录是否存在 不存在则创建
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
$target = $path . &#39;/&#39; . $newname;
$result = move_uploaded_file($file[&#39;tmp_name&#39;],  $target);
if ($result) {
//上传成功
return $newname;
}else{
//上传失败
$error = &#39;发生未知错误,上传失败&#39;;
return false;
}
}
 
/**
 *生成一个随机名字的函数 文件名=当前的时间 + 随机的几位数字
 *@param string $filename 文件的原始名字
 *@return string $newname 文件的新名字
 *
 */
function randName($filename){
//生成文件名的时间部分
$newname = date(&#39;YmdHis&#39;);
//加上随机的6位数
$str = &#39;0123456789&#39;;
for ($i=0; $i < 6; $i++) { 
$newname .= $str[mt_rand(0, strlen($str)-1)];
}
//加上文件的后缀名
$newname .= strrchr($filename, &#39;.&#39;);
return $newname;
}
로그인 후 복사

HTML 업로드 코드

<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
<meta charset="utf-8">
</head>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" name="" value="上传">
</form>
</body>
</html>
로그인 후 복사

권장: "PHP 튜토리얼"

위 내용은 PHP 업로드 기능을 캡슐화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿