Jadual Kandungan
php实现文件上传与下载(中)
Rumah pembangunan bahagian belakang tutorial php php实现文件上传与下载(中)_PHP教程

php实现文件上传与下载(中)_PHP教程

Jul 12, 2016 am 09:05 AM
php muat naik muat turun Tiada mood dan maklumat Muncul boleh capai dokumen pengguna daripada

php实现文件上传与下载(中)

出现不想让用户看见的信息,可以使用错误抑制符号@;当然能echo的东西都是可以赋值给一个变量的;
 
定义用户上传文件类型,将其放在数组变量allowExt中,用if(!in_array(第一个参数为获取上传文件的后缀名,可以使用strtolower函数来判定 点号‘ .’之后的后缀名,或者也可以用自带扩展函数pathinfo(file的名字,PATHINFO_EXTENSION)来判定,第二个参数就是允许上传的类型的数组变量allowExt);但是这种情况下,用户万一上传上来一个病毒信息,只是改了后缀名,就要用到getimagesize来获取图片的信息,基本信息会有图片的宽度和高度以及类型,部分还会有channel和bits;如果允许用户上传的不仅仅是图片类型,则使用flag的布尔值进行判定;
 
还要注意的是用户上传的文件的命名,不能存在重名覆盖现象,可以使用md5(uniqid(microtime(true),true))或类似函数进行判定;
 
有的时候用户需要上传到自己的某个目录下,则可以用if(!files_exit(path))进行判定,不存在就用mkdir ($path,0777,true)来自定义上传的路径;
 
在各种判定之后,可以将这个文件封装成一个函数,将下文中会使用到的变量设置为该函数的参数,在调用时可以传参,在单文件多文件上传的时候可以直接调用函数即可,大大简化代码量;
 
单文件上传基本思路也就是:先检测错误信息,一一匹配,用switch……case输出对应的错误信息------》检测文件上传的类型是否是自己定义的数组中的某一个-----》检测上传文件是否满足规范中的大小要求----》检测文件图片等内容是否是真实的图片类型等(用flag和getimagesize获取信息)----》检测文件是否通过http post方法传上来的----》定义文件上传进来的名字和路径(此时需要检测路径是否存在以及同名文件是否存在,采用加密方式重命名)---》上传成功,返回具体的数组变量或者上传文件名。
 
 
 1 <?php
 2 header(&#39;content-type:text/html;charset=utf-8&#39;);
 3 
 4 function upload($fileInfo,$allowExt = array(&#39;jpeg&#39;, &#39;jpg&#39;,  &#39;png&#39;,  &#39;gif&#39;, &#39;pdf&#39;), $maxSize = 2097152, $path = &#39;text&#39;, $flag = true)
 5 {
 6     $fileInfo = $_FILES[&#39;file1&#39;];
 7 //     $maxSize = 2097152; // 允许上传的最大字节数2M
 8     // $flag = true; // 检测是否真实类型
 9      // 允许上传的文件类型,直接放在参数里了 
10 //    $allowExt = array(
11 //         &#39;jpeg&#39;,
12 //         &#39;png&#39;,
13 //         &#39;png&#39;,
14 //         &#39;gif&#39;,
15 //         &#39;pdf&#39;
16 //     );
17     if(!is_array($allowExt)){
18         exit(&#39;系统错误&#39;);
19     }
20     // 1、判断错误号
21     if ($fileInfo[&#39;error&#39;] == 0) {
22         // 判断上传文件的大小www.Bkjia.com
23         if ($fileInfo[&#39;size&#39;] > $maxSize) {
24             exit(&#39;上传文件过大&#39;);
25         }
26         // 判断文件类型:两种方法--使用截取后缀名或者用自带扩展名的判定来判定
27         $ext = pathinfo($fileInfo[&#39;name&#39;], PATHINFO_EXTENSION);
28         $ext = strtolower(end(explode(&#39;.&#39;, $fileInfo[&#39;name&#39;])));
29         if (! in_array($ext, $allowExt)) {
30             exit(&#39;非法文件类型&#39;);
31         }
32         // 判断文件是否通过http post方式穿上的
33         if (! is_uploaded_file($fileInfo[&#39;tmp_name&#39;])) {
34             exit(&#39;文件不是通过http post方法传上来的&#39;);
35         }
36         if ($flag) {
37             if (! getimagesize($fileInfo[&#39;tmp_name&#39;])) {
38                 exit(&#39;不是真正的图片类型&#39;);
39             }
40         }
41         // 上传文件,先判定路径是否存在,如果不存在则建立
42        // $path = &#39;text&#39;;
43         if (! file_exists($path)) {
44             mkdir($path, 0777, true);
45             chmod($path, 0777);
46         }
47         
48         // 要确保文件名唯一,防止重名产生覆盖,使用加密函数md5,mcrotime表示微秒数,两个参数则为true;
49         $uniName = md5(uniqid(microtime(true), true)) . &#39;.&#39; . $ext;
50 //   测试是否可以加密输出      echo $uniName;
51 //         exit();
52         $destination = $path . &#39;/&#39; . $uniName;
53         if (move_uploaded_file($fileInfo[&#39;tmp_name&#39;], $destination)) {
54             // echo &#39;上传成功&#39;;可以不仅仅是显示返回成功,可以返回文件的信息内容等
55 //             return array(
56 //                 &#39;newName&#39; => $destination,
57 //                 &#39;size&#39; => $fileInfo[&#39;size&#39;],
58 //                 &#39;type&#39; => $fileInfo[&#39;type&#39;]
59 //             );
60             return $destination;
61             //如果只要一个文件名,则return $destination即可
62         } else {
63             echo &#39;上传失败&#39;;
64         }
65     } else {
66         // 匹配错误信息,与err号应该一一对应的
67         switch ($fileInfo[&#39;error&#39;]) {
68             case 1:
69                 $remindMes= &#39;上传文件超过了php配置文件中upload_max_filesize选项的值&#39;;
70                 break;
71             case 2:
72                $remindMes= &#39;上传文件超过了表单max_file_size选项的值&#39;;
73                 break;
74             case 3:
75                $remindMes=  &#39;文件部分被上传&#39;;
76                 break;
77             case 4:
78                 $remindMes= &#39;没有选择上传文件&#39;;
79                 break;
80             case 6:
81                 $remindMes=  &#39;沒有找到临时目录&#39;;
82                 break;
83             case 7:
84             
85             case 8:
86                $remindMes=  &#39;系统错误&#39;;
87                 break;
88         }
89         exit($remindMes);
90     }
91 }
Salin selepas log masuk

 


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1066541.htmlTechArticlephp实现文件上传与下载(中) 出现不想让用户看见的信息,可以使用错误抑制符号@;当然能echo的东西都是可以赋值给一个变量的; 定义用...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles