当前位置:   article > 正文

php(上传文件)_php 上传文件

php 上传文件

1、php文件上传配置指令

(1)file_uploads = On / off (是否可以接受文件上传)

(2)max_input_time = 60 在提示错误之前解析输入所花费的最长时间,以秒为单位,如果经常需要传输大文件,这个时限应该设置得合理一些。

(3)max_file_uploads = 20 对可以同时上传文件数设置了一个上限。

(4)memory_limit = 128M 设置脚本可以分配得最大内存,可以防止脚本独占服务器内容,甚至导致服务器崩溃。

(5)post_max_size = 8M 对通过post 方法提交得数据大小设置了一个限制

(6)upload_max_filesize = 2M  限定上传文件的最大大小,以MB为单位,该值必须小于post_max_size(通过这条语句可以改变上传文件的最大大小)

(7)upload_temp_dir = "...../..../..../..."文件上传得临时目录。

2、可以通过超全局变量数组:$_FILES,来获取上传文件的信息:

1)$_FILES["控件的名字(即name)"]["name"] :上传的文件名(name就是文件名的信息,含扩展名)

2)$_FILES["控件的名字(即name)"]["type"] :文件类型,上传文件的类型,这个值有时会产生意外结果,建议通过文件扩展名显式验证

3)$_FILES["控件的名字(即name)"]["tmpname"]:临时文件夹中的文件名,如果需要上传文件,就需要把临时文件给移动到指定文件上,否则,程序执行完后,临时文件就会被清空

4)$_FILES["控件的名字(即name)"]["size"] 上传文件的大小,以字节为单位

5)$_FILES["控件的名字(即name)"]["error"] 上传结果

        1、UPLOAD_ERR_OK: 上传成功,则返回 0

        2、UPLOAD_ERR_INI_SIZE:超出文件规定大小(upload_max_filesize) ,则返回1

        3、UPLOAD_ERR_FORM_SIZE 超出嵌入在HTML表单中的文件max_file_size 大小,其中max_file_size可能会被黑客修改,所以不建议使用。此时返回 2

        4、UPLOAD_ERR_PARTIAL 文件没有完全上传,一般在发生网络错误时会出现,则返回 3

        5、UPLOAD_ERR_NO_FILE 用户没有指定上传文件就提交表单,则返回 4

        6、5 是文件传上去了,但是转译没有成功。

       7、UPLOAD_ERR_NO_TMP_DIR 临时目录不存在,则返回 6

       8、UPLOAD_ERR_CANT_WRITE 如果文件无法写入磁盘,则返回7

        9、UPLOAD_ERR_EXTENSION 如果PHP的配置问题导致上传失败,则返回8

 、

注意:可以通过 print_r 来查看系统数组$_FILE的内容

 如:

  1. html代码:
  2. <form action="upioad_file.php" method="post" enctype="multipart/form-data" >
  3. 文件名:<input type="file" name="my" />
  4. <input type="submit" value="上传" />
  5. </form>
  6. php代码:
  7. echo "<pre>";
  8. print_r($_FILES);

运行结果:

  1. Array
  2. (
  3. [my] => Array
  4. (
  5. [name] => 新建 Microsoft Word 文档.docx //上传文件的文件名
  6. [type] => application/vnd.openxmlformats-officedocument.wordprocessingml.document //文件的类型
  7. [tmp_name] => C:\wamp\tmp\phpC374.tmp // 文件临时的储存地址
  8. [error] => 0 //文件上传过程中有没有问题
  9. [size] => 0 //上传文件的大小,以字节为单位
  10. )
  11. )

3、文件上传函数

        (1)判断文件是否已上传(is_uploaded_file()):

        is_uploaded_file()函数是函数判断指定的文件是否是通过 HTTP POST 上传的。

        如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。

注意:is_uploaded_file($_FILES['file']['tmp_name'])函数要在move_uploaded_file()函数之前使用,要先判断是不是正确合法的文件来源,然后再进行上传。

         (2)移动已上传文件(move_uploaded_file):

           move_uploaded_file 函数 ,自动检查文件确实是通过HTTP POST机制上传的,如果指定的文件未上传,则移动失败,返回false。在使用该函数时可以不必使用is_uploaded_file()进行判断。 


密码加密函数: 

md5 ( $_POST[ ‘ 密码控件(input)中的name ’ ] );

输出时会输出,32位的整数。

  1. html代码:
  2. <tr>
  3. <td>密码</td>
  4. <td><input type="password" name="password"/></td>
  5. </tr>
  6. php代码:
  7. echo md5 ( $_POST[ 'password' ] );

如果需要使用表单以文件的形式上传,则 from 标签里面必须包含三个属性:

<form action =" 上传的文件名 " method = " post " enctype = "multipart/form-data (固定用法,上传文件当中编码的方式) "(上传文件必须有这个属性)  >

<input(输入控件) type = " file “(文件上传属性)name = " 这个控件的名字,信息接收时使用 " />

判断和创建指定的文件夹(可供接收提交文件使用的文件夹):

使用 is_dir(“文件名”(可用变量代替));函数判断指定的文件夹是否存在。

如果不存在,使用mkdir("文件名");创建一个新的文件夹。

如:

  1. html代码:
  2. <form action="upioad_file.php" method="post" enctype="multipart/form-data" >
  3. 文件名:<input type="file" name="my" />
  4. <input type="submit" value="上传" />
  5. </form>
  6. php代码:
  7. $dir = 'upload'; // 将文件名赋给变量 $dir
  8. if(!is_dir($dir)) //判断文件是否存在,存在返回 1
  9. {
  10. mkdir($dir); //如果不存在,创建一个新的文件夹
  11. }

将上传的文件,从临时存储路径移动到指定文件夹下:

使用move_uploaded_file()函数:

move_uploaded_file( $_FILES[ ' 控件中的name ' ][ ' temp_name '(临时存储路径) ],‘ upload/ ’ (移动到指定文件夹下面) . (将提交上来的文件名(可以修改)和指定文件夹名进行字符串连接) $ _FILES[ ' 控件中的name ' ][ ' name '] )  也可以用来判断(使用 if 语句)临时文件是否移动成功,成功返回 1 否则,返回 0 。

如:

  1. html:
  2. <form action="upioad_file.php" method="post" enctype="multipart/form-data" >
  3. 文件名:<input type="file" name="my" />
  4. <input type="submit" value="上传" />
  5. </form>
  6. php:
  7. $dir = 'upload';
  8. if(!is_dir($dir))
  9. {
  10. mkdir($dir);
  11. }
  12. move_uploaded_file($_FILES['my']['tmp_name'],'upload/'.$_FILES['my']['name']);

判断文件上传是否成功:

使用 is_uploaded_file ( $_FILES[ ' 控件中的name ' ][ ' tmp_name ' ] )判断临时文件上传成功了没有,成功返回 1 否则,返回 0 。

如:

  1. html:
  2. <form action="upioad_file.php" method="post" enctype="multipart/form-data" >
  3. 文件名:<input type="file" name="my" />
  4. <input type="submit" value="上传" />
  5. </form>
  6. php:
  7. if(is_uploaded_file($_FILES['my']['tmp_name'])) //判断指定的文件是否是通过 POST 成功上传的
  8. {
  9. if(move_uploaded_file($_FILES['my']['tmp_name'],'upload/'.$_FILES['my']['name']))
  10. //判断文件移动是否成功
  11. {
  12. echo "<script>alert('文件上传成功');</script>";
  13. }else{
  14. echo "<script>alert('文件上传失败');</script>";
  15. }
  16. }

为了简化文件,可以将 html 代码 移动到 php 代码中:

此时 html 中的文件提交直接提交到当前页面即可。

如:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html" />
  5. <meta name="author" content="大眼仔~旭" />
  6. <title>无标题 1</title>
  7. </head>
  8. <body>
  9. <h1>注册页面</h1>
  10. <form action="" method="post" enctype="multipart/form-data" >
  11. 文件名:<input type="file" name="my" />
  12. <input type="submit" value="上传" />
  13. </form>
  14. <?php
  15. echo "<pre>";
  16. $dir = 'upload';
  17. if(!is_dir($dir))
  18. {
  19. mkdir($dir);
  20. }
  21. if(is_uploaded_file($_FILES['my']['tmp_name']))// 判断指定的文件是否是通过 POST 成功上传的
  22. {
  23. if(move_uploaded_file($_FILES['my']['tmp_name'],'upload/'.$_FILES['my']['name']))
  24. {
  25. echo "<script>alert('文件上传成功');</script>";
  26. }else{
  27. echo "<script>alert('文件上传失败');</script>";
  28. }
  29. }
  30. echo "</pre>";
  31. ?>
  32. </body>
  33. </html>

当 html 和 php 合为一个代码的时,什么时候执行 php 代码:

我们可以判断:有没有点击提交按钮,如果点击了,就执行 php 代码,没点击就不需要执行 php 代码。

判断有没有点击提交按钮的时候,需要通过控件(input)里面的 name 属性找到这个控件

 使用$_POST[' 控件里面的name '] 来接收是否点击提交

错误屏蔽运算符:@

如:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html" />
  5. <meta name="author" content="大眼仔~旭" />
  6. <title>无标题 1</title>
  7. </head>
  8. <body>
  9. <h1>注册页面</h1>
  10. <form action="" method="post" enctype="multipart/form-data" >
  11. 文件名:<input type="file" name="my" />
  12. <input type="submit" value="上传" name="submit" />//这里必须要有name,否则,php 代码中无法找到这个控件
  13. </form>
  14. <?php
  15. echo "<pre>";
  16. if(@$_POST['submit'])//接收上传按钮的信息,如果点击上传按钮则为真,就执行代码
  17. //@:错误屏蔽符,屏蔽错误提示,当没点击上传按钮时,会提示错误。
  18. {
  19. $dir = 'upload';
  20. if(!is_dir($dir))
  21. {
  22. mkdir($dir);
  23. }
  24. if(is_uploaded_file($_FILES['my']['tmp_name']))
  25. {
  26. if(move_uploaded_file($_FILES['my']['tmp_name'],'upload/'.$_FILES['my']['name']))
  27. {
  28. echo "<script>alert('文件上传成功');</script>";
  29. }else{
  30. echo "<script>alert('文件上传失败');</script>";
  31. }
  32. }
  33. echo "</pre>";
  34. }
  35. ?>
  36. </body>
  37. </html>

判断文件名是否为空:

使用:empty()函数:

如:

  1. if(!empty( $_FILES[ ' my ' ][ ' name ' ] )){
  2. }
  3. 或:
  4. if( $_FILES[ ' my ' ][ ' name ' ] !=' ' ){
  5. }

判断文件的类型符不符合:

定义一个数组,数组里面包含符合文件类型的扩展名。

通过提取文件名的扩展名并判断数组中有没有存在。

如:

  1. if(!empty($_FILES['my']['name']))//判断接收的文件名是否为空
  2. {
  3. $extName = array ('doc','docx','pdf'); //符合文件的扩展名数组
  4. $tmp = explode('.',$_FILES['my']['name']);//字符串分割函数,将提交上来的文件名分割
  5. $temp = array_pop($tmp); //将分割完的数组最后一个元素弹出
  6. if(in_array($temp,$extName)) //判断提取的扩展名是否在符合文件的扩展名数组中
  7. echo '文件类型符合';
  8. else
  9. echo '文件类型不符合';
  10. }

判断文件的大小:

通过系统全局变量$_FILE[ '  ' ][ ' size ' ] 获取

if ( $_FILE[ ' my ' ][ ' size ' ]  < 1000000(一兆) );

如:规定文件大小不能超过2兆

  1. if( $_FILES['my']['size'] < 2000000 )
  2. echo '文件大小符合';
  3. else
  4. echo '文件超出文件大小';

为二维数组降维:

$变量名(可替换变量) = $_FILES [ ' my ' ];

这样所有的 $_FILES[ ' my ' ][ ' name ' ]等变量均替换成 $变量名[ ' name ' ]等形式执行。 

给文件名添加日期并添加随机数(使文件名不重复):

在移动接收到的文件时可以在文件名前面添加随机数,使用 rand() 。

使用date()函数,data 函数有个要求,括号内是每个单词的第一个字母,如果与前面的字母重复,就取单词下一位。(Y,H需要大写)

如:

  1. $newname = date('YmdHis').'-'.rand(100,900).$_FILES['my']['name'];
  2. //注意:Y,H需要大写,否则不全
  3. if(move_uploaded_file($_FILES['my']['tmp_name'],'upload/'.$newname))
  4. {
  5. echo "<script>alert('文件上传成功');</script>";
  6. }else{
  7. echo "<script>alert('文件上传失败');</script>";
  8. }

拓展:上传多个文件:

       (1) 控件(input)中的name属性需要使用数组来定义

        (2)接收需要使用三维数组($_FILES[ ' 控件中的name ' ][ ‘ name ’ ][ $变量名 ])接收上传信息。(此时$变量名是0,1,2,3等,相当于一个索引)

        如:

  1. html:
  2. <form action="" method="post" enctype="multipart/form-data" >
  3. <p>文件名1:<input type="file" name="my[]" /></p>//注意:name的值是一个数组
  4. <p>文件名2:<input type="file" name="my[]" /></p>
  5. <p>文件名3:<input type="file" name="my[]" /></p>
  6. <input type="submit" value="上传" name="submit" />
  7. </form>
  8. php:
  9. echo $_FILES['my']['name'][2];// 2 可以使用一个变量来代替

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/756687
推荐阅读
相关标签
  

闽ICP备14008679号