热搜词
发表于 2021-11-4 15:01:00 | 显示全部楼层 |阅读模式
目录结构如下,其中包含两个代码文件和一个uploads文件夹(用于存放上传的文件)
01.png

index.php
该代码实现html表单提交功能,包括需要填写学校、姓名和手机号,上传文件大小不得超过1G。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>文件上传系统</title>
    </head>
    <body>
<h1>上传文件</h1>
<form action="fileSystem.php" method="post" enctype="multipart/form-data">
        <h3 style="color: red">文件大小不要超过1G</h3><hr>
        请输入学校:<input type="text" name="school"><br>
        请输入姓名:<input type="text" name="name"><br>
                请输入手机:<input type="text" name="mobile"><br>
        <input type="hidden" name="MAX_FILE_SIZE" value="25000000" />
        <input type="file" name="upfile[]" size= "25" maxlength="100"><br><br>
        <input type="submit" value="提交">
</form>
    </body>
</html>


fileSystem.php
该代码处理文件上传逻辑

  1. <?php
  2.     header("Content-type=text/html;charset=utf-8");
  3.     if (empty($_POST)) {
  4.         exit("提交的表单数据超过post_max_size的配置");
  5.     }
  6.     // 转存post提交的各个变量
  7.     $num = $_POST['num'];
  8.     $username = $_POST['username'];
  9.     $arr = $_FILES['upfile'];
  10.     $file =array();
  11.     for ($i=0; $i < count($arr['name']); $i++) {
  12.         $file[$i]['name'] = $arr['name'][$i];
  13.         $file[$i]['type'] = $arr['type'][$i];
  14.         $file[$i]['tmp_name'] = $arr['tmp_name'][$i];
  15.         $file[$i]['error'] = $arr['error'][$i];
  16.         $file[$i]['size'] = $arr['size'][$i];
  17.     }

  18.     for ($i=0; $i < count($file); $i++) {
  19.         switch ($file[$i]['error']) {
  20.             default:
  21.                 echo "Failed upload";
  22.             case 0:         
  23.                 $fileName = $file[$i]['name'];
  24.                 $fileTemp = $file[$i]['tmp_name'];
  25.                 // 文件名称合成:uploads目录下,学号+姓名+文件后缀
  26.                 // 其中文件后缀使用了php字符串处理的几个方法,主要是通过判断"."的位置获取后缀名
  27.                 $destination = "uploads/" . $num . $username . substr($file[$i]['name'], strpos($file[$i]['name'], ".")) ;
  28.                 move_uploaded_file($fileTemp, $destination);
  29.                 echo "Successful upload";
  30.                 break;
  31.             case 1:
  32.                 echo "php.ini upload_max_filesize is to small";
  33.                 break;
  34.             case 2:
  35.                 echo "upload file is to large";
  36.                 break;
  37.             case 3:
  38.                 echo "only part is ok";
  39.                 break;
  40.             case 4:
  41.                 echo "no charge file";
  42.                 break;
  43.         }
  44.     }   
  45. ?>
复制代码

需要注意的是,php文件上传有诸多控制,需要修改相关参数

源代码
  1. <input type="hidden" name="MAX_FILE_SIZE" value="25000000" />
复制代码

php相关配置文件 php.ini文件

max_execution_time = 30,每个脚本运行的最长时间max_input_time = 60,每个脚本可以消耗的时间
memory_limit = 128M,脚本运行最大消耗的内存,-1为无限制
post_max_size = 8M,表单提交最大数据

Apache或者Nginx相关配置文件
Apahce目录下的httpd.conf文件添加LimitRequestBody 31457280 即30M=30*1024*1024
Nginx目录下的nginx.conf文件添加client_max_body_size 30M;





全部评论1
灰儿 发表于 2021-11-8 11:12:23 | 显示全部楼层
如何用php实现简单的文件上传功能?

上传页面:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form method="post" action="chuli.php" enctype="multipart/form-data">
            <input type="file" name="file" />
            <input type="submit" value="上传"/>
        </form>
    </body>
</html>

处理页面:
<?php
//读取上传的文件信息,以数组方式返回
$arr = $_FILES["file"];
//var_dump($arr);
//以下为输出内容:此处作为注释写在这,便于理解
//array(5) {
//["name"]=>    文件名称
//string(5) "7.png"
//["type"]=>      文件类型
//string(9) "image/png"
//["tmp_name"]=>   文件临时储存的地方
//string(53) "C:\Users\Administrator\AppData\Local\Temp\phpF626.tmp"
//["error"]=>      报错:上传没错则为0;有错则会提示错误     
//int(0)
//["size"]=>       上传文件的大小
//int(18747)
//}

//上传的文件被保存的文件名,images 为同一目录下要保存上传文件的文件名
$filename="./images/".$arr["name"];

//转换格式,将utf-8转为国标
$filename = iconv("UTF-8","gb2312",$filename);

//将文件从临时文件移到保存的文件(核心代码)
  到此处便可以实现文件的上传功能;但是如我们所知,实际上文件上传时会有很多要求;诸如文件类型,文件大小,文件名是否重复等

所以要对chuili.php进行修改:


<?php

$arr = $_FILES["file"];

//加限制条件

if(($arr["type"]=="image/jpeg" || $arr["type"]=="image/png") && $arr["size"]<1024000 )
{
    //临时文件的路径
    //$arr["tmp_name"];

    $filename = "./images/".time().$arr["name"];

    //保存之前判断该文件是否存在
    if(file_exists($filename))
    {
        echo "该文件已存在";
    }
    else
    {

        $filename = iconv("UTF-8","gb2312",$filename);

        move_uploaded_file($arr["tmp_name"],$filename);
    }
}
else
{
    echo "上传的文件大小或类型不符合";
}
move_uploaded_file($arr["tmp_name"],$filename);
?>


回复

使用道具 举报

回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-28 11:32 , Processed in 0.195695 second(s), 25 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team