首页 > 语言 > PHP > 正文

PHP图片、文件批量上传代码

2024-09-04 11:45:11
字体:大 中 小
来源:转载
供稿:网友

不管是文件还是图片批量上传我们第一个是在html中做name=userfile[]这种数组变量,在php接受中我们做for ($_i=0; $_i<$_cont; $_i++)遍历这样就可以实现文件批量上传了,下面我来看一个实例,代码如下:

  1. <?php 
  2. session_start(); 
  3. ?> 
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  5. <html xmlns="http://www.w3.org/1999/xhtml"> 
  6. <head> 
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  8. <title>PHP文件批量上传</title> 
  9. <style> 
  10. * {margin:0; padding:0; list-style:none;} 
  11. .content {width:400px; height:auto; margin:0 auto; margin-top:60px; padding-bottom:30px; background:#ffd3b6; border:dashed 1px #f90} 
  12. .content h1 { width:400px; height: 30px; line-height:30px; text-align:center; font-family:"微软雅黑"; font-size:14px; color:#000} 
  13. .content .error {width:300px; height:auto; line-height:30px; text-align:center; margin:0 auto; color:#f00} 
  14. .content .con {width:340px; height:auto; margin:0 auto; font-size:12px;} 
  15. .content #file { width:280px; height:20px; border:solid 1px #ccc; background:#fff; margin:10px 0px 6px 0; font-size:12px;} 
  16. .content #send { width:60px; height:22px; border:solid 1px #ccc; background:#fff; font-size:12px; margin-top:10px;} 
  17. </style> 
  18. <script type="text/javascript" src="js/jquery.js"></script> 
  19. <script> 
  20. $(document).ready(function() { 
  21. $('#cont').val($('.file #file').size()); 
  22. $('#send').eq(0).click(function() { 
  23. var filesize=$('.file #file').size(); 
  24. $('.file').append("<input type='file' name='userfile[]' id='file'/>"); 
  25. $('#cont').val(filesize+1); 
  26. }); 
  27. }); 
  28. </script> 
  29. </head> 
  30. <body> 
  31. <div> 
  32. <h1>PHP文件批量上传</h1> 
  33. <div> 
  34. <div> 
  35. <?php 
  36. if ($_GET['up']==up) { 
  37. //防止重复提交 
  38. if ($_SESSION['file']==$_GET['irand']) { 
  39. $_cont=intval($_POST['cont']);   //将file框总数接收并转换成整型 
  40. $_size=20000;                    //设置限制文件大小 
  41. $_dir='pdir/';                   //文件保存目录 
  42. function size($_size) { 
  43. //判断文件大小是否大于1024bit 如果大于,则将大小取值为KB,以此类推 
  44. if ($_size>1024*1024) { 
  45. return round($_size/1024/1024,2).' MB'; 
  46. }else if ($_size>1024) { 
  47. $_size=$_size/1024; 
  48. return ceil($_size).'KB'; 
  49. }else { 
  50. return $_size.' bit'; 
  51. } 
  52. } 
  53. //设置上传图片的类型,设置图片上传大小 
  54. $_upfiles = array('image/jpeg','image/pjpeg','image/png','image/x-png','image/gif'); 
  55. //利用for循环上传文件 
  56. for ($_i=0; $_i<$_cont; $_i++) { 
  57. if (is_array($_upfiles)) { 
  58. if (!in_array($_FILES['userfile']['type'][$_i],$_upfiles)) { 
  59. exit('请上传格式为:jpg,png,gif的文件<br /><a href="pupload.php">返回</a>'); 
  60. } 
  61. } 
  62. //判断文件大小 
  63. if ($_FILES['userfile']['size'][$_i]>$_size) { 
  64. exit('上传文件不能超过:'.size($_size)); 
  65. } 
  66. //检测文件是否已经上传 
  67. if ($_FILES['userfile']['error'][$_i]>0) { 
  68. switch ($_FILES['userfile']['error'][1]) { 
  69. case 1: echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'; 
  70. break; 
  71. case 2: echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'; 
  72. break; 
  73. case 3: echo '文件只有部分被上传'; 
  74. break; 
  75. case 4: echo '没有文件被上传'; 
  76. break; 
  77. case 6: echo '找不到临时文件夹'; 
  78. break; 
  79. case 7: echo '文件写入失败'; 
  80. break; 
  81. } 
  82. exit; 
  83. } 
  84. //获取文件扩展名 
  85. if (!is_dir($_dir)) { 
  86. mkdir($_dir,0700); 
  87. } 
  88. //生成随笔数 
  89. $_rand=mt_rand(0,100000); 
  90. //获取文件扩展名 
  91. $_n=explode('.',$_FILES['userfile']['name'][$_i]);  //将文件名分割 
  92. $_file_len=count($_n);         //返回数组长度 
  93. //确保获取的扩展名是最后一个.后面的 
  94. $_name=$_dir.time().'_'.$_rand.'.'.$_n[$_file_len-1]; 
  95. //移动文件到指定的目录 
  96. if (is_uploaded_file($_FILES['userfile']['tmp_name'][$_i])) { 
  97. if (!@move_uploaded_file($_FILES['userfile']['tmp_name'][$_i],$_name)) { 
  98. exit('文件移动失败'); 
  99. }else { 
  100. echo '文件上传成功<br />'; 
  101. echo '文件路径:'.$_name.'<br />'; 
  102. echo '文件大小:'.size(filesize($_name)); 
  103. echo '<br /><a href="pupload.php">返回继续上传</a>'; 
  104. } 
  105. }else { 
  106. exit('上传的临时文件不存在,无法将文件移动到指定文件夹'); 
  107. } 
  108. } 
  109. //销毁session变量,有几种方法 
  110. //第一种,销毁所有session变量:session_destroy(); 
  111. //第二种:销毁单个如:$_SESSION['file']='' 
  112. session_destroy(); 
  113. exit; 
  114. }else { 
  115. exit('您已经提交过了,不能重复提交<br /><a href="pupload.php">返回</a>'); 
  116. } 
  117. } 
  118. ?> 
  119. </div> 
  120. <?php $_irand=mt_rand(0,1000000); $_SESSION['file']=$_irand; ?> 
  121. <form action="?up=up&irand=<?php echo $_irand; ?>" method="post" enctype="multipart/form-data"> 
  122. <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> 
  123. <input type="hidden" name="cont" value="" id="cont" /> 
  124. <div>  //开源软件:Vevb.com 
  125. <input type="file" name="userfile[]" id="file"/> 
  126. <input type="file" name="userfile[]" id="file"/> 
  127. <input type="file" name="userfile[]" id="file"/> 
  128. <input type="file" name="userfile[]" id="file"/> 
  129. </div> 
  130. <br /> 
  131. <input type="button" name="send" value=" 添加一个 " id="send"/> 
  132. <input type="submit" name="send" value=" 点击上传 " id="send"/> 
  133. </form> 
  134. </div> 
  135. </div> 
  136. </body> 

核心原理分析:在多文件上传中我们前台最重要的是如下代码:

  1. <input type="file" name="userfile[]" id="file"/> 
  2. <input type="file" name="userfile[]" id="file"/> 
  3. <input type="file" name="userfile[]" id="file"/> 
  4. <input type="file" name="userfile[]" id="file"/> 

这几行代码有细节的朋友会发现name="userfile[]"了,这个是以数组存储了,这样我们如果使用js也可以这样增加<input type="file" name="userfile[]" id="file"/>就可以了,那么在php是如何获取的呢.

在多文件上传中php处理是一个关键,代码如下:

  1. for ($_i=0; $_i<$_cont; $_i++) { 
  2. if (is_uploaded_file($_FILES['userfile']['tmp_name'][$_i])) { 
  3. if (!@move_uploaded_file($_FILES['userfile']['tmp_name'][$_i],$_name)) { 
  4. exit('文件移动失败'); 
  5. }else { 
  6. echo '文件上传成功<br />'; 
  7. echo '文件路径:'.$_name.'<br />'; 
  8. echo '文件大小:'.size(filesize($_name)); 
  9. echo '<br /><a href="pupload.php">返回继续上传</a>'; 
  10. } 
  11. } 

这里显示很简单我们会看到有一个for,for就是遍历数组,遍历userfile[]数组,然后再由$_FILES['userfile']['tmp_name'][$_i]来获取不同文件图片再进行上传即可,注意[$_i]就是你的多文件上传项了,只是保存在了数组中.

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