美文网首页
PHP文件上传(以图片为例)

PHP文件上传(以图片为例)

作者: 拾实 | 来源:发表于2019-03-18 20:38 被阅读0次

0.上传单张图片

用户通过表单将文件上传到服务器,我们先来看下表单结构

    <form method='post' action='test.php' enctype='multipart/form-data'> 
      <input type='file' name='fn'><br><br>
      <input type='submit' value="上传">
    </form>

这里使用了含文件上传控件的表单,必须将form标签的enctype属性设置为multipart/form-data。通过点击选择文件按钮在本地选择单个待上传文件,点击上传按钮,即会由`test.php'来处理。
下面是上传一个单文件的完整代码:
test.php

<?php
echo <<<_END
    <form method='post' action='test.php' enctype='multipart/form-data'> 
    <input type='file' name='fn'><br><br>
    <input type='submit' value="上传">
    </form>
_END;
    if($_FILES){
        $n = $_FILES['fn']['name'];
        move_uploaded_file($_FILES['fn']['tmp_name'],$n);
    }
?>

这里表单也是通过php文件输出,如果操作成功,将会在test.php所在目录看到之前上传的文件。
要想弄懂代码含义,还需要弄明白$_FILES这个数组,在移动文件move_upload_file()之前,我们先用print_r()观察一下数组内容。

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

上传文件后,我们将会看到页面输出了以下内容:


想必你已经发现了,'fn'即是之前表单中type属性设置为file的input标签的name值。
数组元素 内容含义
$_FILES['fn']['name'] 上传文件的名字
$_FILES['fn']['type'] 上传文件的类型
$_FILES['fn']['tmp_name'] 存储在服务器上的临时文件名
$_FILES['fn']['error'] 上传文件导致的错误代码
$_FILES['fn']['size'] 上传文件的大小(单位为字节)

现在再来看下这个if语句:

    if($_FILES){
        $n = $_FILES['fn']['name'];
        move_uploaded_file($_FILES['fn']['tmp_name'],$n);
    }

当没有上传文件的时候,尝试用print_r()输出$_FILES只会得到一个空数组,即在上面的代码中,如果没有文件上传,将不会进入if语句内。然后我们使用move_uploaded_file()函数将临时文件保存到了指定目录下。

1.多文件上传

上面的例子中,选中了一个文件就不允许继续选择其他文件,有时候我们想一次上传多个文件,只需对此input按钮稍作改动:

<input type="file" name="fn[]" multiple="multiple">
//也可以简写为:<input type="file" name="fn[]" multiple>
  • name设置的值后加上一个中括号[]
  • 设置multiple属性的值为multiple
    多文件上传后再试试用print_r()打印$_FILES:

    这里我上传了三张图片。

2.文件验证

用户上传什么类型的文件至服务器是不可预测的,因此非常有必要对文件进行一个简单的验证:

    foreach($_FILES['pics']['type'] as $key=>$value)
    {
        switch ($value)
        {
            case 'image/jpeg': $ext = 'jpg'; break;
            case 'image/png': $ext = 'png'; break;
            case 'image/gif': $ext = 'gif'; break;
            default: $ext = ''; break;
        }
        if($ext)
        {
            //将执行的操作
        }

如果上传的文件类型符合要求才会进入if语句执行接下来的操作。

3.多文件上传并验证的实例

完整代码如下:(含选择图片后的网页预览)

<?php
echo <<<_END
<form method="post" action="" enctype="multipart/form-data">
    <input type="file" name="fn[]" multiple>
    <input type="submit" value="提交">
</form>
_END;
if($_FILES) {
    foreach($_FILES['fn']['type'] as $key=>$value)
    {
        switch ($value)
        {
            case 'image/jpeg': $ext = 'jpg'; break;
            case 'image/png': $ext = 'png'; break;
            case 'image/gif': $ext = 'gif'; break;
            default: $ext = ''; break;
        }
        if($ext)
        {
            //名称从0开始
            $name = "$key.$ext";
            move_uploaded_file($_FILES['fn']['tmp_name'][$key], $name);
            echo "<img src =$name>";
        }
    }
}
?>

相关文章

网友评论

      本文标题:PHP文件上传(以图片为例)

      本文链接:https://www.haomeiwen.com/subject/yxibmqtx.html