php - Muat naik berbilang gambar pada terminal mudah alih, tetapi hanya satu diproses di latar belakang
伊谢尔伦
伊谢尔伦 2017-05-24 11:30:54
0
1
484

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:

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(1)
过去多啦不再A梦

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 得到路径,那么有没有考虑过在同一秒内,相同后缀的不同图片上传,会是一样的路径

看你数据库的结果,就印证了,这一点

怎么解决呢
1、精确到 毫秒 or 微妙,也是有概率出现重复
2、路径生成增加条件 rand 随机数,也是有概率出现重复
3、uniqid

Dapatkan laluan melalui time() + ext, kemudian adakah anda mempertimbangkan bahawa jika imej berbeza dengan akhiran yang sama dimuat naik dalam detik yang sama, mereka akan mempunyai laluan yang sama

Melihat keputusan pangkalan data anda, ini disahkan🎜 🎜Cara menyelesaikannya🎜1. Tepat hingga milisaat atau mikrosaat, terdapat kebarangkalian pendua🎜2 Tambah nombor rawak rand bersyarat kepada penjanaan laluan, terdapat juga kebarangkalian pendua🎜3 🎜 🎜Nah, gabungkan 1+2+3, kebarangkalian pengulangan adalah terlalu rendah, melainkan anda seorang kelawar, mari bercakap mengenainya pada tahap itu🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan