0

ここでファイルをアップロードしようとすると問題が発生します

初めてファイル名を一時からそれぞれのディレクトリに移動するとき、

しかし、もう一度、同じ名前の別のファイルをアップロードしてみます。最初にアップロードしたファイルの名前を変更する必要があります

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

5 に答える 5

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。

于 2012-06-22T11:18:50.557 に答える
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);
于 2012-06-22T11:35:10.987 に答える
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;
}
于 2012-06-22T11:16:36.150 に答える
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); 

ただし注意してください:アップロードによるセキュリティの脅威

于 2012-06-22T11:19:38.273 に答える
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);
于 2012-06-22T11:20:05.497 に答える