我运行自己的备份类。在其中,我有一个维护功能,检查用户是否是管理员,检查用户是否在主页上,然后通过检查文件创建的时间戳扫描备份目录以查看该站点是否在一天内没有备份。如果存在文件或缺少文件的情况超过一天,它会启动备份并通知用户。
在将它移植到一个类之前,这个工作正常(不确定我是否在整个过程中搞乱了)。出于调试目的,我添加了几个echos .etc。
问题是如果dir为空(表示需要备份或未设置$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,这样做了,但仍然很奇怪。
答案 0 :(得分:1)
请阅读有关isset
的文档:
它的目的是检查变量是否设置。不要查看文件是否存在。
确定变量是否已设置且不是 NULL 。
这就是您的代码不起作用的原因。因为,您的$latest_filename
变量始终为 SET ,因为您最初已使用此代码进行了设置:$latest_filename = '';