使用PHP复制和重命名多个文件

使用PHP复制和重命名多个文件,php,image,copy,Php,Image,Copy,有没有一种方法可以在php中复制和重命名多个文件,但从数组或变量列表中获取它们的名称 我能找到的最接近我需要的东西就是这一页 但是这个页面上的脚本所做的唯一事情是创建第二个文件,并且它的名称已经在脚本中预设 我需要能够复制和创建多个文件,比如100-200,并从数组中设置它们的名称 如果我有一个名为“service.jpg”的初始文件 我需要使用数组中的不同名称多次复制该文件,如下所示: $imgnames=数组('London'、'NewYork'、'Seattle'); 等等 得到名为“s

有没有一种方法可以在php中复制和重命名多个文件,但从数组或变量列表中获取它们的名称

我能找到的最接近我需要的东西就是这一页

但是这个页面上的脚本所做的唯一事情是创建第二个文件,并且它的名称已经在脚本中预设

我需要能够复制和创建多个文件,比如100-200,并从数组中设置它们的名称

如果我有一个名为“service.jpg”的初始文件 我需要使用数组中的不同名称多次复制该文件,如下所示:

$imgnames=数组('London'、'NewYork'、'Seattle'); 等等

得到名为“service London.jpg”、“service New York.jpg”等3个独立文件的最终结果


我相信这应该是一个非常简单的脚本,但我对PHP的了解在当时是微不足道的。

您可以使用正则表达式来构建新的文件名,如下所示:

$fromFolder = 'Images/folder/';
$fromFile = 'service.jpg';
$toFolder = 'Images/folder/';
$imgnames = array('London', 'New-York','Seattle');

foreach ($imgnames as $imgname) {
    $newFile = preg_replace("/(\.[^\.]+)$/", "-" . $imgname . "$1", $fromFile);
    echo "Copying $fromFile to $newFile";
    copy($fromFolder . $fromFile, $toFolder . $newFile);
}
复制文件时,上面将输出以下内容:

Copying service.jpg to service-London.jpg
Copying service.jpg to service-New-York.jpg
Copying service.jpg to service-Seattle.jpg
在上面的代码中,将
$fromFolder
$toFolder
设置到文件夹中,如果需要,它们可以是同一个文件夹。

可以采取的一种方法(未测试)是创建一个类来复制目录。您提到需要获取目录中文件的名称,这种方法将为您处理它

它将迭代一个名称数组(无论您传递给它什么),并复制/重命名您选择的目录中的所有文件。您可能希望在
copy()
方法中添加一些检查(
file\u存在
,等等),但这肯定会让您顺利进行,而且非常灵活

// Instantiate, passing the array of names and the directory you want copied
$c = new CopyDirectory(['London', 'New-York', 'Seattle'], 'location/of/your/directory/');

// Call copy() to copy the directory
$c->copy();

/**
 * CopyDirectory will iterate over all the files in a given directory
 * copy them, and rename the file by appending a given name
 */
class CopyDirectory
{
    private $imageNames; // array
    private $directory; // string

    /**
     * Constructor sets the imageNames and the directory to duplicate
     * @param array
     * @param string
     */
    public function __construct($imageNames, $directory)
    {
        $this->imageNames = $imageNames;
        $this->directory = $directory;
    }

    /**
     * Method to copy all files within a directory
     */
    public function copy()
    {   
        // Iterate over your imageNames
        foreach ($this->imageNames as $name) {
            // Locate all the files in a directory (array_slice is removing the trailing ..)
            foreach (array_slice(scandir($this->directory),2) as $file) {
                // Generates array of path information
                $pathInfo = pathinfo($this->directory . $file);

                // Copy the file, renaming with $name appended
                copy($this->directory . $file, $this->directory . $pathInfo['filename'] . '-' . $name .'.'. $pathInfo['extension']);
            }
        }       
    }
}

一种方法是:迭代
$imageNames
数组,并使用PHP的
copy()
函数将其附加到
$newFile
变量中。函数中的第二个变量是文件的新名称,因此可以重命名该文件。