图解:
- 表单的写法要注意3点
- form的method要为post类型
- form一定要加enctype=multipart/form-data
- input为file类型
form表单代码
<form action="1.php" method="post" enctype="multipart/form-data">
<p><input type="file" name="pic" /></p>
<p><input type="submit" value="提交" /></p>
</form>
接受到内容打印$_FILES
因为tmp_name是临时路径,图片传到目录就被删除了,所以想要获得图片,需要用move_uploaded_file 将上传的文件移动到新位置
if(move_uploaded_file($_FILES['pic']['tmp_name'],'./'.$_FILES['pic']['name'])) {
echo 'ok';
} else {
echo 'fail';
}
最终demo
封装如下函数
/**
*
*按日期创建一个文件目录,用于保存图片
*@return string $path 返回图片相对路径
*/
function createDir(){
$path='/upload/'.date('Y/md');
$load=ROOT . $path;
if(is_dir($load) || mkdir($load,0777,true)){
return $path;
}else{
return false;
}
}
/**
*
*获取文件后缀
*@param string $filename 文件名
*@return string $str 返回取出的后缀$type
*/
function getEnd($filename){
return strrchr($filename,'.');
}
/**
*
*获取随机字符串
*@param int $length 取字符串的位数
*@return string $str
*/
function randstr($length=6){
$str=str_shuffle("qwertyuioplkjhgfdsazxcvbnmQWYRIEOKFCNMVZALP1234567890");
$str=substr($str,0,$length);
return $str;
}
/**
*
*判断是否为图片函数
*@param string $filename 图片路径
*@return bool
*/
function isImage($filename){
$types = '.jpg|.gif|.jpeg|.png|.bmp';//定义检查的图片类型
return stripos($types,getEnd($filename));
}
php接受post请求
if(isImage($_FILES['pic']['name'])!==false){
//拼接新的图片名,避免重复
$file=time().randStr().getEnd($_FILES['pic']['name']);
//创建图片目录,返回路径/dfdf/dfdf
$path=createDir().'/'.$file;
move_uploaded_file($_FILES['pic']['tmp_name'],ROOT.$path);
//成功写入数据库
$art['image']=$path;
//生成缩略图写入数据库
$art['thumb']=makeThumb($path);
}
相关配置
file_uploads -> 是否允许 HTTP 文件上传
upload_max_filesize -> 所上传的单个文件的最大大小(字节)
post_max_size -> 设定 POST 数据所允许的最大大小(字节)
upload_tmp_dir -> 文件上传时存放文件的临时目录
max_execution_time->脚本最大执行时间
通过_FILES限制文件的上传类型和大小