Intereting Posts
Работа с запятыми в CSV 404 Ответ заголовка, но страницы отображаются нормально? Как предотвратить Предупреждение: длина содержимого и размер памяти POST Почему браузер пытается загрузить файл сценария php? Проблема обратного вызова жизненного цикла при расширении пользовательского объекта FOSUserBundle Не предоставлять доступ к определенному методу в контроллере, если сеанс не установлен в кодеигниторе извлекать текст из тега WordPress: Список сообщений без комментариев Java 1.6 Сбой при вызове фоновой задачей Symfony Отчеты об ошибках на лету в PHP PHP – если все методы абстрактного класса абстрактны, то в чем разница между интерфейсом и абстрактным классом Инструменты оптимизации PNG Где APC хранит данные? Возможно ли создать приложение iphone / android на базе php с помощью PhoneGap или Appcelerator? PHP, не вставляющий более 91 строки, формирует данные в базу данных с помощью ajax

переименование файла при загрузке

У меня проблема, я пытаюсь загрузить файл

первый раз он перемещает имя файла из 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);