|
|
@@ -26,6 +26,7 @@ class Clear extends Command
|
|
|
->addOption('cache', 'c', Option::VALUE_NONE, 'clear cache file')
|
|
|
->addOption('log', 'l', Option::VALUE_NONE, 'clear log file')
|
|
|
->addOption('dir', 'r', Option::VALUE_NONE, 'clear empty dir')
|
|
|
+ ->addOption('expire', 'e', Option::VALUE_NONE, 'clear cache file if cache has expired')
|
|
|
->setDescription('Clear runtime file');
|
|
|
}
|
|
|
|
|
|
@@ -43,24 +44,43 @@ class Clear extends Command
|
|
|
}
|
|
|
|
|
|
$rmdir = $input->getOption('dir') ? true : false;
|
|
|
- $this->clear(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR, $rmdir);
|
|
|
+ // --expire 仅当 --cache 时生效
|
|
|
+ $cache_expire = $input->getOption('expire') && $input->getOption('cache') ? true : false;
|
|
|
+ $this->clear(rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR, $rmdir, $cache_expire);
|
|
|
|
|
|
$output->writeln("<info>Clear Successed</info>");
|
|
|
}
|
|
|
|
|
|
- protected function clear(string $path, bool $rmdir): void
|
|
|
+ protected function clear(string $path, bool $rmdir, bool $cache_expire): void
|
|
|
{
|
|
|
$files = is_dir($path) ? scandir($path) : [];
|
|
|
|
|
|
foreach ($files as $file) {
|
|
|
if ('.' != $file && '..' != $file && is_dir($path . $file)) {
|
|
|
- array_map('unlink', glob($path . $file . DIRECTORY_SEPARATOR . '*.*'));
|
|
|
+ $this->clear($path . $file . DIRECTORY_SEPARATOR, $rmdir, $cache_expire);
|
|
|
if ($rmdir) {
|
|
|
- rmdir($path . $file);
|
|
|
+ @rmdir($path . $file);
|
|
|
}
|
|
|
} elseif ('.gitignore' != $file && is_file($path . $file)) {
|
|
|
- unlink($path . $file);
|
|
|
+ if ($cache_expire) {
|
|
|
+ if ($this->cacheHasExpired($path . $file)) {
|
|
|
+ unlink($path . $file);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ unlink($path . $file);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 缓存文件是否已过期
|
|
|
+ * @param $filename string 文件路径
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ protected function cacheHasExpired($filename) {
|
|
|
+ $content = file_get_contents($filename);
|
|
|
+ $expire = (int) substr($content, 8, 12);
|
|
|
+ return 0 != $expire && time() - $expire > filemtime($filename);
|
|
|
+ }
|
|
|
}
|