我想将所有文件从一个文件夹移动到另一个文件夹。我的代码如下。在这个我做了一个文件夹,我想从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()函数的第一个参数不能是目录
任何人都可以尽快帮助我
答案 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());
请记住,在此脚本中,所有路径都相对于脚本本身的工作目录。
我认为这是自我解释,但我们会看一看。这几行将遍历源文件夹的整个内容,并检查它是否是一个文件,并将其复制到目标文件夹,保留原始文件名。