PHP 重命名和串联添加额外的数字

PHP rename and concatenation adds extra numbers

我有以下代码,其操作如下: 选项 1 使用随机字符串重命名文件夹中的文件 选项 2 以增量方式重命名文件。 问题是由于某种原因循环运行了两次,给我留下了从大于 0 开始的数字。 有人能注意到逻辑有什么问题吗?

if ($handle = opendir('../images/IL')) {
    $nameCount = 0;
    while (false !== ($fileName = readdir($handle))) {
        $nameCount++;
        //opt 1 for random, opt 2 numeric incremental naming

        $opt = 2;

        if( inString('.jpg', $fileName) == 'true') {
            if($opt == 1) {
            $newName = '';
            $newName = genword( 8, 5 );
            rename('../images/IL/'.$fileName, '../images/IL/'.$newName.'.jpg');
        } 
        else if ( $opt == 2 ) {
            rename('../images/IL/'.$fileName, '../images/IL/image '.$nameCount.'.jpg');             
        }
    }
closedir($handle);
}

你做

$nameCount = 0;

循环之前和循环开始时

$nameCount++;

在循环的开头。 因此,文件最小编号为1。

$nameCount 在 while 循环的 次迭代中递增。这意味着 $nameCount 对于名称不包含“.jpg”的文件递增,例如blah.gif 这包括始终有 2 个的目录:. 当前目录和 .. 父目录。

所以,鉴于 $nameCount 立即增加,它的有效初始值为 1。然后为当前目录和父目录添加 2。加上不包含子字符串 .jpg 的任何其他文件或目录 - 这就是为什么您发现重命名的文件没有预期的顺序。

缩进不当,尤其是 $opt if/else 处理,可能是造成这种误解的原因。试试这个:

<?php
$img_dir = '../images/IL/';

function inString($needle, $haystack)
{
    if (strstr($haystack, $needle) != FALSE)
        return 'true';
    return 'false';
}

if ($handle = opendir($img_dir)) {
    $nameCount = 0;
    while (false !== ($fileName = readdir($handle))) {
        //opt 1 for random, opt 2 numeric incremental naming
        $opt = 2;

        if (inString('.jpg', $fileName) == 'true') {
            if ($opt == 1) {
                $newName = '';
                $newName = genword( 8, 5 );
                rename($img_dir.$fileName, $img_dir.$newName.'.jpg');
            }
            else if ($opt == 2) {
                $nameCount++;
                rename($img_dir.$fileName, $img_dir.$nameCount.'.jpg');
            }
        }
    }

    closedir($handle);
}

请注意 $nameCount 现在仅在重命名文件时递增。