PHP中,文件上传

 更新时间:2006年12月06日 00:00:00   作者:  
在PHP中,文件上传一般是通过move_uploaded_file()来实现的。 
bool move_uploaded_file ( string filename, string destination )本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。  

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

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

下面我们通过一个实例来说明PHP是如何实现文件上传的。 
test.php 的原文件 
复制代码 代码如下:
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
<title>网站文件上传实例</title>  
<!--  
-->  
</head>  
<body>  
<form enctype="multipart/form-data" action=action.php method=post>   
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">  
<input type=file name=upfile size=20>  
<input type=submit value='上传文件'>   
</form>   
</body>  
</html>  

MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。 

注: 要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件将无法上传。 

在处理上传页面中,上传文件的信息是通过数组 $_FILES 来获取的。我们假设文件上传字段的名称如上例所示,为 "upfile",则文件信息为: 

$_FILES['upfile']['name'] 

上传文件的原文件名。 

$_FILES['upfile']['type'] 

文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。 

$_FILES['upfile']['size'] 

上传文件的大小,单位为字节。 

$_FILES['upfile']['tmp_name'] 

文件上传后在服务端储存的临时文件名。 

$_FILES['upfile']['error'] 

和该文件上传相关的错误代码。 

PHP 将随文件信息数组一起返回一个对应的错误代码。该代码可以在文件上传时生成的文件数组中的 error 字段中被找到。代码如下: 

UPLOAD_ERR_OK 

其值为 0,文件上传成功。  

UPLOAD_ERR_INI_SIZE 

其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值 ,默认值为2M。 如果要想上传更大的,我们可以在php.ini里查找 upload_max_filesize = 2M 修改后即可生效。 

UPLOAD_ERR_FORM_SIZE 

其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 

UPLOAD_ERR_PARTIAL 

其值为 3,文件上传不完全,只有部分被上传。  

UPLOAD_ERR_NO_FILE 

其值为 4,文件上传失败。 

UPLOAD_ERR_NO_TMP_DIR 

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 

UPLOAD_ERR_CANT_WRITE 

其值为 7,文件写入失败。PHP 5.1.0 引进。 

注: 以上值在 PHP 4.3.0 之后变成了 PHP 常量。 
action.php 的原代码 
<? 
/** 
欢迎光临我们来我站交流学习经验  

*/ 

function getname($exname){ 
   $dir = "tmp/"; 
   $i=1; 
   if(!is_dir($dir)){ 
      mkdir($dir,0777); 
   } 

   while(true){ 
     if(!is_file($dir.$i.".".$exname)){ 
        $name=$i.".".$exname; 
        break; 
      } 
     $i++; 
   } 

   return $dir.$name; 


$exname=strtolower(substr($_FILES['upfile']['name'],(strrpos($_FILES['upfile']['name'],'.')+1))); 
$uploadfile = getname($exname);  

if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile)) { 
   echo "<h2><font color=#ff0000>文件上传成功!</font></h2><br><br>"; 
}else { 
   echo "<h2><font color=#ff0000>文件上传失败!</font></h2><br><br>"; 

echo "下面是文件上传的一些信息: 
    <br><br>原文件名:".$_FILES['upfile']['name'] . 
    "<br><br>类型:" .$_FILES['upfile']['type'] . 
    "<br><br>临时文件名:".$_FILES['upfile']['tmp_name']. 
    "<br><br>文件大小:".$_FILES['upfile']['size'] . 
    "<br><br>错误代码:".$_FILES['upfile']['error']; 
?>  

一定要确保上传后文件所在的文件夹的权限至为 777 ,这点在服务器上体现的特别明显,有时我们编写的上传代码没有任何的错误,然而在网上却无法实现上传功能,原因就在这里。 

本文只是讲了如何通过PHP来实现文件上传的,没看过这部分的朋友可以参考一下。

相关文章

  • 使用PHP连接数据库_实现用户数据的增删改查的整体操作示例

    使用PHP连接数据库_实现用户数据的增删改查的整体操作示例

    下面小编就为大家带来一篇使用PHP连接数据库_实现用户数据的增删改查的整体操作示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • apache集成php7.3.5的详细步骤

    apache集成php7.3.5的详细步骤

    这篇文章主要介绍了如何让apache集成php7.3.5详细步骤,由于仅需要 apache 和 php,不其要其他的东西,所以未选择集成包,手动配置 apache,让其支持 php。,需要的朋友可以参考下
    2019-06-06
  • 用PHP生成excel文件到指定目录

    用PHP生成excel文件到指定目录

    这篇文章主要介绍了用PHP生成excel文件到指定目录的相关资料,需要的朋友可以参考下
    2015-06-06
  • php读取本地json文件的实例

    php读取本地json文件的实例

    下面小编就为大家分享一篇php读取本地json文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • php中重定向网页跳转方法总结案例教程

    php中重定向网页跳转方法总结案例教程

    这篇文章主要介绍了php中重定向网页跳转方法总结案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 30个php操作redis常用方法代码例子

    30个php操作redis常用方法代码例子

    这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型、list类型和set类型的数据,需要的朋友可以参考下
    2014-07-07
  • php 实现银联商务H5支付的示例代码

    php 实现银联商务H5支付的示例代码

    这篇文章主要介绍了php 实现银联商务H5支付的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • CI框架教程之优化验证码机制详解【验证码辅助函数】

    CI框架教程之优化验证码机制详解【验证码辅助函数】

    这篇文章主要介绍了CI框架教程之优化验证码机制,结合实例形式详细分析了CodeIgniter框架验证码辅助函数相关使用及优化操作技巧,需要的朋友可以参考下
    2019-04-04
  • Discuz论坛标题和底部去掉版权信息实例讲解

    Discuz论坛标题和底部去掉版权信息实例讲解

    这篇文章主要介绍了Discuz论坛标题和底部去掉版权信息实例讲解,有正好遇到这个问题但是不知道修改哪个文件的同学可以跟着操作下,可以节省很多不必要的时间
    2021-03-03
  • php检测useragent版本示例

    php检测useragent版本示例

    这篇文章主要介绍了php检测useragent版本的示例,需要的朋友可以参考下
    2014-03-03

最新评论