把文件上传到指定目录下/site_data/ ,文件名不变
把上传的文件备份一下并把上传人的用户名和上传时间计入文件名中
比如我下午18时05分上传了一个sohu_11.txt,那么就将此文件拷贝一份到备份目录,然后重命名为sohu_hotel_22_2010_07_27_18_05_00.txt。这样通过此备份目录就知道都有谁进行过操作,并记录了他们上传的数据。这是我的代码
高手帮帮忙啊这到底怎么改
为什么报错啊
<form enctype="multipart/form-data" action="up.php" method="post">
<input name="upload" type="file"><br>
<input type="submit" value="上传">
</form>
PHP code$upload_dir="./site_data/";
$upload_bak="./bak_data/";$file=$_FILES['upload'];
move_uploaded_file($file['tmp_name'],$upload_dir.$file['name']);$ext = explode(".",$file['name']);
$ext = $ext[count($ext)-1];   
$bakfilename = "{$username}_{$uid}_".data("a_b_c").".{$ext}";
copy($upload_dir.$file['name'], $upload_bak.$bakfilename );

解决方案 »

  1.   

    错误信息,提示总要贴出来吧
    data是个什么函数,目录确认正确这么点代码,你不如将php代码全部注销,然后从上往下,一行一行,取消注销,测试下呢
      

  2.   

    Fatal error: Call to undefined function data() in D:\APMServ5.2.6\www\htdocs\shangchuan.php on line 14
      

  3.   

    就是这行错$bakfilename = "{$username}_{$uid}_".data("a_b_c").".{$ext}";
      

  4.   

    如果是准备显示时间改成
    date("Y_m_d")//年月日
    date("Y_m_d_H_i_s")//年月日,时分秒
      

  5.   

    还是报错Fatal error: Call to undefined function data() in D:\APMServ5.2.6\www\htdocs\shangchuan.php on line 14
    $ext = explode(".",$file['name']);
    $ext = $ext[count($ext)-1];               
    $bakfilename = "{$username}_{$uid}_".data("Y_m_d_H_i_s").".{$ext}";//是这行
    copy($upload_dir.$file['name'], $upload_bak.$bakfilename );
      

  6.   

    我在E:\site_data建立个文件夹 里面建立个文件abc和.txt文件 我想每次上传文件时都覆盖这个abc 并在.txt中存储上传人的姓名和上传时间
      

  7.   

    data("a_b_c").".
    红字部分改成date()他的参数看手册d 月份中的第几天,有前导零的 2 位数字 01 到 31 
    D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun 
    j 月份中的第几天,没有前导零 1 到 31 
    l(“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday 
    N ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天) 
    S 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j 一起用 
    w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六) 
    z 年份中的第几天 0 到 366 
    星期 --- --- 
    W ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) 例如:42(当年的第 42 周) 
    月 --- --- 
    F 月份,完整的文本格式,例如 January 或者 March January 到 December 
    m 数字表示的月份,有前导零 01 到 12 
    M 三个字母缩写表示的月份 Jan 到 Dec 
    n 数字表示的月份,没有前导零 1 到 12 
    t 给定月份所应有的天数 28 到 31 
    年 --- --- 
    L 是否为闰年 如果是闰年为 1,否则为 0 
    o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003 
    Y 4 位数字完整表示的年份 例如:1999 或 2003 
    y 2 位数字表示的年份 例如:99 或 03 
    时间 --- --- 
    a 小写的上午和下午值 am 或 pm 
    A 大写的上午和下午值 AM 或 PM 
    B Swatch Internet 标准时 000 到 999 
    g 小时,12 小时格式,没有前导零 1 到 12 
    G 小时,24 小时格式,没有前导零 0 到 23 
    h 小时,12 小时格式,有前导零 01 到 12 
    H 小时,24 小时格式,有前导零 00 到 23 
    i 有前导零的分钟数 00 到 59> 
    s 秒数,有前导零 00 到 59> 
    时区 --- --- 
    e 时区标识(PHP 5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores 
    I 是否为夏令时 如果是夏令时为 1,否则为 0 
    O 与格林威治时间相差的小时数 例如:+0200 
    P 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) 例如:+02:00 
    T 本机所在的时区 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。 
    Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200 
    完整的日期/时间 --- --- 
    c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00 
    r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200 
    U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 参见 time() 
      

  8.   

    data("Y_m_d_H_i_s")//
    这里是date,不是data
      

  9.   

    又报错Warning: copy(./site_data/) [function.copy]: failed to open stream: No such file or directory in D:\APMServ5.2.6\www\htdocs\shangchuan.php on line 15
    $upload_dir="./site_data/";
    $upload_bak="./bak_data/";$file=$_FILES['upload'];
    move_uploaded_file($file['tmp_name'],$upload_dir.$file['name']);$ext = explode(".",$file['name']);
    $ext = $ext[count($ext)-1];
    $bakfilename = "{$username}_{$uid}_".date("Y_m_d_H_i_s").".{$ext}";
    copy($upload_dir.$file['name'], $upload_bak.$bakfilename );//就是这行
      

  10.   

    Warning: copy(./site_data/) [function.copy]: failed to open stream: No such file or directory in D:\APMServ5.2.6\www\htdocs\shangchuan.php on line 15
    警告:copy(./site_data/) [function.copy]:打开流失败,没有文件或者目录在
    D:\APMServ5.2.6\www\htdocs\shangchuan.php 第 15行老早提示过你,检测目录,注意data是什么函数如果你懒到不愿看提示,或者你看不懂,还是别学这个了。很多事都比码代码有前途
      

  11.   

    $upload_dir.$file['name']---1
    $upload_bak.$bakfilename ---2
    上面文件1是否存在(var_dump(is_file($upload_dir.$file['name'])))
    上面的文件夹2是否是文件夹(var_dump(is_dir($upload_bak.$bakfilename)))(如果不是文件夹那么要创建文件夹mkdir())
      

  12.   

    我的意思,程序打印出来的 Warning ,应该能看懂
      

  13.   

    copy($upload_dir.$file['name'], $upload_bak.$bakfilename );
    这句里面$file['name']根本没有值,所以copy才告诉你can't open stream,意思是找不到这个文件名,你给他的只有文件夹的名
      

  14.   

    $upload_dir="./site_data/";
    $upload_bak="./bak_data/";
    这两个目录都要存在。
    还要看你前面是否上传成功。
      

  15.   

    难道要这么写$FileName = $_FILES['file']['name'];?
      

  16.   

    $upload_dir="./site_data/";
    $upload_bak="./bak_data/";$file=$_FILES['upload'];$ext = explode(".",$file['name']);
    $ext = $ext[count($ext)-1];
    $filename1 = substr($file['name'],0,(strlen($file['name'])-strlen($ext)-1)); //无后缀原文件名
    $bakfilename = ($filename1 . '_username_uid_' . date('Y_m_d_H_i_s') . '.' . $ext);if(move_uploaded_file($file['tmp_name'],$upload_dir.$file['name'])){
    copy($upload_dir.$file['name'], $upload_bak.$bakfilename);
    }
    /*
       1 确保site_data,bak_data 两个目录 跟 up.php 同处于一个目录下并具有写入权限
       2 自己修改username 和 uid
    */