今日在做一个打包文件的功能,打包完成后要删除临时文件夹,结果调用删除方法总是无法删除,单独调用删除方法则无问题,那么问题在哪呢?
下面先描述下打包流程:

1、创建临时文件夹

mkdir($tempPath, 0755, true);

2、寻找要打包的文件,复制到临时文件夹下

使用命令:is_dirfile_existscopy

function _copydir($source, $target, $filename){
        $handle = opendir($source);
        $i = 1;
        while (($item = readdir($handle)) !== false) {
            if ($item == '.' || $item == '..') continue;
            $_source = $source . $item;
            if (is_dir($_source)){
                $this->_copydir($_source, $target);
            }
            if (is_file($_source)){
                $_name = basename($_source);
                $_ext = substr($_name, strpos($_name, '.'));
                $_target = $target . '/' . $filename.'_'.$i.$_ext;
                copy($_source, $_target);
                $i++;
            }
        }
        closedir($handle);
    }

3、进入到临时文件夹上级目录下 !注意这里

使用命令:chdir

4、判断是否已存在打包文件,存在则删除

使用命令:file_existsunlink

5、打包文件

使用命令:execzip

6、删除临时文件夹

function _deleteDir($dir) {
        if (!$handle = @opendir($dir)) {
            return false;
        }
        while (false !== ($file = readdir($handle))) {
            if ($file !== "." && $file !== "..") {       //排除当前目录与父级目录
                $file = $dir . $file;
                if (is_dir($file)) {
                    $this->_deleteDir($file);
                } else {
                    @unlink($file);
                }
            }
        }
        closedir($handle);
        @rmdir($dir);
    }

问题就出在这里了,调用这个方法无效果,那么到底是什么原因呢?
我猜测可能是当前执行路径不对,所以我在调用删除方法前再次执行chdir,将当前路径变成初始路径,再次执行,这次就成功了。
知识点:

使用chdir函数时要注意执行路径

带符号 * 的表示必填项