Home  >  Article  >  Backend Development  >  PHP文件上传效能 - 单文件上传

PHP文件上传效能 - 单文件上传

WBOY
WBOYOriginal
2016-06-13 12:18:14913browse

PHP文件上传功能 -- 单文件上传
这一节内容主要介绍PHP上传文件的单文件上传功能。

PHP主要通过POST方法来上传文件,文件上传之后存放在服务器的临时目录下(可查看PHP配置文件php.ini中的选项upload_tmp_dir)

接下来,我们来看一例子:

----------------------------------------------------------------------

    if(isset($_POST['submit'])){
        switch($_FILES['upload_file']['error']){
            case UPLOAD_ERR_INI_SIZE:
                echo "文件大小超过了服务器的限制";
                break;
            case UPLOAD_ERR_FORM_SIZE:
                echo "文件大小超过了浏览器的限制";
                break;
            case UPLOAD_ERR_PARTIAL:
                echo "只上传了部分文件";
                break;
            case UPLOAD_ERR_NO_FILE:
                echo "没有文件被上传";
                break;
            case UPLOAD_ERR_NO_TMP_DIR:
                echo "找不到临时文件夹";
                break;
            case UPLOAD_ERR_CANT_WRITE:
                echo "文件写入失败";
                break;
            case UPLOAD_ERR_OK:
                $upload_dir = './'.iconv("UTF-8","gb2312",$_FILES['upload_file']['name']);
                if(file_exists($upload_dir)){
                    echo '<script>alert(已经存在同名文件)</script>';
                }else{
                    if(move_uploaded_file($_FILES['upload_file']['tmp_name'],$upload_dir)){
                        echo '<script>alert(文件上传成功)</script>';
                    }else{
                        echo '<script>alert(文件移动失败)</script>';
                    }
                }
                break;
        }
    }

?>

---------------------------------------------------------------------


我们先分析一下代码:
1、我们看到代码中包含有$_FILES['upload_file']['error']之类的变量,那么这是什么意思呢?
$_FILES是一个全局二维数组,包含了上传文件的所有信息。这个数组有5个元素,分别描述了上传文件的属性:
$_FILES['upload_file']['name']        上传文件的名称
$_FILES['upload_file']['type']        上传文件的MIME类型
$_FILES['upload_file']['size']        上传文件的大小(单位:字节)
$_FILES['upload_file']['tmp_name']    上传文件的临时名称
$_FILES['upload_file']['error']        上传状态码

2、我们看到代码中包含有 UPLOAD_ERR_PARTIAL 之类的名称,那么这又是什么意思呢?
这些就是上传状态码:
UPLOAD_ERR_INI_SIZE        文件大小超过了服务器的限制,设置 php.ini 中的 upload_max_filesize
UPLOAD_ERR_FORM_SIZE        文件大小超过了浏览器的限制,设置 MAX_FILE_SIZE 隐藏表单域参数
UPLOAD_ERR_PARTIAL        文件只上传了一部分
UPLOAD_ERR_NO_FILE        上传表单中没有指定文件
UPLOAD_ERR_NO_TMP_DIR        找不到临时文件
UPLOAD_ERR_CANT_WRITE        文件写入失败
UPLOAD_ERR_OK            文件上传成功
代码执行效果:

3、代码中的move_uploaded_file()函数有什么作用?
因为文件上传后会被存放在服务器的临时目录下,这时候就需要利用move_uploaded_file()将其移动到指定位置上。

注意:若文件上传失败,可能是 php 配置文件中的某些参数没有设置合适,

例如File Uploads中的

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir = "\xampp\tmp"

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

此外还有:

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 30

; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time = 60

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:PHP惯用内置函数Next article:PHP调用WCF总结