***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即可。

 
posted @ 2017-11-04 11:41  谦信君  阅读(8091)  评论(1编辑  收藏  举报