1

这就是我保存图像并为其创建缩略图的方式,每张图像可能有不同尺寸的不同缩略图

    original image :
     abc.jpg

    thumbnails :

    100X150_abc.jpg
    80X80_abc.jpg
etc...

现在我犯了一个错误,我的数百张图片被保存在错误的目录中我知道原始图片的名称,但我不确定缩略图

我所有的图像都有一个唯一的名称,因此我可以用它们的名称来识别缩略图,但缩略图中名称的开头部分是动态的。

06假设我想从目录中的07目录复制我的 abc.jpg

rename('images/06/abc.jpg', 'images/07/abc.jpg');

但是我能对缩略图做些什么呢?有没有类似正则表达式的方式来做到这一点?

像 !

rename('thumbs/06/^_abc.jpg', 'thumbs/07/^_abc.jpg');

基本上我想将所有以特定名称(like)结尾的图像复制_abc.jpg到另一个目录

4

3 回答 3

3

glob()函数支持*通配符(但不支持完整的正则表达式)。它返回一个匹配的文件名数组:

$from = '/absolute/path/thumbs/06/';
$to   = '/absolute/path/thumbs/07/';
chdir($from); // in this way glob() can give us just the file names
foreach(glob('*_abc.jpg') as $name) {
    rename($from.$name, $to.$name);
}

glob()函数不是很出名,但在这种情况下非常方便,因为其他 PHP 文件函数不支持通配符之类的东西。

于 2013-08-02T18:56:44.090 回答
1

这是应该工作的代码:

<?php
$olddir = "./images/06/";
$newdir = "./images/07/";
$files = scandir($olddir);
$count = count($files);
echo $count;
$x = 2;
while($x < $count)
    {
    echo $files[$x];
    $len = strlen($files[$x]);
    $sub = substr($files[$x], $len-7, 7);
    if($sub === "abc.jpg")
        {
        rename($olddir.$files[$x],$newdir.$files[$x]);
        }
    $x++;
    }
?>

这会将 06 文件夹中以 abc.jpg 结尾的所有文件移动到 07 文件夹。

让我知道它是否不起作用.... :)

于 2013-08-02T19:09:04.117 回答
0

rename('images/06/*abc.jpg', 'images/07/*abc.jpg');如果您只想要缩略图,请使用:rename('images/06/*_abc.jpg', 'images/07/*_abc.jpg');顺便说一句,如果您想要所有以 abc 开头的文件,请使用abc*.jpg

于 2013-08-02T18:48:15.030 回答