当前位置:首页 > PHP教程 > php上传下载 > 列表

php实现文件上传的程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2013-11-13 23:52:36 浏览: 评论:0 

本文章来给初学者介绍一个简单的php实现文件上传的程序代码,大家可拿下去供学习使用,如果放到网络上应用我们需要更多过滤来判断了。

先来看实例

  1. <?php  
  2.          
  3.         //判断临时文件存放路径是否包含用户上传的文件  
  4.         if(is_uploaded_file($_FILES["uploadfile"]["tmp_name"])){  
  5.         //为了更高效,将信息存放在变量中  
  6.         $upfile=$_FILES["uploadfile"];//用一个数组类型的字符串存放上传文件的信息  
  7.         //print_r($upfile);//如果打印则输出类似这样的信息Array ( [name] => m.jpg [type] => image/jpeg [tmp_name] => C:WINDOWSTempphp1A.tmp [error] => 0 [size] => 44905 )  
  8.         $name=$upfile["name"];//便于以后转移文件时命名  
  9.         $type=$upfile["type"];//上传文件的类型  
  10.         $size=$upfile["size"];//上传文件的大小  
  11.         $tmp_name=$upfile["tmp_name"];//用户上传文件的临时名称  
  12.         $error=$upfile["error"];//上传过程中的错误信息  
  13.         //echo $name;  
  14.         //对文件类型进行判断,判断是否要转移文件,如果符合要求则设置$ok=1即可以转移  
  15.         switch($type){  
  16.             case "image/jpg"$ok=1;  
  17.             break;  
  18.             case "image/jpeg"$ok=1;  
  19.             break;  
  20.             case "image/gif" : $ok=1;  
  21.             break;  
  22.             default:$ok=0;  
  23.             break;  
  24.         }  
  25.         //如果文件符合要求并且上传过程中没有错误  
  26.         if($ok&&$error=='0'){  
  27.             //调用move_uploaded_file()函数,进行文件转移  
  28.             move_uploaded_file($tmp_name,'up/'.$name);  
  29.             //操作成功后,提示成功  
  30.             echo "<script language="javascript">alert('succeed')</script>";  
  31.         }else{  
  32.             //如果文件不符合类型或者上传过程中有错误,提示失败  
  33.             echo "<script language="javascript">alert('failed')</script>";  
  34.         }  
  35.     }  
  36. ?>  
  37. <!--设置提交文件的表单-->  
  38. <form enctype="multipart/form-data" method="post" name="uploadform">  
  39. <input type="file" name="uploadfile" value="Upload File">  
  40. <input type="submit" name="submit" value="Upload">  
  41. </form> 

上面的代码完全可以工作,但实际应用中漏洞百出,让我们逐步来完善之首先,上载的文件必须有一个固定的目录保存,我们在这里用一个$UploadPath变量保存之,如$UploadPath = "/home/flier/upload/"; 或复杂一点的自动定位,如

  1. $UploadPath = AddSlashes(dirname($PATH_TRANSLATED))."\upload\"

$PATH_TRANSLATED顾名思义是当前传送目录

我们假定以其一个名为upload的子目录来保存上载的文件。dirname函数返回其目录名,然后加上子目录名然后用一个变量$FileName保存完整的上载后文件名和路径 $FileName = $UploadPath.$UploadFile_name;

其次,我们还想让用户得知上载文件的简要信息,如上载文件的大小if($UploadFile_size <1024) {  //上载文件大小

  1. $FileSize = (string)$UploadFile_size . "字节";  
  2. }  
  3. elseif($UploadFile_size <(1024 * 1024)) {  
  4.     $FileSize = number_format((double)($UploadFile_size / 1024), 1) . " KB";  
  5. }  
  6. else{  
  7.     $FileSize = number_format((double)($UploadFile_size / (1024 * 1024)), 1) . " MB";  
  8. }   

number_format函数起到格式化输出的作用,具体用法请参照手册。下一步我们必须考虑到文件已经存在和拷贝操作失败的情况,并提供相应的提示信息if(!file_exists($FileName)){

  1. if(copy($UploadFile,$FileName)) {  
  2.         echo "文件 $UploadFile_name($FileSize)上载成功!";  
  3.      }  
  4.      else {  
  5.           echo "文件 $UploadFile_name上载失败!";   
  6.      }  
  7.     unlink($UploadFile);  
  8. }  
  9. else {  
  10.      echo "文件 $UploadFile_name已经存在!";  

然后我们应该考虑到大文件上载时容易出现超时的情况,可以用set_time_limit($TimeLimit);加大超时限制时间。
最后,把截面和实现代码综合到一个单独的文件中,为了实现这个想法,我们通过在 form中添加一个隐含值<INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1">指出当前的状态(界面或实现),以便区分对待

下面程序可用于实例应用

  1. function FileUpload( $resourceType$currentFolder$sCommand )  
  2. {  
  3.  if (!isset($_FILES)) {  
  4.   global $_FILES;  
  5.  }  
  6.  $sErrorNumber = '0' ;  
  7.  $sFileName = '' ;  
  8.  if ( isset( $_FILES['NewFile'] ) && !is_null$_FILES['NewFile']['tmp_name'] ) )  
  9.  {  
  10.   global $Config ;  
  11.   $oFile = $_FILES['NewFile'] ;  
  12.   // Map the virtual path to the local server path.  
  13.   $sServerDir = ServerMapFolder( $resourceType$currentFolder$sCommand ) ;  
  14.   // Get the uploaded file name.  
  15.   $sFileName = $oFile['name'] ;  
  16.   $sFileName = SanitizeFileName( $sFileName ) ;  
  17.   $sOriginalFileName = $sFileName ;  
  18.   // Get the extension.  
  19.   $sExtension = substr$sFileName, ( strrpos($sFileName'.') + 1 ) ) ;  
  20.   $sExtension = strtolower$sExtension ) ;  
  21.   if ( isset( $Config['SecureImageUploads'] ) )  
  22.   {  
  23.    if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false )  
  24.    {  
  25.     $sErrorNumber = '202' ;  
  26.    }  
  27.   }  
  28.   if ( isset( $Config['HtmlExtensions'] ) )  
  29.   {  
  30.    if ( !IsHtmlExtension( $sExtension$Config['HtmlExtensions'] ) &&  
  31.     ( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true )  
  32.    {  
  33.     $sErrorNumber = '202' ;  
  34.    }  
  35.   }  
  36.   // Check if it is an allowed extension.  
  37.   if ( !$sErrorNumber && IsAllowedExt( $sExtension$resourceType ) )  
  38.   {  
  39.    $iCounter = 0 ;  
  40.    while ( true )  
  41.    {  
  42.     $sFilePath = $sServerDir . $sFileName ;  
  43.     if ( is_file$sFilePath ) )  
  44.     {  
  45.      $iCounter++ ;  
  46.      $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;  
  47.      $sErrorNumber = '201' ;  
  48.     }  
  49.     else 
  50.     {  
  51.      move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;  
  52.      if ( is_file$sFilePath ) )  
  53.      {  
  54.       if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] )  
  55.       {  
  56.        break ;  
  57.       }  
  58.       $permissions = 0777;  
  59.       if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] )  
  60.       {  
  61.        $permissions = $Config['ChmodOnUpload'] ;  
  62.       }  
  63.       $oldumask = umask(0) ;  
  64.       chmod$sFilePath$permissions ) ;  
  65.       umask( $oldumask ) ;  
  66.      }  
  67.      break ;  
  68.     }  
  69.    }  
  70.    if ( file_exists$sFilePath ) )  
  71.    {  
  72.     //previous checks failed, try once again  
  73.     if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath$sExtension ) === false )  
  74.     {  
  75.      @unlink( $sFilePath ) ;  
  76.      $sErrorNumber = '202' ;  
  77.     }  
  78.     else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true )  
  79.     {  
  80.      @unlink( $sFilePath ) ;  
  81.      $sErrorNumber = '202' ;  
  82.     }  
  83.    }  
  84.   }  
  85.   else 
  86.    $sErrorNumber = '202' ;  
  87.  }  
  88.  else 
  89.   $sErrorNumber = '202' ;  
  90.  
  91.  $sFileUrl = CombinePaths( GetResourceTypePath( $resourceType$sCommand ) , $currentFolder ) ;  
  92.  $sFileUrl = CombinePaths( $sFileUrl$sFileName ) ;  
  93.  SendUploadResults( $sErrorNumber$sFileUrl$sFileName ) ;  
  94.  exit ; 

Tags: php文件上传

分享到: