在不知道名称的情况下移动图像并用 php 覆盖图像

move image without knowing name and overwrite image with php

我在名为 A1 的文件夹中有很多图像。使用以下 php 代码,我可以将单个图像从文件夹 A1 移动到文件夹 A2

<?php
rename("/A1/1.jpg", "/A2/1.jpg");
?>

请问如何在不指定文件名的情况下将不知道名称的图像从A1文件夹移动到A2文件夹?(A1文件夹中的图像有各种名称,但都是.jpg扩展名.

每次 php 脚本 运行 它应该将下一张图像从 A1 文件夹移动到 A2 文件夹并覆盖之前从 A1 文件夹移动的 1.jpg 文件到 A2 文件夹。 (图像必须始终重命名为 1.jpg)

谢谢

glob() 很简单。示例:

如果要一次移动所有文件:

$files = glob('A1/*.jpg');
foreach ($files as $file) {
    $filename = basename($file);
    rename($file, "A2/$filename");
}

如果要将它们一一移动到目标文件名'A2/1.jpg':

$files = glob('A1/*.jpg');
if (count($files) > 0) {
    rename($file, 'A2/1.jpg');
}

所以您需要一次移动一张图片?

我会扫描文件夹中的文件并移动一个文件,例如:

$from = '/A1';
$files = scandir($from);

$to = '/A2';
if (!empty($files[2])) {
    rename("{$from}/{$files[2]}", "{$to}/{$files[2]}");
}

我使用了 $files 数组的索引 2 因为在那个数组集合中总会有 0 和 1 元素

[0] => .
[1] => ..

所以如果 $files[2] 存在我们移动它。

如果您需要移动所有文件,请像

一样循环执行
foreach($files as $file) { /* move */ }

您可以使用 glob 函数完成 finding/listing 目录中的文件

///EXAMPLE
glob('/a1/*.jpg');

//retruns something like the followin array
['test.jpg', 'example.jpg']

然后您可以像这样简单地循环遍历与模式匹配的文件名:

$filesAlreadyMoved= glob('/a2/*.jpg');
$filesFound = glob('/a1/*.jpg');

$filesNotMovedYet = array_diff($filesFound, $filesAlreadyMoved)

foreach ($filesNotMovedYet as $file) {
   //rename is used in the example iven so i will also.
   rename("/A1/1.jpg", "/A2/1.jpg");
}

此示例将找到所有尚未移动的文件并移动它们。