4

ファイル名が存在するかどうかを確認し、ファイルの名前を変更するにはどうすればよいですか?

たとえば、1086_002.jpgファイルが存在する場合は画像をアップロードし、ファイルの名前を変更して保存し、存在する1086_0021.jpg場合は名前を1086_0021.jpg変更1086_00211.jpgして保存し、1086_00211.jpg存在する場合は名前を変更1086_002111.jpgして保存します...

これが私のコードです。1086_002.jpg存在する場合にのみ実行でき、ファイルの名前を1086_0021.jpg.

//$fullpath = 'images/1086_002.jpg';

if(file_exists($fullpath)) {
    $newpieces = explode(".", $fullpath);
    $frontpath = str_replace('.'.end($newpieces),'',$fullpath);
    $newpath = $frontpath.'1.'.end($newpieces);
}

file_put_contents($newpath, file_get_contents($_POST['upload']));
4

5 に答える 5

9

次のようなものを試してください:

$fullpath = 'images/1086_002.jpg';
$additional = '1';

while (file_exists($fullpath)) {
    $info = pathinfo($fullpath);
    $fullpath = $info['dirname'] . '/'
              . $info['filename'] . $additional
              . '.' . $info['extension'];
}
于 2012-04-04T16:25:01.010 に答える
2

ファイル名にタイムスタンプを追加しないのはなぜですか? これにより、何度もアップロードされたファイルの長いファイル名について心配する必要がなくなります。

于 2012-04-04T16:22:31.743 に答える
1

これが役立つことを願っています

$fullPath = "images/1086_002.jpg" ;
$fileInfo = pathinfo($fullPath);
list($prifix, $surfix) = explode("_",$fileInfo['filename']);
$x = intval($surfix);
$newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT)  . $fileInfo['extension'];
while(file_exists($newFile)) {
    $x++;
    $newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT)  . $fileInfo['extension'];
}

file_put_contents($newFile, file_get_contents($_POST['upload']));

これが役立つことを願っています

ありがとう

:)

于 2012-04-04T16:35:45.367 に答える
1

こっちの方がいい気がする。同じ名前のファイルが何回アップロードされたかを追跡するのに役立ちます。同じ名前のファイルが見つかった場合、Windows OS がファイルの名前を変更するのと同じように機能します。

仕組み:メディアディレクトリに002.jpgという名前のファイルがあり、同じ名前のファイルをアップロードしようとすると、002(1).jpgとして保存されます。もう一度同じファイルをアップロードしようとすると、新しいファイルが保存されます。 as 002(2).jpg

それが役に立てば幸い。

$uploaded_filename_with_ext = $_FILES['uploaded_image']['name'];
$fullpath = 'media/' . $uploaded_filename_with_ext;
$file_info = pathinfo($fullpath);
$uploaded_filename = $file_info['filename'];

$count = 1;                 
while (file_exists($fullpath)) {
  $info = pathinfo($fullpath);
  $fullpath = $info['dirname'] . '/' . $uploaded_filename
  . '(' . $count++ . ')'
  . '.' . $info['extension'];
}
$image->save($fullpath);
于 2013-08-06T17:52:41.670 に答える
0

ifステートメントをwhileループに変更できます。

$newpath = $fullpath;
while(file_exists($newpath)) {
    $newpieces = explode(".", $fullpath);
    $frontpath = str_replace('.'.end($newpieces),'',$fullpath);
    $newpath = $frontpath.'1.'.end($newpieces);
}

file_put_contents($newpath, file_get_contents($_POST['upload']));
于 2012-04-04T16:23:09.097 に答える