0

我想将所有文件从一个文件夹移动到另一个文件夹。我的代码如下。在这个我创建了一个文件夹,我想从模板文件夹中复制所有文件

$doit = str_replace(" ", "", $slt['user_compeny_name']);
mkdir("$doit");
$source = "templat/";
$target = $doit . "/";
$dir = opendir($source);
while (($file = readdir($dir)) !== false) {
    copy($source . $file, $target . $file);
}

它工作正常。复制所有文件,但警告 copy() 函数的第一个参数不能是目录

谁能尽快帮助我

4

5 回答 5

4

Readdir 将读取目录中的所有子目录,包括其他目录和“虚拟”目录,例如 . 和..(分别链接到根目录和父目录。)您必须检查这些并阻止copy()这些实例的功能。

while (($file = readdir($dir)) !== false)
{
    if(!is_dir($file))
    {
        copy($source.$file, $target.$file);
    }
}
于 2009-10-12T11:25:04.897 回答
3
if ($file != "." && $file != "..") {
// copy
}
于 2009-10-12T11:23:36.303 回答
3

您没有考虑目录顶部的.和文件。..这意味着它首先尝试复制的是“\template”。这与尝试复制目录相同。

只需添加如下内容:

if ($file !== "." && $file !== "..")
...
于 2009-10-12T11:25:26.707 回答
3

opendir()将包括项目...根据文档

您需要使用其他注释中的代码来排除这些。

于 2009-10-12T11:26:10.547 回答
1

我知道,这个问题已经很老了,但也是答案。我觉得有必要展示一些新的方法,它们可以用来执行请求的任务。

同时,引入了具有更多功能和可能性的对象。不用说,其他答案仍然有效。

但是我们开始了,使用DirectoryIterator

$szSrcFolder = 'source_folder';
$szTgtFolder = 'target_folder';

foreach (new DirectoryIterator($szSrcFolder) as $oInfo)
    if ($oInfo->isFile())
        copy($oInfo->getPathname(), $szTgtFolder . DIRECTORY_SEPARATOR . $oInfo->getBasename());

请记住,在此脚本中,所有路径都相对于脚本本身的工作目录。

我认为这是自我解释,但我们会看看。这几行将遍历源文件夹的全部内容并检查它是否是文件并将其复制到目标文件夹,保留原始文件名。

于 2017-02-03T08:38:12.920 回答