Jadual Kandungan
PHP上传原理及操作实现
Rumah pembangunan bahagian belakang tutorial php PHP上传原理及操作实现_PHP教程

PHP上传原理及操作实现_PHP教程

Jul 13, 2016 am 10:21 AM
prinsip

PHP上传原理及操作实现

关于PHP上传文件的函数类库,网上有许多封装很完善,大家直接拿来用就可以。
 
本文章只是说下关于上传原理和简单的上传操作,老鸟就无视了哈^_^~
 
还有一些安全性判断比如:服务端限制能接收图片类型的文件,而客户端恶意将病毒文件的后缀名改为图片配型的文件上传。
 
 
 
(举例单文件上传,多文件原理还是不变,只不过多了点小技巧)
 
 
 
 
 
index.html
 
复制代码
   
    upload files
 
   
       
        上传文件:
       
   
复制代码
1、Form标签enctype属性
 
表单中enctype="multipart/form-data"是用于设置表单的MIME编码。
默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form-data且提交方式为Post才能完整的传递文件数据。
 
 
 
2、MAX_FILE_SIZE 隐藏字段
 
MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。
在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。(不过鉴于友好性最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。)
 
 
 
upload.php
 
    print_r($_FILES);
?>
我们可以看到:
 
复制代码
Array
(
    [file] => Array
        (
            [name] => 照片文件.jpg
            [type] => image/jpeg
            [tmp_name] => F:\wamp\tmp\php41BB.tmp
            [error] => 0
            [size] => 73886
        )
 
)
复制代码
 
 
3、全局变量 $_FILES的应用
 
  $_FILES['file']['name']  为上传文件的原文件名
 
  $_FILES['file']['type']  为上传文件的 MIME 类型
 
  $_FILES['file']['size']  已上传文件的大小,单位为字节
 
  $_FILES['file']['tmp_name']  文件被上传后在服务端储存的临时文件名()
 
  $_FILES['file']['error']  文件上传的错误代码
 
 
 
4、默认情况下,上传文件会保存在服务端的临时文件夹中,其目录在php.ini中设置
 
php.ini与文件上传有关的一些常用设置:
 
file_uploads ;  是否允许通过HTTP上传文件的开关。默认为ON即是开
 
upload_tmp_dir ;  文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
 
upload_max_filesize;  即允许上传文件大小的最大值。默认为2M
 
post_max_size;  指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
 
 
 
下面是对单文件上传的完整代码,因为是随想随写的,可能逻辑嵌套的有点乱,懂原理最重要。
 
复制代码
    
    //取得上传文件信息
    $fileName=$_FILES['file']['name'];
    $fileType=$_FILES['file']['type'];
    $fileError=$_FILES['file']['error'];
    $fileSize=$_FILES['file']['size'];
    $tempName=$_FILES['file']['tmp_name'];//临时文件名
    
    //定义上传文件类型
    $typeList = array("image/jpeg","image/jpg","image/png","image/gif"); //定义允许的类型
 
 
    if(!is_uploaded_file($tempName)){
        //判断是否是POST上传过来的文件
        exit("不是通过HTTP POST方式上传上来的");
    }else{
        if(!in_array($fileType, $typeList)){
            exit("上传的文件不是指定类型");
        }else{
            if(!getimagesize($tempName)){
                //避免用户上传恶意文件,如把病毒文件扩展名改为图片格式
                exit("上传的文件不是图片");
            }
        }
        if($fileError>0){
            //上传文件错误编号判断
            switch ($fileError) {
                case 1:
                    $message="上传的文件超过了php.ini 中 upload_max_filesize 选项限制的值。"; 
                    break;
                case 2:
                    $message="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; 
                    break;
                case 3:
                    $message="文件只有部分被上传。"; 
                    break;
                case 4:
                    $message="没有文件被上传。";
                    break;
                case 6:
                    $message="找不到临时文件夹。"; 
                    break;
                case 7:
                    $message="文件写入失败"; 
                    break;
                case 8:
                    $message="由于PHP的扩展程序中断了文件上传";
                    break;
            }
 
            exit("文件上传失败:".$fileError);
 
        }else{
            if($fileSize>100000){
                //对特定表单的上传文件限制大小
                exit("上传文件超出限制大小");
            }else{
                //避免上传文件的中文名乱码
                $fileName=iconv("UTF-8", "GBK", $fileName);//把iconv抓取到的字符编码从utf-8转为gbk输出
                if(move_uploaded_file($tempName, "uploads/".$fileName)){
                    echo "上传文件成功!";
                }else{
                    echo "上传文件失败";
                }
            }
 
        }
 
    }
 
 
?>
复制代码
5、关于php上传文件的一些常用函数:(具体用法就不贴出来了,自己看API文档吧 ^_^)
 
file_exists  检查文件或目录是否存在
 
is_uploaded_file    判断文件是否是通过 HTTP POST 上传的
 
move_uploaded_file    将上传的文件移动到新位置
 
is_writable   判断给定的文件名是否可写
 
iconv  字符编码互转
 
getimagesize  检查是否为图片文件(其他类型的文件就算后缀名改了也能被检测到)

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/854420.htmlTechArticlePHP上传原理及操作实现 关于PHP上传文件的函数类库,网上有许多封装很完善,大家直接拿来用就可以。 本文章只是说下关于上传原理和简...
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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Analisis fungsi dan prinsip nohup Analisis fungsi dan prinsip nohup Mar 25, 2024 pm 03:24 PM

Analisis peranan dan prinsip nohup Dalam sistem pengendalian seperti Unix dan Unix, nohup ialah arahan yang biasa digunakan yang digunakan untuk menjalankan arahan di latar belakang Walaupun pengguna keluar dari sesi semasa atau menutup tetingkap terminal, arahan itu boleh masih terus dilaksanakan. Dalam artikel ini, kami akan menganalisis fungsi dan prinsip arahan nohup secara terperinci. 1. Peranan nohup: Menjalankan arahan di latar belakang: Melalui arahan nohup, kita boleh membiarkan arahan yang berjalan lama terus dilaksanakan di latar belakang tanpa terjejas oleh pengguna yang keluar dari sesi terminal. Ini perlu dijalankan

Perbincangan mendalam tentang prinsip dan amalan rangka kerja Struts Perbincangan mendalam tentang prinsip dan amalan rangka kerja Struts Feb 18, 2024 pm 06:10 PM

Analisis prinsip dan penerokaan praktikal rangka kerja Struts Sebagai rangka kerja MVC yang biasa digunakan dalam pembangunan JavaWeb, rangka kerja Struts mempunyai corak reka bentuk dan skalabiliti yang baik dan digunakan secara meluas dalam pembangunan aplikasi peringkat perusahaan. Artikel ini akan menganalisis prinsip rangka kerja Struts dan menerokanya dengan contoh kod sebenar untuk membantu pembaca memahami dan menggunakan rangka kerja itu dengan lebih baik. 1. Analisis prinsip rangka kerja Struts 1. Seni bina MVC Rangka kerja Struts adalah berdasarkan MVC (Model-View-Con

Pemahaman mendalam tentang prinsip pelaksanaan Insert batch dalam MyBatis Pemahaman mendalam tentang prinsip pelaksanaan Insert batch dalam MyBatis Feb 21, 2024 pm 04:42 PM

MyBatis ialah rangka kerja lapisan ketekunan Java yang popular yang digunakan secara meluas dalam pelbagai projek Java. Antaranya, sisipan kelompok adalah operasi biasa yang boleh meningkatkan prestasi operasi pangkalan data dengan berkesan. Artikel ini akan meneroka secara mendalam prinsip pelaksanaan Sisipan kelompok dalam MyBatis, dan menganalisisnya secara terperinci dengan contoh kod khusus. Sisipan Batch dalam MyBatis Dalam MyBatis, operasi Sisipan kelompok biasanya dilaksanakan menggunakan SQL dinamik. Dengan membina S yang mengandungi berbilang nilai yang dimasukkan

Perbincangan mendalam tentang fungsi dan prinsip alat RPM Linux Perbincangan mendalam tentang fungsi dan prinsip alat RPM Linux Feb 23, 2024 pm 03:00 PM

Alat RPM (RedHatPackageManager) dalam sistem Linux ialah alat yang berkuasa untuk memasang, menaik taraf, menyahpasang dan mengurus pakej perisian sistem. Ia ialah alat pengurusan pakej yang biasa digunakan dalam sistem RedHatLinux dan juga digunakan oleh banyak pengedaran Linux yang lain. Peranan alat RPM adalah sangat penting Ia membolehkan pentadbir sistem dan pengguna menguruskan pakej perisian dengan mudah pada sistem. Melalui RPM, pengguna boleh memasang pakej perisian baharu dan menaik taraf perisian sedia ada dengan mudah

Penjelasan terperinci tentang prinsip pemalam paging MyBatis Penjelasan terperinci tentang prinsip pemalam paging MyBatis Feb 22, 2024 pm 03:42 PM

MyBatis ialah rangka kerja lapisan kegigihan yang sangat baik yang menyokong operasi pangkalan data berdasarkan XML dan anotasi Ia mudah dan mudah digunakan, dan juga menyediakan mekanisme pemalam yang kaya. Antaranya, pemalam paging adalah salah satu pemalam yang lebih kerap digunakan. Artikel ini akan menyelidiki prinsip pemalam paging MyBatis dan menggambarkannya dengan contoh kod khusus. 1. Prinsip pemalam paging MyBatis sendiri tidak menyediakan fungsi paging asli, tetapi anda boleh menggunakan pemalam untuk melaksanakan pertanyaan paging. Prinsip pemalam paging adalah terutamanya untuk memintas MyBatis

Analisis mendalam tentang fungsi dan prinsip kerja perintah chage Linux Analisis mendalam tentang fungsi dan prinsip kerja perintah chage Linux Feb 24, 2024 pm 03:48 PM

Perintah chage dalam sistem Linux ialah perintah yang digunakan untuk mengubah suai tarikh tamat kata laluan akaun pengguna Ia juga boleh digunakan untuk mengubah suai tarikh terpanjang dan terpendek yang boleh digunakan bagi akaun tersebut. Perintah ini memainkan peranan yang sangat penting dalam mengurus keselamatan akaun pengguna dengan berkesan boleh mengawal tempoh penggunaan kata laluan pengguna dan meningkatkan keselamatan sistem. Cara menggunakan arahan chage: Sintaks asas perintah chage ialah: chage [option] nama pengguna Contohnya, untuk mengubah suai tarikh tamat kata laluan pengguna "testuser", anda boleh menggunakan arahan berikut

Prinsip dan kaedah asas pelaksanaan kaedah pewarisan di Golang Prinsip dan kaedah asas pelaksanaan kaedah pewarisan di Golang Jan 20, 2024 am 09:11 AM

Prinsip asas dan kaedah pelaksanaan kaedah pewarisan Golang Di Golang, pewarisan merupakan salah satu ciri penting pengaturcaraan berorientasikan objek. Melalui pewarisan, kita boleh menggunakan sifat dan kaedah kelas induk untuk mencapai penggunaan semula dan kebolehlanjutan kod. Artikel ini akan memperkenalkan prinsip asas dan kaedah pelaksanaan kaedah pewarisan Golang, dan memberikan contoh kod khusus. Prinsip asas kaedah pewarisan Di Golang, pewarisan dilaksanakan dengan membenamkan struktur. Apabila struktur dibenamkan dalam struktur lain, struktur terbenam telah dibenamkan

Prinsip pertaruhan Astar, pembongkaran pendapatan, projek dan strategi airdrop & strategi peringkat pengasuh operasi Prinsip pertaruhan Astar, pembongkaran pendapatan, projek dan strategi airdrop & strategi peringkat pengasuh operasi Jun 25, 2024 pm 07:09 PM

Jadual Kandungan Prinsip Staking Astar Dapp Staking Hasil Pembongkaran Projek Airdrop Berpotensi: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap Staking Strategi & Operasi "AstarDapp Staking" telah dinaik taraf kepada versi V3 pada awal tahun ini, dan banyak pelarasan telah dibuat pada staking peraturan. Pada masa ini, kitaran pertaruhan pertama telah tamat, dan kitaran kecil "pengundian" kitaran pertaruhan kedua baru sahaja bermula. Untuk mendapatkan faedah "ganjaran tambahan", anda perlu memahami peringkat kritikal ini (dijangka akan berlangsung sehingga 26 Jun, berbaki kurang daripada 5 hari). Saya akan memecahkan pendapatan pertaruhan Astar secara terperinci,

See all articles