У меня проблема, я пытаюсь загрузить файл
первый раз он перемещает имя файла из temp it его соответствующего каталога,
но снова я пытаюсь загрузить файл aa с тем же именем, чтобы он переименовал первый загруженный файл
с date_somefilename.csv и указать имя файла в исходное состояние
например файл test.csv, im загружая его в первый раз, он будет загружен в соответствующий каталог как
test.csv, когда я загружаю другой файл csv с тем же именем test.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); }
См. Комментарии в коде.
$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.
Как насчет…
$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; }
Я бы не добавил дату в файл, если она уже существует. Вместо этого я бы просто добавил число до конца. Будь проще.
$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);
Остерегайтесь: угрозы безопасности с загрузками .
как насчет чего-то подобного?
<?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('YmdHi-s', filectime($destination)) . substr($file, $dot); rename($destination, $_destination); } move_uploaded_file($tmp, $destination);