1. Baru-baru ini, PHP digunakan untuk menyambung dengan bahagian IOS Apabila memuat naik berbilang gambar, bahagian APP memanggil antara muka gambar tunggal muat naik latar belakang dalam satu gelung, dan latar belakang menyimpan gambar dan menyimpan laluan dalam pangkalan data. Walau bagaimanapun, keputusan akhir ialah seberapa banyak gambar yang dimuat naik kerana terdapat gambar yang sama dalam pangkalan data, ini bermakna antara muka hanya boleh memproses satu gambar.
Kod hujung belakang adalah seperti berikut (belum dioptimumkan lagi)
//Formatkan tatasusunan $_FILES
$path = "./upload/post/";
$valid_formats = array('jpg','png','gif','bmp','jpeg','PNG','JPG','JPEG','GIF','BMP');
if(!isset($_POST) || !$_SERVER['REQUEST_METHOD'] == 'POST') {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => '请求参数或者请求方式错误'],
];
echo json_encode($mess);
exit;
}
if($_FILES['ava']['error'] != 0) {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => '文件上传失败',],
];
}
$name = $_FILES['ava']['name'];
$size = $_FILES['ava']['size'];
if(!strlen($name)) {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => '文件名不存在'],
];
echo json_encode($mess);
exit;
}
$ext = $this -> getExtension($name);
if(!in_array($ext,$valid_formats)) {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => "请上传jpg','png','gif','bmp','jpeg'格式图片(拓展名大写也是可以的)"],
];
echo json_encode($mess);
exit;
}
if($size > (3 * 1024 * 1024)) {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => '图片大小不应超过3M'],
];
echo json_encode($mess);
exit;
}
$actualName = md5(time().substr(str_replace(" ", '_', $ext),5)).".".$ext;
$tmp = realpath($_FILES['ava']['tmp_name']);
if(!is_dir($path)) {
if(!mkdir($path,0777,true)) {
$mess = [
'code' => 4,
'message' => '请求资源失败',
'result' => '文件夹创建失败',
];
echo json_encode($mess);
exit;
}
}
if(!move_uploaded_file($tmp,$path.$actualName)) {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => '上传文件失败',],
];
echo json_encode($mess);
exit;
}
// 组装图片数据
$data['url'] = $this -> visitpath.'post/'.$actualName;
$data['pid'] = $pid;
$data['atime'] = time();
$res = model('postgallery') -> insert($data);
if(!$res) {
$mess = [
'code' => 0,
'message' => '请求数据失败',
'result' => ['msg' => '图片上传失败','data' => $data],
];
echo json_encode($mess);
exit;
}
$data['result']['data']['test'] = $n;
$mess = [
'code' => 1,
'message' => '请求数据成功',
'result' => ['msg' => '图片成功',],
];
echo json_encode($mess);
exit;
Hasilnya begini:
Ia sememangnya kod yang tidak dioptimumkan. . .
Langkah utama dalam kod
$actualName = md5(time().substr(str_replace(" ", '_', $ext),5)).".".$ext;
$actualName = md5(time().substr(str_replace(" ", '_', $ext),5)).".".$ext;
通过 time() + ext 得到路径,那么有没有考虑过
在同一秒内,相同后缀的不同图片上传
,会是一样的路径看你数据库的结果,就印证了,这一点
怎么解决呢
Dapatkan laluan melalui time() + ext, kemudian adakah anda mempertimbangkan bahawa1、精确到 毫秒 or 微妙,也是有概率出现重复
2、路径生成增加条件 rand 随机数,也是有概率出现重复
3、
uniqid
jika imej berbeza dengan akhiran yang sama dimuat naik dalam detik yang sama
, mereka akan mempunyai laluan yang sama