cambio de nombre de archivo durante la carga

Tengo un problema aquí estoy tratando de subir un archivo

primera vez que mueve el nombre de archivo desde la temperatura es su directorio respectivo,

pero de nuevo bash subir el archivo aa diferente con el mismo nombre, debería renombrar la primera vez que cargué el archivo

con date_somefilename.csv y le da al nombre de archivo su estado original

por ejemplo, un archivo test.csv, lo estoy cargando por primera vez y se cargará en el directorio correspondiente como

test.csv, cuando cargo otro archivo csv con el mismo nombre test.csv

Necesito obtener el

test.csv (último archivo subido)

06222012130209_test.csv (archivo subido por primera vez)

El código está debajo

$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); } 

Ver comentarios en el código

 $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 es php constante. El valor es ‘/’ o ‘\’, dependiendo del sistema de operación.

pathinfo () es la función php, que devuelve información sobre la ruta: dirname, basename, extension, filename.

Qué pasa…

 $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; } 

No agregaría una fecha al archivo si ya existe. En cambio, solo agregaría un número al final. Mantenlo simple.

 $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); 
 $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); 

Sin embargo, ten cuidado: amenazas de seguridad con cargas .

¿Qué tal algo como esto?

  "/temp/bar.2012-12-12-12-12-12.xyz" $_destination = dirname($destination) . '/' . substr($file, 0, $dot + 1) . date('YmdHi-s', filectime($destination)) . substr($file, $dot); rename($destination, $_destination); } move_uploaded_file($tmp, $destination);