PHP中的文件上传

文件上传:

1.单个文件上传

2.多个文件上传

一.PHP配置文件中和上传有关的选项

file_uploads=on

upload_max_filesize= 最大不要超过服务器的内存

upload_tmp_dir= 上传文件的临时路径

二.上传表单需要注意事项

1.如果有文件操作,表单的提交方式必须是POST提交

2.表单上传需要使用type为file的表单

3.enctype="multipart/form-data"只要有文件上传就要改为这个值,其他情况可以使用默认值,用来指定表单编码的数据方式,让服务器知道,我们需要传递一个文件并带有一些常规的表单信息

4.建议添加一个MAX_FILE_SIZE隐藏表单,值得单位也是字节

三.PHP处理上传的数据

如果是文件上传的数据则使用$_FILES处理上传的文件

$_POST接受非上传的数据

//上传文件传递的信息

Array

(

[pic] => Array

(

[name] => 1.jpg

[type] => image/jpeg

[tmp_name] => uploadtemp\phpFFAB.tmp

[error] => 0

[size] => 9992

)

1.使用$_FILES["表单名"]["error"]检查上传是否出错

UPLOAD_ERR_OK

其值为 0,没有错误发生,文件上传成功。

UPLOAD_ERR_INI_SIZE

其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

UPLOAD_ERR_FORM_SIZE

其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

UPLOAD_ERR_PARTIAL

其值为 3,文件只有部分被上传。

UPLOAD_ERR_NO_FILE

其值为 4,没有文件被上传。

UPLOAD_ERR_NO_TMP_DIR

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。

UPLOAD_ERR_CANT_WRITE

其值为 7,文件写入失败。PHP 5.1.0 引进。

2.使用$_FILES["表单名"]["size"]限制大小,单位是字节 1M=1000000

3.使用$_FILES["表单名"]["type"]或是文件的扩展名限制类型

4.将上传后的文件名改名

实例:

view.html

<html>
    <head>
        <title>File Upload</title>
    </head>

    <body>
        <form action="upload.php" method="post" enctype="multipart/form-data">
        shopname:<input type="text" name="shopname" /><br>
        shopprice:<input type="text"  name="price" /><br>
        shopnum:<input type="text" name="num" /><br>
        <input type="hidden" name="MAX_FILE_SIZE" value="20000000" />
        shoppic:<input type="file" name="pic"/><br>
        <input type="submit" name="sub" value="添加商品" /><br>
        </form>
    </body>
</html>

upload.php

<?php
/*echo "<pre>";
print_r($_POST);

print_r($_FILES);
echo "</pre>";

Array
        (
        [pic] => Array
            (
                [name] => 1.jpg
                [type] => image/jpeg
                [tmp_name] => D:\uploadtemp\phpFFAB.tmp
                [error] => 0
                [size] => 9992
            )
*/

//使用$_FILES["pic"]["error"]检查上传是否出错
if($_FILES["pic"]["error"]>0){
    switch($_FILES["pic"]["error"]){
        case 1:
        echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值<br>";
        break;

        case 2:
        echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。<br>";
        break;

        case 3:
        echo "文件只有部分被上传。<br>";
        break;

        case 4:
        echo "没有文件被上传。<br>";
        break;
        default:
        echo "未知错误<br>";
    }
}


//使用$_FILES["pic"]["size"]限制大小,单位是字节 1M=1000000
//echo $_FILES["pic"]["size"];
$maxsize=50000;  //50k
if($_FILES["pic"]["size"]>$maxsize){
    echo "上传的文件太大,不能超过{$maxsize}字节";
    exit;
}

//使用$_FILES["pic"]["type"]或是文件的扩展名限制类型
/*list($dl,$xl)=explode("/", $_FILES["pic"]["type"]);
if($dl!="image"){
    echo "请上传一个图片";
    exit;
}*/
//按.将文件名分割
$arr=explode(".",$_FILES["pic"]["name"]);
//取后缀名
$hz=$arr[count($arr)-1];
//echo $hz;
//设置上传图片允许的类型
$allowtype=array("png","jpg","jpeg");
//判断后缀是否在要求的图片类型中
if(!in_array($hz,$allowtype)){
    echo "这是不允许的类型";
    exit;
}

//将上传后的文件名改名
//将临时位置的文件移动到指定的目录上

//制作上传文件的随机名
$filepath="./upload/";   //随机名路径
$randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100,999).".".$hz;    //随机文件名
//判断是否是上传文件
if(is_uploaded_file($_FILES["pic"]["tmp_name"])){
    //移动上传文件有专用的函数
    if(move_uploaded_file($_FILES["pic"]["tmp_name"],$filepath.$randname)){
        echo "上传文件成功!";
    }else{
        echo "上传失败!";
    }

}else{
    echo "不是一个上传文件";
}

//echo "上传文件成功!<br>";
?>