我有存储在文件夹中的图像内容,如下所示:
Contents
--> Content1
--> Content2543
--> Content3654
--> Content4456
--> Content5456
--> Content6765
--> Content9565
以此类推,直到内容700k。
我需要改变内容的存储方式,使同一文件夹上的文件夹不超过1000个,所以我决定将内容移动到一个范围内的另一个文件夹中,例如,id在1到1000之间的内容进入名为Contents1-1000 的文件夹
预期结果是:
Contents
--> Contents1-1000
--> Content1
--> Contents1001-2000
--> Contents2001-3000
--> Content2543
--> Contents3001-4000
--> Content3654
--> Contents4001-5000
--> Content4456
--> Contents5001-6000
--> Content5456
--> Contents6001-7000
--> Content6765
--> Contents7001-8000
--> Contents8001-9000
--> Contents9001-10000
--> Content9565
我知道如何将新内容引导到这个文件夹结构中,但我不知道如何将合适的当前内容添加到这个结构中,到目前为止我有这个:
$directories = glob($_SERVER['DOCUMENT_ROOT'].'/contents/*' , GLOB_ONLYDIR);
foreach($directories as $dir) {
rename(basename($dir), basename($dir));
}
但我错过了如何迭代文件夹名称,以便内容26304进入文件夹2600-27000。
感谢
您可以尝试以下操作:
$directoryIterator = new DirectoryIterator($_SERVER['DOCUMENT_ROOT'] . '/contents');
foreach ($directoryIterator as $fileInfo) {
if ($fileInfo->isDot() || !$fileInfo->isDir()) {
continue;
}
preg_match('/'d+$/', $fileInfo->getFilename(), $directoryNumber);
$rangeMin = floor($directoryNumber[0] / 1000) * 1000 + 1;
$range = array($rangeMin, $rangeMin + 999);
$newPath = $fileInfo->getPath()
. '/Contents'
. implode('-', $range)
. '/'
. $fileInfo->getFilename();
rename($fileInfo->getPathname(), $newPath);
}
附言:请注意,此代码未经测试,可能需要一些增强功能才能正常工作。
$directories = glob($_SERVER['DOCUMENT_ROOT'].'/acuarelas/contenidos/*' , GLOB_ONLYDIR);
foreach($directories as $dir) {
$id = basename($dir);
$alocator = floor($id/1000);
$alocatordir = ($alocator*1000)."-".(($alocator*1000)+1000);
echo $alocatordir."/".$id."<br>";
}
以下是如何对任何单个内容文件$curFilename
:执行此操作
$curFilename = "Content26304";
preg_match('/[0-9]/', $curFilename, $matches, PREG_OFFSET_CAPTURE);
$id = substr($curFilename, $matches[0][1]);
$minFolder = (floor($id / 1000) * 1000) + 1;
$maxFolder = ($minFolder - 1) + 1000;
所以你可以看到输出:
echo "File [$curFilename] should go to [$minFolder]-[$maxFolder]";