***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表明一切正常,其它数值的具体含义请参考下面一段程序的注释部分,若有翻译不到之处还望指正php

$_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。post

语法this

move_uploaded_file(filename,destination)

参数 spa

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

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

若是 filename 不是合法的上传文件,不会出现任何操做,move_uploaded_file() 将返回 false。翻译

若是 filename 是合法的上传文件,但出于某些缘由没法移动,不会出现任何操做,move_uploaded_file() 将返回 false,此外还会发出一条警告。code

注意

  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便可。