检查名称是否以 PHP 中的字符串结尾

Check if name ends by string in PHP

在我的文件夹缓存中,我有几十个名为 filename-number.json 的文件,例如

sifriugh-80.json
dlifjbhvzique-76.json
dfhgzeiuy-12.json
...

我有一个简单的脚本,每 2 小时清理一次缓存目录,删除超过 2 小时的文件:

$fileSystemIterator = new FilesystemIterator('cache');
$now = time();
foreach ($fileSystemIterator as $file) {
    if ($now - $file->getCTime() >= 3 * 3600) // 2 hours
        unlink('cache/' . $file->getFilename());
}

现在,我希望每 2 小时删除一次文件,其编号(在 .json 之前,但如果文件开头存在编号则不会)不以 -100.json 结尾,以及以 -100.json 结尾的那些,仅每 7 天一次。

我知道我可以使用 preg_match() 来获取名称,但是有什么有效的方法来执行它吗?

我不明白你为什么不应该使用 preg_match。这里真好。 在使用 preg_match 之前,您应该检查文件名中的第一个符号,如果是 is_numeric,则跳过下一个代码。 如果它不是数字你只需要得到结尾“-”可以呈现零或一个+数字1个或更多数字+ .json结尾 (模式可以是这样的/-?\d+\.json$/) 之后你可以解析它并知道.json之前的实数, 您的验证类似于

如果“-”符号存在且数字为 100,请检查 7 天的日期

如果数字不是 100,请检查日期 2 小时

有比使用 PHP 8+ str_ends_with() 的正则表达式更简单的方法:https://www.php.net/manual/en/function.str-ends-with.php

if (str_ends_with($file->getFilename(), '100.json)) {
    // unlink at needed time
} else {
    // unlink at needed time
}

对于PHP7,有几种方法可以模拟,查看https://www.php.net/manual/en/function.str-ends-with.php

底部