PHP上传保存中文图片问题
<?php//1.获取上传文件信息
$upfile=$_FILES["pic"];
//定义允许的类型
$typelist=array("image/jpeg","image/jpg","image/png","image/gif");
$path="./upfiles/";//定义一个上传后的目录
//2.过滤上传文件的错误号
if($upfile["error"]>0){
switch($upfile['error']){//获取错误信息
case 1:
$info="上传得文件超过了 php.ini中upload_max_filesize 选项中的最大值.";
break;
case 2:
$info="上传文件大小超过了html中MAX_FILE_SIZE 选项中的最大值.";
break;
case 3:
$info="文件只有部分被上传";
break;
case 4:
$info="没有文件被上传.";
break;
case 5:
$info="找不到临时文件夹.";
break;
case 6:
$info="文件写入失败!";break;
}die("上传文件错误,原因:".$info);
}
//3.本次上传文件大小的过滤(自己选择)
if($upfile['size']>2000000){
die("上传文件大小超出限制");
}
//4.类型过滤
if(!in_array($upfile["type"],$typelist)){
die("上传文件类型非法!".$upfile["type"]);
}
//5.上传后的文件名定义
do{
$newfile=$upfile["name"];//此处上传中文名称图片,转存到指定目录里名称会是乱码
}while(file_exists($path.$newfile));
//6.执行文件上传
//判断是否是一个上传的文件
if(is_uploaded_file($upfile["tmp_name"])){
//执行文件上传(移动上传文件)
if(move_uploaded_file($upfile["tmp_name"],$path.$newfile)){
echo "文件上传成功!";
include('config.php');
//将图片的名称和路径存入数据库
$sql = "INSERT INTO image3(path) VALUES ('$path$newfile')";
$result = mysqli_query($conn,$sql);
if($result){
echo"文件已存储到数据库";
} else {
echo"请求失败,请重试";
}
} else {
die("上传文件失败!");
}
}else{
die("不是一个上传文件!");
}
?>
测试把图片保存到同目录的upfiles文件夹内,数据库里保存图片的路径,已经能将图片转存进去,并且数据库里保存的也是路径+图片名称。
但是在测试的过程中,发现中文名称的图片转存过去,名称会变成乱码,而数据库里保存路径里的图片名称是中文,导致我获取图片的时候获取不到,只获取到数据库中的名称。
我按照网上的有尝试过在存储时对编码进行转换,if(move_uploaded_file($upfile["tmp_name"],$path.$newfile("utf-8","gb2312"))){
if(move_uploaded_file($upfile["tmp_name"],iconv("gb2312","UTF-8", $path.$newfile))){
但是提示超过最大执行时间30s,无法转存。
该怎么样在上传图片后转存图片可以是中文也可以是英文的?
///////////////////////////////////////////////////////////
我转换写错地方了,在上传的文件名定义那里添加,$newfile=iconv("utf-8","gb2312",$upfile["name"])转存过去的图片是中文和英文都有的了,但是又产生了新的问题,我数据里保存的路径名现在只有路径,没有图片名称了...
我已经蒙了,现在转存有中文,数据库存的时候没有名称了,该咋处理?
回答
建议你使用文件的 MD5 来当做文件名。你这样的话会导致重名图片被异常覆盖。
网上有说 iconv("UTF-8","gb2312",$filname)
,怎么看上去你写反了
写库的时候别用转码呗。。。
以上是 PHP上传保存中文图片问题 的全部内容, 来源链接: utcz.com/a/45013.html