PHP使用input多文件上传到服务器

注意点

使用input选择多文件
使用move_uploaded_file(),上传文件到服务器

运行结果

在这里插入图片描述

代码

<?php
/****************************
 ***  功能:上传文件到服务器
 ****************************/
session_start();
/*
 * 文件上传函数封装
 * @param1 array $file,要上传的文件信息,包含5个元素
 * @param2 string $path,存储位置
 * @param3 $string error,错误信息
 * @param4 array $type=array(),MIME类型限定
 * @param5 int $size=2000000,默认2M
 * @return mixed, 成功返回文件名,失败返回false
 */
function fileUpload($file,$path,&$error,$type=array(),$size=2000000 ){
    //判断本身文件是否有效
    if(!isset($file['error'])){
        $error='文件无效';
        return false;
    }
    //有效路径的判断
    if(!is_dir($path)){
        $error='存储路径无效';
        return false;
    }
    //判断文件本身上传是否成功
    switch ($file['error']){
        case 1:
            $error='上传文件大小超出配置文件规定值';
            return false;
        case 2:
            $error='文件超过服务器允许大小';
            return false;
        case 3:
            $error='文件只有部分上传';
            return false;
        case 4:
            $error='用户没有选择文件上传';
            return false;
        case 6:
        case 7:
            $error='服务器操作失败';
            return false;
    }
    //判断类型是否符合
    if (!empty($type) && !in_array($file['type'],$type)){
        $error='当前上传的文件类型不符合';
        return false;
    }
    //大小判断
    if ($file['size']>$size){
        $error='文件大小超过当前允许范围.当前允许大小是:'.string($size/1000000).'M';
        return false;
    }
    //转存,移动文件
    $newfilename=getNewName($file['name']);
    if(@move_uploaded_file($file['tmp_name'],$path.''.$newfilename)){
        return $newfilename;
    }
    else{
        $error='文件上传失败';
        return false;
    }

}
//随机产生一个文件名
function getNewName($filename,$rand=6){
    $newname=date('YmdHis');//时间日期部分
    //随机部分
    $old=array_merge(range('a','z'),range('A','Z'));
    shuffle($old);
    for ($i=0;$i<$rand;$i++){
        $newname.=$old[$i];
    }
    return $newname.strstr($filename,'.');//组织有效文件名
}

?>


<!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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>通过move_upload_file()函数上传文件到服务器</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>

<!--单文件上传-->
<table width="830" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td colspan="3">
            <hr>
            <span>单文件上传</span>
        </td>
    </tr>
    <form action="" method="post" enctype="multipart/form-data">
        <tr>
            <td width="193" rowspan="4"> 
                <!--此语句可以设置上传文件大小超出表单中约定值-->
                <input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
            </td>
            <td width="423" height="50">选择上传文件:
                <!--此语句可以显示一个按钮用来打开本地电脑---->
                <input type="file" name="up_picture"/>
            </td>
            <td width="214" rowspan="4"> 
            </td>
        </tr>
        <tr>
            <td height="30" align="center">
                <span class="STYLE1">上传文件</span>
            </td>
        </tr>
        <tr>
            <td height="50" align="center">
                <button type="submit">提交</button>
                <button type="reset">重置</button>
            </td>
        </tr>
    </form>
    <tr>
        <td height="70">
            <?php
            if(!empty($_FILES["up_picture"]["name"])){//判断上传内容是否为空
                if($_FILES["up_picture"]["error"] > 0){//判断文件是否可以上传到服务器
                    echo "上传错误!";
                    switch($_FILES["up_picture"]["error"]){//如果上传错误 判断出错原因
                        case 1:
                            echo "上传文件大小超出配置文件规定值";
                            break;
                        case 2:
                            echo "上传文件大小超出表单中约定值";
                            break;
                        case 3:
                            echo "上传文件不全";
                            break;
                        case 4:
                            echo "没有上传文件";
                            break;
                    }
                }else{
                    if(!is_dir("./upfile/")){//判断指定目录是否存在
                        mkdir("./upfile/");//创建一个目录
                    }

                    $path = './upfile/'.time().strstr($_FILES["up_picture"]["name"],'.');//定义文件名称和存储位置

                    if(is_uploaded_file($_FILES['up_picture']['tmp_name'])){//是否是HTTP POST上传
                        if(move_uploaded_file($_FILES['up_picture']['tmp_name'],$path)){//执行上传
                            echo "<pre>";
                            print_r($_FILES);die;
                            echo "上传文件".$_FILES['up_picture']['name']."成功.文件大小为:".$_FILES['up_picture']['size'];
                        }else{
                            echo "上传失败";
                        }
                    }else{
                        echo "上传文件".$_FILES['up_picture']['name']."不合法";
                    }
                }
            }
            ?>
        </td>
    </tr>
    <tr>
        <td colspan="3">
            <hr>
        </td>
    </tr>
</table>

<!--多文件上传-->
<table width="830" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td colspan="3">
            <hr>
            <span>多文件上传</span>
        </td>
    </tr>
    <form action="" method="post" enctype="multipart/form-data">
        <tr>
            <td width="193" rowspan="4"> 
                <!--此语句可以设置上传文件大小超出表单中约定值-->
                <input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
            </td>
            <td width="423" height="50">选择上传文件:
                <!--此语句可以显示一个按钮用来打开本地电脑---->
                <input type="file" name="file[]" multiple="multiple"/>
            </td>
            <td width="214" rowspan="4"> 
            </td>
        </tr>
        <tr>
            <td height="30" align="center">
                <span class="STYLE1">上传文件</span>
            </td>
        </tr>
        <tr>
            <td height="50" align="center">
                <button type="submit">提交</button>
                <button type="reset">重置</button>
            </td>
        </tr>
    </form>
    <tr>
        <td height="70">
            <?php
            $arrFile =$_FILES['file'];
            
            $sPath = './upfile/';//定义文件存储目录
            //$sPath = './upload/upfile/';//定义文件存储目录
            $sError = null;//定义错误提示
            $arrType = array();//定义可上传文件类型范围
            //$arrType = array('image/jpeg','image/jpg','image/png','image/gif');

            if(!is_dir($sPath)){//判断指定目录是否存在
                mkdir($sPath);//创建一个目录
            }
            
            //循环上传
            for ($i=0,$len=count($arrFile['name']);$i<$len;$i++){
                $arrFileOne=array(
                    'name'=>$arrFile['name'][$i],
                    'type'=>$arrFile['type'][$i],
                    'tmp_name'=>$arrFile['tmp_name'][$i],
                    'error'=>$arrFile['error'][$i],
                    'size'=>$arrFile['size'][$i]
                );
                //调用文件上传函数
                $bRes=fileUpload($arrFileOne,$sPath,$sError,$arrType);
                if ($bRes){
                    echo '文件上传成功,对应的文件名是:'.$bRes.'<br>';
                }
                else{
                    echo $sError;
                }
            }
            ?>
        </td>
    </tr>
    <tr>
        <td colspan="3">
            <hr>
        </td>
    </tr>
</table>
</body>
</html>
要将文件上传服务器,您需要使用以下步骤: 1. 在HTML表单中添加一个文件输入字段。例如: ```html <form action="upload.php" method="post" enctype="multipart/form-data"> Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form> ``` 2. 在服务器端,您需要编写一个处理上传文件的脚本。在 PHP 中,您可以使用`move_uploaded_file()`函数将文件从临时位置移动到服务器上的目标位置。例如: ```php $target_dir = "uploads/"; // 目标文件夹 $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 目标文件路径 $uploadOk = 1; // 上传状态,默认为成功 // 检查文件是否已经存在 if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // 检查文件大小 if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // 允许上传的文件格式 $allowedFileType = array("jpg", "jpeg", "png", "gif"); $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); if(!in_array($fileType, $allowedFileType)) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // 检查上传状态 if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // 如果一切正常,上传文件 } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ``` 上面的脚本将文件上传到名为“uploads”的文件夹中,如果该文件夹不存在,则会创建它。它还执行一些基本的验证,例如检查文件大小和允许的文件类型。您可以根据自己的需求进行更改。 请注意,上面的代码仅适用于 PHP。如果您使用其他服务器端语言,则需要使用相应的函数和代码来处理文件上传
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值