这个问题太高深,我看没多少人能回答;
至于你说的 2. 应该不是问题,因为文件上传后一般改名为"原文件名+time()"的形式,
这样重名的几率微乎其微,你硬要说还是会有重名(哪怕是亿分之一),那就有点钻牛角尖了。

解决方案 »

  1.   

    如果你看了copy()函数工作过程就知道了
    文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了我们的上传文件过程。
      

  2.   

    bflovesnow(北风) 
    我明白你的意思,但是有多个文件要上传,势必要单独打开一页循环上传文件,用copy函数临时保存到临时目录,通过session记住文件名,问题是如果用户在关闭上传页后退出浏览器,那文件岂不一直搁在临时目录了?
      

  3.   

    session会有到期时间,用session是一个不错的办法。
      

  4.   

    263的上传附件不是session实现纪录上传文件的。他是先把文件上传到某个数组变量或者是mail系统的一个临时存放附件的文件夹内,文件名很可能是用户名+日期(或者是用户登陆时的sid---系统随机给的一个数,用于发送带附件的信件的标示).msg。当用户上传完毕后,系统会利用java把该用户上传的文件名、路径传给“新邮件”的窗口。提交后就把信的内容和附件发给收件人了。具体实现方法搂住可以下一些mail程序参考以下。
    松树邮件就别研究了,他的一个文件你可能就的研究一天。你可以下一些小的邮件系统。
      

  5.   

    2、上传到服务器的临时文件是如何管理的,如果有多个客户端同时在上传如何避免冲突(如:重名)?
    md5、uniqid、tempnam均可产生唯一的串。当服务器很快且访问频繁时,建议用tempnam。
    应为在此情况下确实发生过以时间为基数的唯一串不“唯一”的现象(主频低于200M的不会发生)
    若使用tempnam,那么就不能用copy了而是用fwrite。
    最好不要单用md5,因为其结果无规律,会给后续操作带来麻烦。1、在弹出窗口中粘贴多个文件后,应该在服务器端保存这些临时文件了,用session可以保存这些文件的路径,但是如这时客户端放弃粘贴退出浏览器,这些临时文件如何处理?
    file对象是只读对象,不能对其赋值。所谓“粘贴文件”的过程,应该是窗口间复制file对象的过程(这一点有待证实)。真正上传是在提交时完成,所以在此之前的操作都与服务器端无关,也无临时文件一说。即便是每选一个文件就上传一次。由于有与用户名相关的唯一的文件名,当用户意外中断了当前操作时,这些文件可以任其保留到该用户的下次访问时再删除。正常情况下是用户退出登录时删除
      

  6.   

    to: xuzuning(唠叨) 
    [这些文件可以任其保留到该用户的下次访问时再删除。正常情况下是用户退出登录时删除]
    1、下次访问如何知道临时文件的文件名吗?整个临时目录都删?万一别的用户正在用临时文件呢?
    2、黑客可否利用这个漏洞把服务器填满?
      

  7.   

    1、下次访问如何知道临时文件的文件名吗?整个临时目录都删?万一别的用户正在用临时文件呢?
    此类功能应该只有注册用户使用,设用户名保存在$username中。

    $username = "my"; //用户名

    uniqid($username); 
    可得形如
    my3fa07ba213139
    my3fa07ba213231
    ...
    的串

    tempnam("/tmp",$username);
    可得形如
    /tmp/my19.tmp
    /tmp/my1A.tmp
    ...
    的文件名
    由于均含有用户名,所以删除时可以有所选择。这也就是建议不使用md5的原因2、黑客可否利用这个漏洞把服务器填满?
    这种可能性是存在的。只有加强管理方可减少此类危害。这已经超出php能力的范围了。
    php只能在有限的范围里做简单的防范。
      

  8.   

    问题解决,使用session+数据表配合搞定,谢谢大家!
    思路:
    1、每次成功上载一个文件数据库加条记录,并标记未处理(process=0)
    2、用户确定提交后修改处理标记为process=1
    3、每次用户登陆时清理未处理标记的文件(删除文件及相关记录等)
    唯一漏洞:
    用户1次登陆,反复提交,直至服务器崩溃。
    给分了!