2012-06-22 136 views
0

我有一个问题在这里我试着上传文件文件重命名,同时上传

第一次是从温度就其各自的目录中移动的文件名,

但我再次尝试OT上传AA不同的文件使用相同的名称应该与date_somefilename.csv的 第一次上传的文件

重命名,并给文件名到原来的状态

例如文件test.csv,即时上传了第一次的Wi会上传到 相应的目录

test.csv,当我上传同名test.csv不同的csv文件

我需要得到

test.csv(最新上传的文件)

06222012130209_test.csv(第一次上传的文件)

的代码是下面

$place_file = "$path/$upload_to/$file_name";  



if (!file_exists('uploads/'.$upload_to.'/'.$file_name)) 
{ 

move_uploaded_file($tmp, $place_file); 


}else{ 

move_uploaded_file($tmp, $place_file); 
$arr1 = explode('.csv',$file_name); 
    $todays_date = date("mdYHis"); 
    $new_filename = $todays_date.'_'.$arr1[0].'.csv'; 
    echo $str_cmd = "mv " . 'uploads/'.$upload_to.'/'.$file_name . " uploads/$upload_to/$new_filename"; 
    system($str_cmd, $retval); 
} 
+0

您正在使用系统调用来移动文件? – BugFinder

+0

尝试使用函数[rename()](http://php.net/manual/en/function.rename.php)而不是系统'mv'。 – Dador

回答

2

参见代码中的注释。

$place_file = "$path/$upload_to/$file_name";  

if (!file_exists($place_file)) { 
    move_uploaded_file($tmp, $place_file); 
} else { 
    // first rename 
    $pathinfo = pathinfo($place_file); 
    $todays_date = date("mdYHis"); 
    $new_filename = $pathinfo['dirname'].DIRECTORY_SEPARATOR.$todays_date.'_'.$pathinfo['basename']; 
    rename($place_file, $new_filename) 
    // and then move, not vice versa 
    move_uploaded_file($tmp, $place_file); 
} 

DIRECTORY_SEPARATOR是php的常量。值为'/'或'\',具体取决于操作系统。

pathinfo()是php函数,返回有关路径的信息:dirname,basename,extension,filename。

1

怎样......

$place_file = "$path/$upload_to/$file_name";  

if (file_exists($place_file)) { 
    $place_file = date("mdYHis")."_".$file_name; 
} 

if (!move_uploaded_file($tmp, $place_file)) { 
    echo "Could not move file"; 
    exit; 
} 
+0

如果日期前置,文件不会移动到正确的路径。 – Vincent

0
$target = "uploads/$upload_to/$file_name"; 
if (file_exists($target)) { 
    $pathinfo = pathinfo($target); 
    $newName = "$pathinfo[dirname]/" . date('mdYHis') . "_$pathinfo[filename].$pathinfo[extension]"; 
    rename($target, $newName); 
} 
move_uploaded_file($tmp, $target); 

虽然小心:Security threats with uploads

0

这样的事情呢?

<?php 

$tmp = '/tmp/foo'; // whatever you got out of $_FILES 
$desitnation = '/tmp/bar.xyz'; // wherever you want that file to be saved 

if (file_exists($desitnation)) { 
    $file = basename($destination) 
    $dot = strrpos($file, '.'); 

    // rename existing file to contain its creation time 
    // "/temp/bar.xyz" -> "/temp/bar.2012-12-12-12-12-12.xyz" 
    $_destination = dirname($destination) . '/' 
     . substr($file, 0, $dot + 1) 
     . date('Y-m-d-H-i-s', filectime($destination)) 
     . substr($file, $dot); 

    rename($destination, $_destination); 
} 

move_uploaded_file($tmp, $destination); 
1

如果文件已经存在,我不会添加日期。相反,我只是在它的最后添加一个数字。把事情简单化。

$counter = 0; 
do { 
    // destination path path 
    $destination = $path.'/'.$upload_to.'/'; 

    // get extension 
    $file_ext = end(explode('.', $file_name)); 

    // add file_name without extension 
    if (strlen($file_ext)) 
     $destination .= substr($file_name, 0, strlen($file_name)-strlen($file_ext)-1); 

    // add counter 
    if ($counter) 
     $destination .= '_'.$counter;  

    // add extension 
    if (strlen($file_ext)) 
     $destination .= $file_ext; 

    $counter++; 
while (file_exists($destination)); 

// move file 
move_uploaded_file($tmp, $destination);