Rumah pembangunan bahagian belakang tutorial php PHP文件上传操作实例详解

PHP文件上传操作实例详解

Jan 14, 2017 pm 02:17 PM
php muat naik fail

本文实例分析了PHP文件上传操作。分享给大家供大家参考,具体如下:

文件上传

发生在浏览器向服务器发出的请求中。

文件,对于浏览器来讲,就是表单中的一个特殊类型的数据而已。

浏览器表单中的数据,两种类型:

字符串类型(字节流编码)

文件类型(二进制编码),文件是表单数据中一部分

服务器角度:

在接受浏览器请求时,处理好表单内的数据。根据数据类型不同使用不同处理方法:

字符串类型,存储在$_POST变量中(内存)

文件型数据,存储在上传临时目录中

表单提交时,浏览器会默认的行为:

表单内的的内容都是字符串类型,即使添加了文件域,需要在form上增加属性,告知浏览器上传的不止有字符串类型数据。enctype="multipart/form-data"

<body>
  <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    </br>
    <input type="submit" value="submit">
  </form>
</body>
Salin selepas log masuk

php服务器在接收到文件类型的表单数据后,将文件存储于临时目录(属于临时文件,脚本周期内有效)

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =
Salin selepas log masuk

将临时文件持久化存储

move_uploaded_file(src_url,goa_url)
Salin selepas log masuk

$_FILES,存储了上传文件的信息包括临时地址

 PHP文件上传操作实例详解

错误类型:

0-1-2-3-4-6-7

0表示没有错误

1表示文件大于php的设置

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
Salin selepas log masuk

2表示文件大于表单设置max_file_size

<input type=&#39;hidden&#39; name=&#39;MAX_FILE_SIZE&#39; value=&#39;1024&#39;>
Salin selepas log masuk

3表示文件上传不完整

4表示没有上传文件

5表示逻辑上上传了0字节的文件(空文件)

6表示没有找到临时上传目录(权限不足)

7表示文件写入失败(磁盘空间、权限)

php允许的最大上传文件数量

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
Salin selepas log masuk

post存在最大值限制

一旦超过,php就不能正常处理post与file值可能为空值

; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 8M
Salin selepas log masuk

类型检测中

后缀名与mime都是浏览器提供的,需要php的扩展fileinfo完成对文件信息的检查(函数过程与面向对象)

;extension=php_fileinfo.dll

$finfo = new Finfo(FILEINFO_MIME_TYPE);
$mine_type = $finfo->file($file[&#39;tmp_name&#39;]);
Salin selepas log masuk

分子目录存储上传文件

原则:业务逻辑、文件数量、时间

创建目录 mkdir()

检查目录 is_dir()

<?php
upload($_FILES[&#39;file&#39;]);
function upload($file){
  if($file[&#39;error&#39;]!=0){
    return false;
  }
  //3M
  $max_size = 3145728;
  if($max_size<$file[&#39;size&#39;]){
    return false;
  }
  //设置一个后缀名与mime的映射关系
  $type_map = array(
    &#39;.jpeg&#39;=>array(&#39;image/jpeg&#39;,&#39;image/pjpeg&#39;),
    &#39;.jpg&#39;=>array(&#39;image/jpeg&#39;,&#39;image/pjpeg&#39;),
    &#39;.png&#39;=>array(&#39;image/png&#39;,&#39;image/x-png&#39;),
    &#39;.gif&#39;=>array(&#39;image/gif&#39;)
  );
  //后缀
  $allow_ext_list = array(&#39;.jpeg&#39;,&#39;.png&#39;,&#39;.jpg&#39;);
  $ext = strtolower(strrchr($file[&#39;name&#39;],&#39;.&#39;));
  if(!in_array($ext,$allow_ext_list)){
    echo &#39;不支持该图片格式&#39;;
    return false;
  }
  //MIME
  $allow_mime_list = array();
  foreach($allow_ext_list as $val){
    $allow_mime_list = array_merge($allow_mime_list,$type_map[$val]);
  }
  //浏览器提供信息坚持
  $allow_mime_list = array_unique($allow_mime_list);
  if(!in_array($file[&#39;type&#39;],$allow_mime_list)){
    echo &#39;不支持该图片格式&#39;;
    return false;
  }
  //php自身检查
  $file_mime = new Finfo(FILEINFO_MIME_TYPE);
  $mime = $file_mime->file($file[&#39;tmp_name&#39;]);
  if(!in_array($mime,$allow_mime_list)){
    echo &#39;不支持该图片格式&#39;;
    return false;
  }
  //目录存储
  $up_loadpath = &#39;./&#39;;
  $sub_dir = date(&#39;Ymdh&#39;);
  if(!is_dir($up_loadpath.$sub_dir)){
    mkdir($up_loadpath.$sub_dir);
  }
  $prefix = &#39;bee_&#39;;
  $name = uniqid($prefix,true).$ext;
  if(move_uploaded_file($file[&#39;tmp_name&#39;],$up_loadpath.$sub_dir.$name)){
    echo &#39;上传成功&#39;;
    return $name;
  }else{
    echo &#39;上传失败&#39;;
    return false;
  }
}
Salin selepas log masuk

希望本文所述对大家PHP程序设计有所帮助。

更多 PHP文件上传操作实例详解相关文章请关注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)

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,

Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Mar 31, 2025 pm 11:54 PM

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Bagaimana cara debug mod CLI dalam phpstorm? Bagaimana cara debug mod CLI dalam phpstorm? Apr 01, 2025 pm 02:57 PM

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

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.

Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Mar 28, 2025 pm 05:11 PM

Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.

See all articles