首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  PHP原创源码发布区 » [原创]PHP文件上传祖传秘方吐血公布  


  作者:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

  nqp@nqp.me
  4304410
  www.nqp.me

 

 发表:2004-09-17 05:47:37 阅读 5526 次 回复 28 次 得分33  |   字号 字色
[原创]PHP文件上传祖传秘方吐血公布
最近,咨询PHP文件上传技术的网友不断增多,因此,站长再三考虑,讲看家本领倾囊相授! 已飨读者!!
***********************************************************
*[声明]本站所有原创文章,均为站长或用户独立创作,版权归本站所有.*
*  本站为非盈利兴网站,主张源代码开放和免费.本站所有原创文 *
*  章欢迎任何形式的转载,但是,为尊重作者本人的著作权,书面  *
*  转载请联系站长,网络转载请注明出处,谢谢合作.   *
***********************************************************

[注意]本文中提供的代码,为站长本人撰写.本代码只注重功能实现和技术实现,仅供学习参考.没有考虑网络安全等其他因素.本站保证本代码不包含恶意内容.但是不保证本代码在不同环境中运行不会对系统产生负面影响.对于使用本代码带来的一切问题,本站不承担任何责任.本代码允许根据个人需要做任意改动,但是,如果完整使用本代码,请保留代码中的版权声明.谢谢合作.

-----------------------------------------------------------

   本例子是站长曾经写过的一个PHP文件远程管理系统的一部分代码.是其中的文件上传部分.可以很好的实现上传任意格式的文件到服务器指定目录的功能.
    本例子由两个文件组成: 1.html  2.php
    1.html是一个纯html文件,主要用来产生一个form,也就是文件上传的表单.2.php完成文件上传功能,包括判断文件是否已经存在,如果已经存在,则提示是否覆盖,等等.代码比较简单,并且站长书写了简单注释,估计有一定PHP基础的朋友一看就懂.
--------------------------------
1.html代码如下:
-----------------
<table cellpadding="4" style="border-collapse: collapse" bordercolor="#9999FF" width="446" height="144" cellspacing="1" border="0">
<tr><td width="414" height="373">
  <div align="center">
    <center>//下面表单开始
   <form  enctype="multipart/form-data" action="2.php" method="post">
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#808000" width="105%" height="95">
  <tr><td width="100%" height="46" colspan="2" bordercolor="#C0C0C0" bgcolor=#B7C8F9>
  <p align="center"> <font face="黑体" size="5">文件上传</font></td></tr><tr>
  <td width="100%" height="27" colspan="2" bgcolor="#FFF5E8" bordercolor="#C0C0C0">
    <p align="center"> </td>
  </tr>
   <tr>
    <td width="33%" height="27" align="left" bordercolor="#DFDFDB" bgcolor="#F4FFF4">
    <font size="2" color="#008080">   选择文件:</font></td>
    <td width="67%" height="27" bordercolor="#DFDFDB">
     
    <input name="pic_name" type="file"><font size=2 color=#24753F><br>
     </td>
  </tr>
  
  <tr>
    <td width="33%" height="27" align="left" bordercolor="#DFDFDB" bgcolor="#F4FFF4">
    <font size="2" color="#008080">   上传到:</font></td>
    <td width="67%" height="27" bordercolor="#DFDFDB">
     <input type="text" value="c:\"  name="target_dir"></td>
  </tr>
  <tr>
    <td width="100%" height="32" colspan="2" bgcolor=#B7C8F9>
    <p align="center"><input type="submit" value="上传" name="B1">    
    <input type="reset" value="重写" name="b2"></td>
</form>
  </tr>
    </table>
---------------------------------------------------
上面的代码虽然多,但是十分简单,一看就懂,直接复制下去使用也可以
2.php代码如下:(其中我使用了英文注释)
------------------------

<?php
//This program is used to file uploads.
//Writen by NQP,webmaster@17php.com www.17php.com
//Copyright 2004  all rights reserved.

$target_dir=$_POST["target_dir"];  //the target dir of the file.
$pic_name=""; //The file name.
  if(empty($_FILES['pic_name']['name'])){   
   echo "<script language=javascript>";
   echo "alert('你没有选择文件路径,请重试!');";
   echo "location.href='1.html';
   echo "</script>";
   exit;
   }else{    
$savedir=$target_dir.$_FILES['pic_name']['name'];
 if(file_exists($savedir)){
   ?>
  <script language=javascript>
   if(confirm("文件<?php echo $savedir;?>已经存在,要覆盖吗?")){
    <?php
    if(move_uploaded_file($_FILES['pic_name']['tmp_name'], $savedir)){
  $pic_name=basename($savedir);
  echo "alert('文件".$pic_name."已经成功上传到".$savedir."!');";
  echo "location.href='1.html
    }else{
     echo "alert('错误,无法将文件写入服务器!\n本次发布失败!');";
     echo "location.href='1.html';";
     }
  ?>
  }else{
   location.href="1.html";
   }
</script>
<?php
 }else{
   if(move_uploaded_file($_FILES['pic_name']['tmp_name'], $savedir)){
      $pic_name=basename($savedir);
  echo "<script language=javascript>";
      echo "alert('文件".$pic_name."已经成功上传到".$savedir."!');";
      echo "location.href='1.html';";
      echo "</script>";
      }else{
      echo "<script language=javascript>";
      echo "alert('错误,无法将文件写入服务器!\n本次发布失败!');";
      echo "location.href='1.html';";
      echo "</script>";
      exit;
      }
  }

}
------------------------------------------------------------

以上这个例子,是我费了很大的力气研究的.已经相当好用.只要你的php配置没有问题,那么我敢保证在php4/windows平台上,这个代码运行没有任何问题.关于在linux平台上,我没有测试过,不知道是否可以顺利运行.

  希望这段代码能够对大家了解PHP的文件系统操作有所帮助.
  如果觉得可以,请回复,如果又看不懂得地方,可以发问.
 
 1#楼  
 
  回复人:海天旭日
  注册时间:2004-04-06
  主题/回复:69/145
  积分:1508
  等级:★★★★(八级)
  称号:论坛才子

   
 1#楼 发表于2004-09-17 19:23:44  评分:3 

好!!!
 2#楼  
 
  回复人:slopesun
  注册时间:2004-09-07
  主题/回复:58/67
  积分:753
  等级:★★★(六级)
  称号:声名鹊起

   
 2#楼 发表于2004-09-17 19:32:31  评分:1 

站长大人太无私了!!!
就冲这一点.大家庆幸吧,庆幸找了个好地方.

 3#楼  
 
  回复人:Miyahoo
  注册时间:2004-04-04
  主题/回复:39/255
  积分:1210
  等级:★★★☆(七级)
  称号:论坛贤士

   
 3#楼 发表于2004-09-24 19:46:06  评分:1 

Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in d:\inetpub\wwwroot\2.php on line 26
 4#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 4#楼 发表于2004-09-28 23:56:55  评分:× 

纠正声明............................
由于输入错误,本程序有几处语法格式错误,特此纠正:

第十一行:echo "location.href='1.html';
   应该为: echo "location.href='1.html';";
第二十四行:echo "location.href='1.html
   应该为:echo "location.href='1.html';";

第三十七行:echo "location.href='1.html
   应该为: echo "location.href='1.html';";

主要有这几处错误。如果大家还有发现新的错误,也肯定是类似于这个引号错误。大家可以自行纠正。

 5#楼  
 
  回复人:xiaotian
  注册时间:2004-10-01
  主题/回复:1/4
  积分:409
  等级:★★☆(五级)
  称号:略有小成

   
 5#楼 发表于2004-10-01 07:42:01  评分:1 

站长这么大方,我也把我的一个上传相片的程序粘这里了
//php处理部分
$upload='../upload_pic';
$pic_max=5000000;
if ($pic_upload_type=="image/gif"||$pic_upload_type=="image/pjpeg"){
    if (file_exists("$upload/$pic_upload_name")){
    echo "<br><br><center>上传图片已经存在,请改名上传</center>";
exit;
}elseif ($pic_upload_size>=$pic_max){
echo "<br><br><center>图片太大,请优化一下</center>";
exit;}else{ 
copy($pic_upload,"$upload/".$pic_upload_name);
echo "图片上传成功!请将下面一段红色代码复制到文章中!<br>";
    echo "<br><font color=\"#FF0000\"><center><img src=upload_pic/$uploadpic_dir/$pic_upload_name></center></font>";
echo "你要上传的图片为<br>";
echo "<img src=../upload_pic/$uploadpic_dir/$pic_upload_name>";
}
  }else{
echo "<br><br><center>图片格式不对,请转化为jpg或gif式格式!</center>";
}
?>

//html页面部分
<form name="form2" method="post" action="uppic.php" target="_blank" enctype="multipart/form-data">
      <table width="300" border="0" cellspacing="0" cellpadding="0">
        <tr>
      <td width="10"> </td>
      <td><input type="file" name="pic_upload">
        <input type="submit" name="tjpic" value="提交"></td>
        </tr>
      </table>
    </form>
//完毕

大家可以看看这个好使不好使
 6#楼  
 
  回复人:小猪
  注册时间:2005-02-04
  主题/回复:1/11
  积分:416
  等级:★★☆(五级)
  称号:略有小成

   
 6#楼 发表于2005-02-11 02:40:55  评分:5 

谢谢站长.呵呵,找到好地方了,一起学习吧
 7#楼  
 
  回复人:vstart
  注册时间:2005-04-22
  主题/回复:6/20
  积分:450
  等级:★★☆(五级)
  称号:略有小成

   
 7#楼 发表于2005-04-22 03:36:23  评分:5 

为什么我总是这么幸运
幸运来到这个站
幸运这个站有个这么好的站长~~
致敬~~
 8#楼  
 
  回复人:less
  注册时间:2005-04-08
  主题/回复:12/20
  积分:480
  等级:★★☆(五级)
  称号:略有小成

   
 8#楼 发表于2005-04-26 22:53:33  评分:1 

试一下,这也是我所想要的,谢谢哈!
 9#楼  
 
  回复人:夜的沉默
  注册时间:2005-05-03
  主题/回复:1/2
  积分:407
  等级:★★☆(五级)
  称号:略有小成

用户联系方式已设置为保密
 9#楼 发表于2005-05-03 08:14:41  评分:3 

谢谢啦
 10#楼  
 
  回复人:bluerain
  注册时间:2005-05-05
  主题/回复:4/6
  积分:426
  等级:★★☆(五级)
  称号:略有小成

   
 10#楼 发表于2005-05-05 07:38:02  评分:1 

我觉得这段代码有点问题,但我没有测试。
我说一下我的看法。
if(file_exists($savedir)){
   ?>
  <script language=javascript>
   if(confirm("文件<?php echo $savedir;?>已经存在,要覆盖吗?")){
    <?php /* bluerain注:问题在这里,这里输出客户端脚本,但是后面的php代码会继续执行,并不会等待用户作出选择。无论选择确定还是取消,都会覆盖文件*/
    if(move_uploaded_file($_FILES['pic_name']['tmp_name'], $savedir)){
  $pic_name=basename($savedir);
  echo "alert('文件".$pic_name."已经成功上传到".$savedir."!');";
  echo "location.href='1.html
    }else{
 echo "alert('错误,无法将文件写入服务器!\n本次发布失败!');";
 echo "location.href='1.html';";
     }
  ?>
  }else{
   location.href="1.html";
   }
</script>
<?php
 11#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 11#楼 发表于2005-05-10 20:05:05  评分:× 

bluerain所言极是!
我用这个代码时间不短了,还没有察觉这个问题。
以前测试的时候感觉没有问题,可能是浏览器缓存问题。

看来要想实现检查文件是否存在的功能,还得想其他方法。
 12#楼  
 
  回复人:kookai
  注册时间:2005-05-09
  主题/回复:2/5
  积分:415
  等级:★★☆(五级)
  称号:略有小成

   
 12#楼 发表于2005-05-14 21:01:25  评分:1 

Parse error: parse error, unexpected '}' in d:\usr\www\html\wy\2.php on line 28

我知道这问题没营养,,可是眼睛都看花了,,还是没……   :(
 13#楼  
 
  回复人:tvrvjxk
  注册时间:2004-10-11
  主题/回复:6/11
  积分:449
  等级:★★☆(五级)
  称号:略有小成

   
 13#楼 发表于2005-05-17 03:39:48  评分:1 

Parse error: parse error, unexpected '}' in E:\php\2.php on line 28

这个问题怎么解决
 14#楼  
 
  回复人:kookai
  注册时间:2005-05-09
  主题/回复:2/5
  积分:415
  等级:★★☆(五级)
  称号:略有小成

   
 14#楼 发表于2005-05-18 02:52:00  评分: 

楼上的tvrvjxk你的问题解决了么???
 15#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 15#楼 发表于2005-05-21 02:17:55  评分:× 

勘误:
上面贴的程序,由于疏忽,造成了一点语法错误,给大家造成了不便。
现在将完整版,几经测试,绝对无错误,绝对直接可运行代码贴到这里!

当然,下面的程序虽然可以检查同名文件是否已经存在,但是不管如何都回覆盖掉原来的文件,这个问题还没有很好解决。但是最好的办法是上传的时候让系统自动生成一个文件名,用rand()函数,这样可以避免覆盖。
----------------------------------------------
1.html不变,只贴 2.php
--------------------------------------------
<?php
//this program is used to file uploads.
//Writen by NQP,webmaster@17php.com   http://www.17php.com
//欢迎使用和指点,请保留版权信息,谢谢。

$target_dir=$_POST["target_dir"]."\\";  //the target dir of the file.
$pic_name=""; //The file name.
  if(empty($_FILES['pic_name']['name'])){   
   echo "<script language=javascript>";
   echo "alert('你没有选择文件路径,请重试!');";
   echo "location.href='upfile.php';";
  //上面这个upfile.php是上传成功之后转到的页面
  //可以修改成自己需要的页面。
   echo "</script>";
   exit;
   }else{    
$savedir=$target_dir.$_FILES['pic_name']['name'];
 if(file_exists($savedir)){
   ?>
  <script language=javascript>
   if(confirm("文件<?php echo $savedir;?>已经存在,要覆盖吗?")){
    <?php
      if(move_uploaded_file($_FILES['pic_name']['tmp_name'], $savedir)){
      $pic_name=basename($savedir);
      echo "alert('文件".$pic_name."已经成功上传到".$savedir."!');";
      echo "location.href='upfile.php';";
  //上面这个upfile.php是上传成功之后转到的页面
  //可以修改成自己需要的页面。
      }else{
      echo "alert('错误,无法将文件写入服务器!\n本次发布失败!');";
      echo "location.href='upfile.php';";
      }
  ?>
  }else{
   location.href="upfile.php";
   }
</script>
<?php
 }else{
   if(move_uploaded_file($_FILES['pic_name']['tmp_name'], $savedir)){
      $pic_name=basename($savedir);
  echo "<script language=javascript>";
      echo "alert('文件".$pic_name."已经成功上传到".$savedir."!');";
      echo "location.href='upfile.php';";
      echo "</script>";
      }else{
      echo "<script language=javascript>";
      echo "alert('错误,无法将文件写入服务器!\n本次发布失败!');";
      echo "location.href='upfile.php';";
      echo "</script>";
      exit;
      }
  }

}
?>
-----------------------------------------------------
  页数1/2首页 « 1 2 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.029sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版