php文件上传的应用和原理详解
1.form 标签 enctype 属性。
2.$_FILES 系统函数。 //将上传内容转换为数组。
3.move_uploaded_file 函数。 //移动存放在缓存文件夹里的上传文件到指定文件夹。
4.is_uploaded_file 函数。 //判断是否存在。
---------------------------------------
1.form 标签
格式:<form enctype="multipart/form-data" ... ...>
<input name="upfile" type="file">
2.$_FILES 系统函数
$_FILES['name'] //客户端上传文件原文件名。
$_FILES['type'] //文件的MIME类型,如:“image/gif”
$_FILES['size'] //上传文件大小,字节为单位。
$_FILES['tmp_name'] //临时文件名,一般为默认。
$_FILES['error'] //上传相关情况代码(0:成功,1:超过php.ini设置大小。2:超过PHP文件代码指定大小。3:文件只有部分被上传。4:没有文件被上传。5:上传文件大小为0。)
3.move_uploaded_file 函数
上传后移动文件到目标位置的函数
move_uploaded_file(临时文件,目标位置和文件名;)
4.is_uploaded_file 函数
判断上传MIME类型的文件函数
is_uploaded_file(MIME);
---------------------------------------
实例:
代码如下 | 复制代码 |
<form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="max_file_size" value="100000"> <input name="userfile" type="file"> <input type="submit" value="上传文件"> </form> |
注意
1、表单中enctype=”multipart/form-data”必须指定,以便让服务器知道文件带有常规的表单信息。
2、必须有一个可以设置上传文件最大长度的表单区域,即允许上传文件的最大值(按字节计算),它是隐藏值域,即max_file_size,通过设置其Value(值)可以限制上传文件的大小,避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。但是一般别人可以绕过这个值,所以安全起见,最好是在php.ini文件中配置upload_max_filesize选项,设定文件上传的大小,默认是2M
代码如下 | 复制代码 |
function uploadfile($type,$name,$ext,$size,$error,$tmp_name,$targetname,$upload_dir) $file_path = $upload_dir.$targetname; if($size == 0) if(!in_array($type,$FILE_MIMES) || !in_array($ext,$FILE_EXTS)) if(!move_uploaded_file($tmp_name, $file_path)) switch($error) |
如何上传多个文件?比如同时上传3个文件
代码如下 | 复制代码 |
只需将
改成 <input name="userfile[]" type="file"> |
对应的在调用此函数时,$_FILES['userfile']['name'][0],代表第一个文件的相关文件信息,依此类推,其他也一样。
一些关于php性能配置,有必须时我们也可以修改一下
max_execution_time = 30 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 60 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 128m ;每个PHP页面所吃掉的最大内存,默认128M。如果觉得小了,可以设置大点。128够用。
max_execution_time = 600
max_input_time = 600
upload_max_filesize = 32m
post_max_size = 32m
如果文件大小限制了我们可以如下解决
打开php.ini,首先找到
file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M
post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。
进一步配置以下的参数
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M
把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了
max_execution_time = 600
max_input_time = 600
memory_limit = 32m
file_uploads = on
upload_tmp_dir = /tmp
upload_max_filesize = 32m
post_max_size = 32m
1.PHP部分文件操作函数。(fopen , fread , filesize , fwrite , fclose)
2.unlink() , mkdir() 删除函数。
-------------------------------------------------------------
1.PHP部分文件操作函数
(1)fopen 打开文件函数。 R / W / A
格式:fonpen(路径和文件名,打开方式);
(2)fread 读取文件内容。
格式:fread(打开的文件,结束的位置);
(3)filesize 读取文件大小,字节为计量单位。
格式:filesize(路径和文件名);
(4)fwrite 写入文件内容。
格式:fwrite(路径和文件名,写入的内容);
(5)fclose 关闭打开的文件。
格式:fclose(路径和文件名);
-------------------------------------------------------------
2.unlink(); mkdir(); 删除函数
unlink(); 删除文件函数
格式:unlink(路径和文件);
mkdir(); 删除目录函数
格式:mkdir(路径和目录名);
-------------------------------------------------------------
实例操作:
代码如下 | 复制代码 |
<?php $fp = fopen("tmp.htm", "r"); //打开文件,以只读方式。 $id = "hello"; |
例,找到一个html生成类
代码如下 | 复制代码 |
<?php // -------------------------------------------------------------------------- class myHtml{ //生成html文件路径 $this->html_dir=$html_dir!=""?$html_dir:"./"; } |
php中魔术函数包括有tostring、call、clone、autoload几个常用的函数,希望此教程对各位朋友会有所帮助。
面向对象开发总结
1.对象的描述和配置。(可以理解为对对象的输出文字描述)
2.对象方法的一场处理。(可以理解为出现异常时候,自定义更人性化的错误信息)
3.克隆对象的应用。(可以理解为在原始对象上,克隆出一样的另一个对象,注意是另一个。)
4.自动载入对象的方法。(可以理解为引用)
1.对象描述和配置
方法名:__tostring()
格式:
代码如下 | 复制代码 |
class My { function __tostring() { return "这里写这个类的文字描述"; //要用return,echo会出错。 } } $p = new My(); echo $p; |
实例:
代码如下 | 复制代码 |
<?php class My { function __toString() { return "这个类的作用是,保卫地球。"; } } $p = new My(); echo $p; ?> |
2.对象方法的异常处理
调用一些不存在的对象方法的异常处理,是程序正常运行。
方法名:__call($funname,$arr_value)
格式:
代码如下 | 复制代码 |
class My { function __call($n,$v) { echo "错误的方法名:".$n; echo "错误的参数:".$v; } } |
实例:
代码如下 | 复制代码 |
<?php function __call ($n,$v) { |
3.对象的克隆
通过克隆方式可以在内存中生成两个一样的对象或升级原对象。(不是简单的赋值,而是在内存中开两块内存,克隆出的和被克隆的是2个属性方法一样的不同的两个对象)
方法名:__clone()
关键字:clone
格式:
代码如下 | 复制代码 |
class My { function __clone() { echo "克隆时自动调用的函数"; } } $a = new My(); $b = clone $a; |
实例:
代码如下 | 复制代码 |
<?php function __call ($n,$v) { echo $b->name="小猪头"."<br />"; //这是克隆并修改后的对象,如果使用 $b = $p,那修改$b->name="小猪头";后,再输出$p,也会被修改。 |
4.自动载入对象的方法
快速取得对象名称并自动载入进当前页面
方法名:__autoload()
格式:
代码如下 | 复制代码 |
function __autoload($class_n) { include($class_n.".php"); } $p = new MyPc(); //自动调用执行如下 $d = new demo(); //include("mypc.php") |
实例:
代码如下 | 复制代码 |
<?php $p = new class_name(); //这里实例化的类名就被上面的函数变量 $class_name 替代了,非常方便。 |
类的多态
1.多态的介绍和优势。
2.运算符:instanceof。
3.多态的简单应用。
1.多态的介绍和优势
介绍:多态性是继承抽象和继承后,面向对象语言的第三特征。
例子:USB接口,插上不同的东西会使用不同的功能。
优势:OOP并不仅仅是把很多函数和功能集合起来,目的而是使用类,继承,多态的方式描述我们生活中的一种情况。
2.运算符:instanceof
PHP一个类型运算符,用来测定一个给定的对象是否来自指定的对象
格式:
代码如下 | 复制代码 |
class A {} $thing = new A; |
3.多态的简单应用
实例1:
代码如下 | 复制代码 |
<?php } class B { } $new = new A; if ($new instanceof A) { |
实例2:
代码如下 | 复制代码 |
<?php class Zip implements MyUsb { class Mp3 implements MyUsb { class MyPc { } $zip = new Zip(); $mp3 = new Mp3(); $p->Add_Usb($zip); |
补充一个实例213.29.11.16更新
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>继承和多态</title>
</head>
<body>
<?php
/* 父类 */
class MyObject{
public $object_name; //图书名称
public $object_price; //图书价格
public $object_num; //图书数量
public $object_agio; //图书折扣
function __construct($name,$price,$num,$agio){ //构造函数
$this -> object_name = $name;
$this -> object_price = $price;
$this -> object_num = $num;
$this -> object_agio = $agio;
}
function showMe(){ //输出函数
echo '这句话不会显示。';
}
}
/* 子类Book */
class Book extends MyObject{ //MyObject的子类。
public $book_type; //类别
function __construct($type,$num){ //声明构造方法
$this -> book_type = $type;
$this -> object_num = $num;
}
function showMe(){ //重写父类中的showMe方法
return '本次新进'.$this -> book_type.'图书'.$this->object_num.'本<br>';
}
}
/* 子类Elec */
class Elec extends MyObject{ //MyObject的另一个子类
function showMe(){ //重写父类中的showMe方法
return '热卖图书:'.$this -> object_name.'<br>原价:'.$this -> object_price.'<br>特价:'.$this -> object_price * $this -> object_agio;
}
}
/* 实例化对象 */
$c_book = new Book('计算机类',1000); //声明一个Book子类对象
$h_elec = new Elec('PHP函数参考大全',98,3,0.8); //声明一个Elec子类对象
echo $c_book->showMe()."<br>"; //输出Book子类的showMe()方法
echo $h_elec->showMe(); //输出Elec子类的是showMe()方法
?>
</body>
</html>
类中接口的应用
1.关键字:interface
2.关键字:implements
1.接口的介绍与创建
接口:一种成员属性全部为抽象或常量的特殊抽象类。
规则:
1.类中全部为抽象方法。
2.抽象方法钱不用加abstract。
3.接口抽象方法属性为public。
4.成员属性必须为常量。
格式:
代码如下 | 复制代码 |
interface demo { function fun1(); |
2.接口的应用与规范
接口引用区别于类继承关键字 extends ,继承只能只是单一性,而接口可以使用关键字 implements 多个引用并用逗号分开
1.格式:普通类引用接口
class MyPc implements demo , demo2 , demo3 {
...
}
2.格式:抽象类应用接口例子
abstract class MyPc implements demo , demo2 , demo3 {
...
}
3.格式:继承父类引用接口并存
class MyPc extends Root implements demo , demo2 , demo3 {
...
}
先继承后接口,单继承多接口。
4.格式:接口与接口的继承
interface demo3 extends demo {
...
}
实例:
代码如下 | 复制代码 |
<?php interface demo2 { interface demo3 { class MyPc implements demo, demo2 { class MyPs extends MyPc implements demo3 { |
例
接口使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,且必须完全实现。
例子:
代码如下 | 复制代码 |
<?php $display = new Goods(); |
运行该例子,输出:
VIP用户商品价格:80 元
该例子演示了一个 PHP 接口的简单应用。该例子中,User 接口实现用户的折扣,而在 VipUser 类里面实现了具体的折扣系数。最后商品类 Goods 根据 User 接口来实现不同的用户报价。
该例子仅限于演示 PHP 接口的用法,不涉及其科学与否。
实现多个接口
PHP也可以在继承一个类的时候同时实现多个接口:
class 子类 extends 父类 implemtns 接口1, 接口2, ...
{
......
}
抽象类和接口的区别
接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:
1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。
2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。
3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- 本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29