0

我运行自己的备份课程。在其中我有一个维护功能,检查用户是否是管理员,检查用户是否在主页上,然后通过检查文件创建的时间戳扫描备份目录以查看该站点是否在一天内没有备份。如果存在文件或缺少文件超过一天的情况,它会启动备份并通知用户。

在我将它移植到课堂之前,它运行良好(不确定我是否在此过程中搞砸了任何事情)。出于调试目的,我添加了一些回声 .etc。

问题是如果目录为空(意味着需要备份或未$latest_filename设置),维护脚本不会执行任何操作。我所有的调试都让我相信set即使 dir 为空,后一个变量也总是在计算。

    if ($frontpage && checkAdmin()) {
        $path = $this->dir_sql;
        $latest_ctime = 0;
        $latest_filename = '';
        $d = dir($path);
        while (false !== ($entry = $d->read())) {
            $filepath = "{$path}/{$entry}";
            // could do also other checks than just checking whether the entry is a file
            if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
                $latest_ctime = filectime($filepath);
                $latest_filename = $entry;
                echo $latest_filename;
                echo $latest_ctime;
            }
        }
        // check if latest backup is over a day old
        // if it is create a new backup and run the regular
        // maintenance scripts below
        if (is_file($latest_filename) && date('d', filectime($latest_filename)) == date('d')) {
            self::doBackup();
        } elseif(!isset($latest_filename)) {
            self::doBackup();
        }
    }

编辑/更新:

我只是 if (isDirEmpty($this->dir_sql)) { self::doBackup(); } 在 if 之前添加了,并在底部删除了 elseif,这起到了作用,但仍然很奇怪。

4

1 回答 1

1

请阅读有关以下内容的文档isset

它的目的是检查变量是否设置。不看文件是否存在。

确定变量是否已设置且不为NULL

这就是您的代码不起作用的原因。因为,您的$latest_filename变量始终是SET,因为您最初已经使用以下代码设置了它:$latest_filename = '';

于 2013-11-12T03:21:39.897 回答