编写插件以将所有上传的文件移至其父目录/文件夹

时间:2019-06-27 16:47:45

标签: php wordpress

在一个奇怪的情况下。客户有Wordpress网站,我们刚刚转移了托管服务提供商。旧站点使用WP Offload将所有图像放置到S3中,并使用随机生成器围绕每次上载创建一个文件夹。

示例:https://s3url/wp-uploads/2019/06/########/file.jpg

我们收到了从S3下载的所有已上传文件的ZIP。因此,所有文件都包含在其月/年文件夹中的一个随机命名的文件夹中。该数据库没有这些随机文件夹名称,因此所有图像均已损坏。数据库提供的“ wp-uploads / 2019/06 / file.jpg”显然返回了404。

客户在网站的5年中积累了数千张图像,因此手动移动它们将花费大量的时间。我希望写一个简单的插件,让我提供扫描和移动文件的文件夹。最糟糕的情况是,我每年必须运行12次(每个月)。我可以应付。

因此,我需要整理一个表格,为它提供源文件夹以供扫描,遍历所有子文件夹并运行以下代码。

$src = 'wp-uploads/2019/06/*/';
$dst = 'wp-uploads/2019/06/';

rcopy($src, $dst);  // Call function 

// Function to Copy folders and files       
function rcopy($src, $dst) {
    if (file_exists ( $dst ))
        rrmdir ( $dst );
    if (is_dir ( $src )) {
        mkdir ( $dst );
        $files = scandir ( $src );
        foreach ( $files as $file )
            if ($file != "." && $file != "..")
                rcopy ( "$src/$file", "$dst/$file" );

    } else if (file_exists ( $src ))
        copy ( $src, $dst );
                    rrmdir ( $src );
}       

// Function to remove folders and files 
function rrmdir($dir) {
    if (is_dir($dir)) {
        $files = scandir($dir);
        foreach ($files as $file)
            if ($file != "." && $file != "..") rrmdir("$dir/$file");
        rmdir($dir);
    }
    else if (file_exists($dir)) unlink($dir);
}

我疯了吗?有一个更好的方法吗?

0 个答案:

没有答案