将文件从一个文件夹复制到另一个

时间:2009-10-12 11:16:53

标签: php file file-handling

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

$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()函数的第一个参数不能是目录

任何人都可以尽快帮助我

5 个答案:

答案 0 :(得分:4)

Readdir将读取目录中的所有子项,包括其他目录,以及“虚拟”目录。和..(链接到root和父目录,resp。)您必须检查这些并阻止这些实例的copy()函数。

while (($file = readdir($dir)) !== false)
{
    if(!is_dir($file))
    {
        copy($source.$file, $target.$file);
    }
}

答案 1 :(得分:3)

if ($file != "." && $file != "..") {
// copy
}

答案 2 :(得分:3)

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

只需添加以下内容:

if ($file !== "." && $file !== "..")
...

答案 3 :(得分:3)

opendir()将根据documentation包含商品...

您需要使用其他评论中的代码排除这些内容。

答案 4 :(得分: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());

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

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