Home > Backend Development > PHP Problem > How to encapsulate PHP upload function

How to encapsulate PHP upload function

藏色散人
Release: 2023-02-28 14:22:02
Original
2201 people have browsed it

How to encapsulate PHP upload function

How to encapsulate the php upload function?

<?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;
}
Copy after login

HTML upload code

<!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>
Copy after login

Recommended: "PHP Tutorial"

The above is the detailed content of How to encapsulate PHP upload function. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template