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

回到顶部