老师,我复制文件这样写 为啥复制不了,调了好久搞不通了

老师,我复制文件这样写 为啥复制不了,调了好久搞不通了

我分析了逻辑是可以实现的 但是就是复制不了文件夹,老师帮忙看看哪里不对,代码如下:

/**
* 将a目录下的所有文件和目录全部复制到b目录下,行成b/a/*
* @param string $src a
* @param string $dest b
* @return bool
*/
function copy_dir1(string $src, string $dest)
{
   //检测源目录是否存在
   if (!is_dir($src)) {
       echo '1';
       return false;
   }
   //检测目标目录下是否存在同名的源文件夹,不存在创建,存在返回false
   $dest = $dest . DIRECTORY_SEPARATOR . basename($src);// b/a
   if (is_dir($dest)) {
       return false;
   } else {
       mkdir($dest, 755, true);
   }
   if ($handle = opendir($src)) {
       while (($item = readdir($handle)) !== false) {
           if ($item != '.' && $item != '..') {
               $srcName = $src . DIRECTORY_SEPARATOR . $item;
               $destName = $dest . DIRECTORY_SEPARATOR . $item;
               if (is_file($srcName)) {
                   copy($srcName, $destName);
               }else{
                   $func = __FUNCTION__;
                   $func($srcName, $destName);
               }
           }
       }
       closedir($handle);
       return true;
   } else {
       return false;
   }
}

var_dump(copy_dir1('../../image', '.'));

路径啥的都没问题 我都打印看了

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,建议同学在循环中添加一个@,代码如下所示:

http://img1.sycdn.imooc.com//climg/5ee83e2009b7aec706770335.jpg

注:@是为了抑制错误显示,让用户看不到,提升用户体验。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 慕九州8345213 提问者 #1
    老师,我这段代码是达不到复制的目录的目的,不是有警告或者错误输出呢!不过我好像找到了问题,是由于我这里用的是else if (is_file($srcName)) { copy($srcName, $destName); }else{ $func = __FUNCTION__; $func($srcName, $destName); } 应该要分开用is_dir和is_file,应为is_file的else还表示不是文件或者不存在
    2020-06-17 15:47:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师