温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中怎么样上传文件

发布时间:2021-10-19 14:16:44 来源:亿速云 阅读:85 作者:小新 栏目:编程语言

小编给大家分享一下PHP中怎么样上传文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

配置php.ini

想要使用文件上传的功能,首先我们需要配置php.ini,对其中的参数进行合理地设置。那我们先来看一下应该怎样去找到php.ini文件。示例如下:

首先我们输入:

<?php
phpinfo();
?>

输出结果:

PHP中怎么样上传文件

由上述结果中,在Loaded Configuration File一栏中可以看到php.ini的具体路径。由此便找到了php.ini文件。

php.ini中的文件太多可以使用ctrl+F来搜索相关配置项。那我们需要配置的参数如下:

  • file_uploads: on,说明服务器开启了文件上传功能;如果为 off,则说明服务器关闭了文件上传功能。

  • upload_tmp_dir:上传文件的临时目录。在文件被成功上传之前,文件首先会存放到服务器端的临时目录中,不设置的为系统默认的目录。

  • upload_max_filesize:服务器允许上传文件的最大值,以MB为单位。

  • max_execution_time:PHP 中一个指令所能执行的最大时间,单位是秒。

  • memory_limit:PHP 中一个指令所分配的内存空间,单位是 MB。

其中我们需要注意的是:配置完成后想要配置生效的话,需要重启Apache 服务器,配置的参数才生效。

预定义变量 $_FILES

在我们配置完php.ini之后,我们就需要通过预定义变量$_FILES 来对上传文件做一些限制和判断。$_FILES 变量存储的是上传文件的相关信息,其需要保存的信息如下:

  • $_FILES[filename][name]:保存上传文件的文件名

  • $_FILES[filename][size] :  保存上传文件的大小

  • $_FILES[filename][tmp_name] :  保存上传文件的临时名称

  • $_FILES[filename][type]   :保存上传文件的类型

  • $_FILES[filename][error] :  保存上传文件结果的代号,0 则表示成功

我们可以通过预定义变量 $_FILES结合HTML进行示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        foreach ($_FILES['upfile'] as $key => $value) {
            echo $key.'=>'.$value.'<br>';
        }
    }
?>

运行程序后,根据表单选择要上传的文件,我以test1.txt为例,输出结果为:

PHP中怎么样上传文件

根据保存的信息我们可以得出该文件的相关信息:

文件名为test1.txt;上传文件的类型为text/plain;保存上传文件的临时名称为C:\Windows\phpD16F.tmp;0 则表示上传文件成功;文件的大小为5。

单文件上传

通过上面的代码,我们已经得到了要上传文件的基本信息,接下来我们需要使用 move_uploaded_file() 函数来实现上传。它的主要功能就是把刚才上传的文件移动到一个新的位置。它的语法格式如下:

move_uploaded_file(string $filename, string $destination)

其中$filenameb表示的是上传文件的文件名,这个文件名并不是上传文件的原文件名,而是通过上一步$_FILES中tmp_name得到的文件名;$destinationb表示的是这个上传文件要移动到的位置。

执行函数执行成功的话会返回 TRUE,失败的话返回 FALSE。

接下来我们看一下示例:

把刚才的test1.txt文件上传到我在根目录中创建的一个名为phptest的文件夹中,操作如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname   = $_FILES['upfile']['tmp_name'];     // 临时文件名称
        $name      = $_FILES['upfile']['name'];         // 文件的原名称
        $path      = './phptest';                       // 上传目录
        $file_name = date('YmdHis').rand(100,999).$name;// 避免文件重名,更改文件名称
        if(move_uploaded_file($tmpname, $path.'/'.$file_name)){
            echo $name." 上传成功!";
        }else{
            echo $name." 上传失败!";
        }
    }
?>

按照表单上传文件后输出结果如下:

PHP中怎么样上传文件

如此则表示我想要上传的test2.txt已经上传到我需要的目录中了:

PHP中怎么样上传文件

多文件上传

通过上述示例已经了解了单文件上传的过程,但是在日常使用中经常会用到的是多文件上传,那多文件上传应该怎么操作呢?

示例如下:

还和上面的示例一样,上传多个文件到我在根目录里创建的phptest文件夹里

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname = $_FILES['upfile']['tmp_name'];
        $name = $_FILES['upfile']['name'];
        $path = './phptest';
        for ($i=0; $i < count($tmpname); $i++) {
            $file_name = date('YmdHis').rand(100,999).$name[$i];
            if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){
                echo $name[$i].' 上传成功!<br>';
            }else{
                echo $name[$i].' 上传失败!<br>';
            }
        }
    }
?>

输出结果:

PHP中怎么样上传文件

如此结果显示,多个文件已经上传到我的文件夹里了:

PHP中怎么样上传文件

以上是“PHP中怎么样上传文件”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI