zoukankan      html  css  js  c++  java
  • ***PHP $_FILES函数详解 + PHP文件上传 move_uploaded_file() 参数的正确写法

    PHP $_FILES函数详解

    在PHP中上传一个文件建一个表单要比ASP中灵活得多。具体的看代码。

    如: 
    复制代码代码如下:

    <form enctype="multipart/form-data" action="upload.php" method="post"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1000"> 
    <input name="myFile" type="file"> 
    <input type="submit" value="上传文件"> 
    </form> 

    然后upload.php中可以直接用 
    $_FILES 
    $_POST 
    $_GET 
    等函数获取表单内容。 

    今天我们着重讲$_FILES函数。 
    当客户端提交后,我们获得了一个$_FILES 数组 

    $_FILES数组内容如下: 
    $_FILES['myFile']['name'] 客户端文件的原名称。 
    $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 
    $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 
    $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。 
    $_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量) 
    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; 没有文件被上传。 
    值:5; 上传文件大小为0. 

    文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。



    PHP $_FILES中error返回值详解

    用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常。$_FILES[fieldName] ['error']==0代表一切正常,其它数值的具体含义请参考下面一段程序的注释部分,如有翻译不到之处还望指正

    $_FILES['file']['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_NO_TMP_DIR: 6 //没有找不到临时文件夹 

    UPLOAD_ERR_CANT_WRITE: 7 //文件写入失败 

    UPLOAD_ERR_EXTENSION: 8 //php文件上传扩展没有打开 

    UPLOAD_ERR_PARTIAL: 3 //文件只有部分被上传 

    复制代码代码如下:

    switch($_FILES[$field]['error']) {  

        case 1:    
            // 文件大小超出了服务器的空间大小    
            $this->setError("The file is too large (server).");    
    break;   

    case 2:    
            // 要上传的文件大小超出浏览器限制    
            $this->setError("The file is too large (form).");    
            break;    

        case 3:    
            // 文件仅部分被上传    
            $this->setError("The file was only partially uploaded.");    
            break;    

        case 4:    
            // 没有找到要上传的文件    
            $this->setError("No file was uploaded.");    
            break;    

        case 5:    
            // 服务器临时文件夹丢失    
            $this->setError("The servers temporary folder is missing.");    
            break;    

        case 6:    
            // 文件写入到临时文件夹出错    
            $this->setError("Failed to write to the temporary folder.");    
            break;    
    }


    PHP文件上传 move_uploaded_file() 参数的正确写法

    该函数的作用是把上传的文件移动到一个新的位置。
    有两个参数,第一个参数是你上传后的临时文件名,由系统自动生成。通常其样式为:
    $_FILE["file"]["tmp_name"];
    其中的file为你前台文件上传表单的名称。
    第二个参数就是包含有路径的新的文件名。如:
    "upload/1.jpg";
    这样,就会把你上传的文件,移动到当前目录下名称upload的子目录下,并把文件名保存为:1.jpg。


    
    

    php move_uploaded_file()上传文件实例及遇到问题的解决方法

    php move_uploaded_file()函数用于将HTTP POST的文件上传到服务器,如果目标文件已经存在,将会被覆盖。本文章向大家介绍move_uploaded_file()函数的使用方法及在使用该函数时需要注意的问题和解决方法,需要的朋友可以参考一下。

    php move_uploaded_file()介绍

    move_uploaded_file() 函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。

    语法

    move_uploaded_file(filename,destination)

    参数 

    参数描述
    filename 上传的文件的文件名。
    destination 移动文件到这个位置。

    本函数检查并确保由 filename 指定的文件是合法的上传文件。如果文件合法,则将其移动到 destination指定的位置。

    如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false。

    如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false,此外还会发出一条警告。

    注意

    1. 本函数仅用于通过 HTTP POST 上传的文件。
    2. 如果目标文件已经存在,将会被覆盖。

    move_uploaded_file()函数实例

    使用move_uploaded_file()函数上传文件到服务器。

    <?php
         $tmp_filename = $_FILES['myupload']['tmp_name'];
         if(!move_uploaded_file($tmp_filename,"/path/to/dest/{$_FILES['myupload']['name']}")) {
              echo "An error has occurred moving the uploaded file.<BR>";
              echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file.";
              exit;
         } else {
              echo "The file has been successfully uploaded!";
         }
    ?>

    move_uploaded_file上传文件失败的案例及解决方法

    今天在实现一个在用户注册时上传头像图片文件的PHP脚本时,出现了问题:php脚本代码如下:

    <?php  
    define('ROOT',dirname(__FILE__).'/');  
      if ($_FILES["file"]["error"] > 0)  
      {  
            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";  
      }  
      else  
        {  
            echo "Upload: " . $_FILES["file"]["name"] . "<br />";  
            echo "Type: " . $_FILES["file"]["type"] . "<br />";  
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";  
            echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";  
            if (file_exists("upload/" . $_FILES["file"]["name"]))  
            {  
                echo $_FILES["file"]["name"] . " already exists. ";  
            }  
            else  
            {  
                if(is_uploaded_file($_FILES['file']['tmp_name'])){  
                    $stored_path = ROOT.'/upload/'.basename($_FILES['file']['name']);  
                      
                    if(move_uploaded_file($_FILES['file']['tmp_name'],$stored_path)){  
                        echo "Stored in: " . $stored_path;  
                    }else{  
                        echo 'Stored failed:file save error';  
                    }  
                }else{  
                    echo 'Stored failed:no post ';  
                }  
             }  
        }  
    ?>  

    当我执行执行上面的脚本时,脚本输出"Stored failed:file save error",很明显是出错了.在php_error_log文件中我看到了出错问题:权限不够,我终于找到了出错的地方:我们存放图片的目的目录对执行PHP的用户来说是没有权限的,执行PHP脚本的用户和我写脚本代码、创建图片文件夹的用户不是同一个用户,因此只需要将文件权限改为777即可。

     
  • 相关阅读:
    mvc原理和mvc模式的优缺点
    Paxos算法详细图解
    环境搭建
    elasticsearch 安装
    redis rdb文件解析
    eclipse 远程调试
    java 解析xml
    理想化 redis
    redis 内存
    工作圈redis 使用
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/7782910.html
Copyright © 2011-2022 走看看