1

サーバーに既に存在する場合、次のコード形式を使用してイメージ名を変更しています。同じ名前のイメージが既に存在する場合は、増分イメージ名が必要です。

例: abc.pngabc_1.pngabc_2.png

function file_newname($path, $filename){
    if ($pos = strrpos($filename, '.')) {
       $name = substr($filename, 0, $pos);
       $ext = substr($filename, $pos);
    } else {
       $name = $filename;
    }

    $newpath = $path.'/'.$filename;
    $newname = $filename;
    $counter = 1;
    while (file_exists($newpath)) {
       $newname = $name .'_'. $counter . $ext;
       $newpath = $path.'/'.$newname;
       $counter++;
    }

    return $newname;
}

画像名がabc.png の場合、上記のコードは機能します。サーバー上にabc_1.pngという名前の画像が既に存在し、コードを実行すると、画像形式が として生成されabc_1_1.pngます。予想される出力: 既にabc_1.pngが存在し、コードを実行すると、abc_2.png$newnameが返されます。どうすれば達成できますか?

4

1 に答える 1

0

文字列の末尾を確認するだけでよく、そのために正規表現を使用する必要はありません。弱い型付けを利用is_numericして、以前のカウンターの値を見つけます。

function file_newname($path, $filename){
    if ($pos = strrpos($filename, '.')) {
        $name = substr($filename, 0, $pos);
        $ext = substr($filename, $pos);
    } else {
        $name = $filename;
    }

    $newpath = $path.'/'.$filename;
    $newname = $filename;
    // New code here:
    if(file_exists($newpath)){
        $counter = 1;
        if($pos = strrpos($name, '_')) {
            $oldcounter = substr($name, $pos + 1);
            if(is_numeric($oldcounter)){
                $counter = $oldcounter + 1;
                $name = substr($name, 0, $pos);
            }
        }
        $newname = $name . '_' . $counter . $ext;
        $newpath = $path . '/' . $newname;

        while (file_exists($newpath)) {
            $newname = $name .'_'. $counter . $ext;
            $newpath = $path.'/'.$newname;
            $counter++;
        }
    }

    return $newname;
}

機能を少し単純化したので、ライブの例に入れることができますが、追加した置換セクションのコードを試してみたい場合は、ここで確認できます: http://ideone.com/ xR1v0jの初期値を変更して、$nameさまざまな入力にどのように反応するかを確認してください。

于 2015-12-03T15:24:32.637 に答える