首页 > 语言 > PHP > 正文

php上传图片学习笔记与心得

2024-09-04 11:44:47
字体:
来源:转载
供稿:网友

我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持.在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组.这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES.

如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在.从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off.

我们假设文件上传字段的名称为 userfile.名称可随意命名.

$_FILES['userfile']['name']

客户端机器文件的原名称.

$_FILES['userfile']['type']

文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”.

$_FILES['userfile']['size']

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

$_FILES['userfile']['tmp_name']

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

$_FILES['userfile']['error']

和该文件上传相关的错误代码.['error'] 是在 PHP 4.2.0 版本中增加的.

处理函数:

move_uploaded_file() (PHP 4 >= 4.0.3, PHP 5)

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.此外还会发出一条警告.

如果目标文件已经存在,将会被覆盖.

实例代码如下:

  1. if(move_uploaded_file($_FILES["magfile"]["tmp_name"], $uploaddir)) 
  2.   { 
  3.     echo "Update OK!"
  4.   } 

也可用copy(PHP 3, PHP 4, PHP 5)copy -- 拷贝文件bool copy ( string source, string dest )将文件从 source 拷贝到 dest.如果成功则返回 TRUE,失败则返回 FALSE.

提交页实例代码如下:

  1. <form action="." method="post" enctype="multipart/form-data" name="UL">   
  2. <!--这里的‘enctype="multipart/form-data" ’是必须的-->   
  3. <input type="file" name="picurl" size="15"   
  4. accept="image/x-png,image/gif,image/jpeg">   
  5. <input type="submit" name="upload" value="上传">   
  6. </form> 

处理页实例代码如下:

  1. if($_FILES['picurl']['size'] > 0){ 
  2.      if(move_uploaded_file ($_FILES['picurl']['tmp_name'], $_FILES['picurl']['name'])){ 
  3.        echo "图片上传成功"
  4.      }  
  5.    } 

其它非File类型的表单,可照样用$_POST['name']来接收.

php上传图片简单实现实例代码如下:

  1. <html>   
  2. <head>   
  3. <title>PHP上传图片简单实现 </title>   
  4. </head>   
  5. <body>   
  6. <?php   
  7. if($_GET['action'] == 'upfile')   
  8. {   
  9. $target_path = 'temp_'.$_FILES['photo']['name'];   
  10. echo '上传的临时文件:' .$_FILES['photo']['tmp_name'] . '<br/>';  
  11. echo '上传的目标文件:' .$target_path . '<br/>';  
  12. echo $_SERVER["SCRIPT_FILENAME"] . '<br/>';  
  13. echo $_SERVER["OS"] . '<br/>';  
  14. //测试函数: move_uploaded_file  
  15. //也可以用函数:copy  
  16. move_uploaded_file($_FILES['photo']['tmp_name'], $target_path);   
  17. echo "Upload result:";   
  18. if(file_exists($target_path)) {   
  19.  if($_SERVER["OS"]!="Windows_NT"){  
  20.   @chmod($target_path,0604);  
  21.  }  
  22.  echo '<font color="green">Succeed!</font><br /><a href="http://' .$_SERVER["SERVER_NAME"] . "/" .$target_path .'"><img src=' .$target_path .' border="0">';   
  23. else {   
  24.  echo '<font color="red">Failed!</font>';   
  25. }   
  26. exit;   
  27. }   
  28. ?>   
  29. <h1>Registration</h1>   
  30. <form action="upload.php?action=upfile" method="post" name="UForm" enctype="multipart/form-data">   
  31. <fieldset>   
  32. <legend>Your information</legend>   
  33. <ul>   
  34. <li>Your Phot<input type="file" name="photo"></li>   
  35. </ul>   
  36. </fieldset>   
  37. <button type="submit">上传</button>   
  38. </form>   
  39. </body>   
  40. </html> 
  41. 上面代码只适用于学习使用,如果想使用在现在的服务器上我们必须如下写法 
  42. 实例代码如下: 
  43. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  44. <?php 
  45. /****************************************************************************** 
  46. 参数说明: 
  47. $max_file_size  : 上传文件大小限制, 单位BYTE 
  48. $destination_folder : 上传文件路径 
  49. $watermark   : 是否附加水印(1为加水印,其他为不加水印); 
  50. 使用说明: 
  51. 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库; 
  52. 2. 将extension_dir =改为你的php_gd2.dll所在目录; 
  53. ******************************************************************************/ 
  54. //上传文件类型列表 
  55. $uptypes=array
  56.     'image/jpg'
  57.     'image/jpeg'
  58.     'image/png'
  59.     'image/pjpeg'
  60.     'image/gif'
  61.     'image/bmp'
  62.     'image/x-png' 
  63. ); 
  64. $max_file_size=2000000;     //上传文件大小限制, 单位BYTE 
  65. $destination_folder="uploadimg/"//上传文件路径 
  66. $watermark=1;      //是否附加水印(1为加水印,其他为不加水印); 
  67. $watertype=1;      //水印类型(1为文字,2为图片) 
  68. $waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中); 
  69. $waterstring="http://www.111cn.net/";  //水印字符串 
  70. $waterimg="xplore.gif";    //水印图片 
  71. $imgpreview=1;      //是否生成预览图(1为生成,其他为不生成); 
  72. $imgpreviewsize=1/2;    //缩略图比例 
  73. ?> 
  74. <html> 
  75. <head> 
  76. <title>ZwelL图片上传程序</title> 
  77. <style type="text/css"
  78. <!-- 
  79. body 
  80.      font-size: 9pt; 
  81. input 
  82.      background-color: #66CCFF; 
  83.      border: 1px inset #CCCCCC; 
  84. --> 
  85. </style> 
  86. </head> 
  87. <body> 
  88. <form enctype="multipart/form-data" method="post" name="upform"
  89.   上传文件: 
  90.   <input name="upfile" type="file"
  91.   <input type="submit" value="上传"><br> 
  92.   允许上传的文件类型为:<?=implode(', ',$uptypes)?> 
  93. </form> 
  94. <?php 
  95. if ($_SERVER['REQUEST_METHOD'] == 'POST'
  96.     if (!is_uploaded_file($_FILES["upfile"][tmp_name])) 
  97.     //是否存在文件 
  98.     { 
  99.          echo "图片不存在!"
  100.          exit
  101.     } 
  102.     $file = $_FILES["upfile"]; 
  103.     if($max_file_size < $file["size"]) 
  104.     //检查文件大小 
  105.     { 
  106.         echo "文件太大!"
  107.         exit
  108.     } 
  109.     if(!in_array($file["type"], $uptypes)) 
  110.     //检查文件类型 
  111.     { 
  112.         echo "文件类型不符!".$file["type"]; 
  113.         exit
  114.     } 
  115.     if(!file_exists($destination_folder)) 
  116.     { 
  117.         mkdir($destination_folder); 
  118.     } 
  119.     $filename=$file["tmp_name"]; 
  120.     $image_size = getimagesize($filename); 
  121.     $pinfo=pathinfo($file["name"]); 
  122.     $ftype=$pinfo['extension']; 
  123.     $destination = $destination_folder.time().".".$ftype
  124.     if (file_exists($destination) && $overwrite != true) 
  125.     { 
  126.         echo "同名文件已经存在了"
  127.         exit
  128.     } 
  129.     if(!move_uploaded_file ($filename$destination)) 
  130.     { 
  131.         echo "移动文件出错"
  132.         exit
  133.     } 
  134.     $pinfo=pathinfo($destination); 
  135.     $fname=$pinfo[basename]; 
  136.     echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>"
  137.     echo " 宽度:".$image_size[0]; 
  138.     echo " 长度:".$image_size[1]; 
  139.     echo "<br> 大小:".$file["size"]." bytes"
  140.     if($watermark==1) 
  141.     { 
  142.         $iinfo=getimagesize($destination,$iinfo); 
  143.         $nimage=imagecreatetruecolor($image_size[0],$image_size[1]); 
  144.         $white=imagecolorallocate($nimage,255,255,255); 
  145.         $black=imagecolorallocate($nimage,0,0,0); 
  146.         $red=imagecolorallocate($nimage,255,0,0); 
  147.         imagefill($nimage,0,0,$white); 
  148.         switch ($iinfo[2]) 
  149.         { 
  150.             case 1: 
  151.             $simage =imagecreatefromgif($destination); 
  152.             break
  153.             case 2: 
  154.             $simage =imagecreatefromjpeg($destination); 
  155.             break
  156.             case 3: 
  157.             $simage =imagecreatefrompng($destination); 
  158.             break
  159.             case 6: 
  160.             $simage =imagecreatefromwbmp($destination); 
  161.             break
  162.             default
  163.             die("不支持的文件类型"); 
  164.             exit
  165.         } 
  166.         imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); 
  167.         imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white); 
  168.         switch($watertype
  169.         { 
  170.             case 1:   //加水印字符串 
  171.             imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black); 
  172.             break
  173.             case 2:   //加水印图片 
  174.             $simage1 =imagecreatefromgif("xplore.gif"); 
  175.             imagecopy($nimage,$simage1,0,0,0,0,85,15); 
  176.             imagedestroy($simage1); 
  177.             break
  178.         } 
  179.         switch ($iinfo[2]) 
  180.         { 
  181.             case 1: 
  182.             //imagegif($nimage, $destination); 
  183.             imagejpeg($nimage$destination); 
  184.             break
  185.             case 2: 
  186.             imagejpeg($nimage$destination); 
  187.             break
  188.             case 3: 
  189.             imagepng($nimage$destination); 
  190.             break
  191.             case 6: 
  192.             imagewbmp($nimage$destination); 
  193.             //imagejpeg($nimage, $destination); 
  194.             break
  195.         } 
  196.         //覆盖原上传文件 
  197.         imagedestroy($nimage); 
  198.         imagedestroy($simage); 
  199.     } 
  200.     if($imgpreview==1) 
  201.     { 
  202.     echo "<br>图片预览:<br>"
  203.     echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize); 
  204.     echo " alt="图片预览:r文件名:".$destination."r上传时间:">"
  205.     } 
  206. ?> 
  207. </body> 
  208. </html> 

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表